スマートスタイル TECH BLOG

MySQL InnoDB Cluster にインスタンスを追加した際の MySQL Router のルーティング

最近は、弊社のブログでもよく情報を発信している MySQL InnoDB Cluster ですが、実稼働システムでの採用事例も徐々に増えているのではないでしょうか。

今回は、MySQL 8.0.13 の MySQL InnoDB Cluster にインスタンスを追加し、追加したインスタンスに MySQL Router からルーティングされるまでの確認をしてみたいと思います。

同バージョンでの MySQL InnoDB Cluster を構築する方法については、以下の記事をご参照下さい。
MySQL 8.0.13 で MySQL InnoDB Cluster を構築する

構成

VirtualBox+Vagrantを使用し、MySQL Router と MySQL Shell は同一サーバにインストールしています。

マシン IP ホスト名
MySQL Router
MySQL Shell
192.168.33.10 mysqlrouter
MySQL Server 1 192.168.33.11 node1
MySQL Server 2 192.168.33.12 node2
MySQL Server 3 192.168.33.13 node3
MySQL Server 4
(追加するインスタンス)
192.168.33.14 node4

※本来、MySQL InnoDB Cluster ではスプリットブレイン等を考慮して、3台以上の奇数でのグループ構成を推奨しています。

構成の状態確認 (インスタンス追加前)

以下のように、node1, 2, 3 の Single Primary モードの3台構成で、 node1 が PRIMARY の状態です。

インスタンスの追加

現時点で SECONDARY が node2, 3 の2台ですが、node4 を追加します。
また、既存インスタンスには、100,000 件のレコードが存在するテーブルが存在しています。

まずは、MySQL Router サーバにインストールした MySQL Shell で「dba.configureInstance()」 を実行し、node4 のパラメータを変更します。

今回は事前に必要な server_id 等の設定を my.cnf にしていた為、変更パラメータはなしとなります。

次に MySQL Shell で既存インスタンスのいずれかに接続し、
「cluster = dba.getCluster()」 → 「cluster.addInstance()」 を実行して node4 を追加します。
本来であれば、事前に追加インスタンスへフルバックアップからリストアする作業が必要になりますが、今回は既存インスタンスに Cluster 構築時からのバイナリログが全て残っている為、リストア作業は不要な状態となっています。

コマンドが正常終了したので、インスタンスが正常に追加されているか確認してみます。

構成の状態確認 (インスタンス追加後)

正常にインスタンスが追加されている事が確認できます。
MySQL Shell で「cluster.status()」を実行した際に、 192.168.33.14 (node4) の「status」は 100,000 件のデータが反映されるまでは RECOVERING となっており、ONLINE となるまでは2分30秒程かかりました。

MySQL Router のルーティングについて

インスタンス追加前から MySQL Router の READ ONLY のポートに常時接続をしていると、node4 のステータスが ONLINE になったのとほぼ同時に自動的に node4 へのルーティングも追加され、100,000 件のデータも参照できています。

しかし、このままだと node1 から node3 までが停止して、node4 だけがアクティブな状態になると、MySQL Router からはルーティングされません。
(期待する動作は node4 がPRIMARYノードになって、READ/WRITE のポートへのアクセスが node4 にルーティングされることでした)

何故かというと、MySQL Router の InnoDB Cluster 構築時に実行した bootstrap オプションを指定して設定ファイルを作成した場合、以下のような設定となっています。

bootstrap_server_addresses にはメタ情報を取得するインスタンスの情報があり、ここに指定のないサーバからはメタ情報を取得できない為、ルーティング情報が取得できない状態になります。
なので、今回のケースであれば、以下のように追加したインスタンス(node4:192.168.33.14)情報を追加して、MySQL Router を再起動すれば、 node4 のみになった場合は、READ WRITE のポートへのアクセスが正常に node4 に割り振られるようになります。

まとめ

MySQL InnoDB Cluster にインスタンスを追加した場合は、MySQL Router の設定ファイルで bootstrap_server_addresses の更新が必要である事を確認しましたが、MySQL 8.0.13から dynamic_config なるパラメータが追加され、動的にメタ情報を取得できるようなオプションが追加されているようです。

しかし、現時点(2018年12月11日)でリファレンスマニュアルには、dynamic_config で設定するパラメータファイルの情報がなく、使用方法が不明な状況です。

今後、リファレンスマニュアルが更新されれば、dynamic_config の動作についても確認してみようと思います。


MySQL

 

Return Top