はじめに
この記事は MySQL Advent Calendar 2024 15日目の記事です。
(なんか、いつの間にか15日の人のが消えていたので代わりに埋めてみました)
何をしてどうなった?
MySQL Shellを使って、既存のグループレプリケーションにaddInstance()を追加しようとして、以下のようなエラーで失敗した。
エラーメッセージ
エラーログに以下のようなメッセージが出ます。
[GCS] Connection attempt from IP address ::ffff:xxx.xxx.xxx.xxx refused. Address is not in the IP allowlist.
理由
group_replication_ip_allowlistで追加可能なアドレスを絞っていて、追加しようとしたインスタンスのIPが含まれていなかった。
そんなのmy.cnfに設定した覚えない!と思ってるのに、SHOW GLOBAL VARIABLES;実行すると設定されている場合、createCluster()、addInstance、rejoinInstance()とかで過去にipAllowlistというオプション使ったんじゃないかなと思います。
ipAllowListオプションについてはコチラ
対応方法
グループのメンバーが通信に使用するすべてのIPアドレスを、group_replication_ip_allowlistに追加します。
例えば、my.cnfなどに
group_replication_ip_allowlist = '10.11.172.10,10.11.172.11,10.11.172.12'
と書いてあり、追加したいのが10.11.172.13だとすれば、
mysql> SET GLOBAL group_replication_ip_allowlist = '10.11.172.10,10.11.172.11,10.11.172.12,10.11.172.13'; -- my.cnfにも再起動時のため追加しておく
または
mysql> SET PERSIST group_replication_ip_allowlist = '10.11.172.10,10.11.172.11,10.11.172.12,10.11.172.13'; -- こっちは mysqld-auto.cnf に自動で書き込まれるのでmy.cnfの対応不要
上記の例のように、IPv4アドレスで設定している場合、エラーログに IPv4 アドレスの前にIPV4-mapped IPv6 アドレスの「::ffff:」が付く形で表示されますが、パラメータ設定時は普通の書き方でOKです!
メンバーの再起動は不要ですが、メンバー全てに対して行う必要があることに注意してください。
関連ドキュメント
- MySQL :: MySQL Shell 8.4 :: 7.4.4 Adding Instances to an InnoDB Cluster
- MySQL :: MySQL Shell 8.4 :: 7.6 Securing InnoDB Cluster
- MySQL :: MySQL Shell 8.4 :: 7.5.1 Setting Options for InnoDB Cluster
- MySQL :: MySQL 8.0 リファレンスマニュアル :: 18.5.1 グループレプリケーション IP アドレスの権限
終わりに
実はこれ書いているのアドカレ終わった12月26日w