MySQL 8.
前提
はじめに、レプリカの自動ソース切り替えを使用するには以下要件を満たしておく必要があります。
- GTIDレプリケーションであること [1]
- 新しいソースに既存のソースと同じレプリケーションユーザーアカウントとパスワードがあること
- レプリケーションユーザーアカウントに
performance_
スキーマのすべてのテーブルに対するSELECT権限があることschema
mysql> GRANT SELECT ON performance_schema.* TO 'replication_user';
設定方法
次に、切り替え先のソース情報を格納するソースリストを作成します。
ソースリストを作成するにはasynchronous_
関数を利用します。Port3306
は現ソースであり、優先度を60にしています。もしこのソースがダウンした場合に自動でPort3307
に切り替わるように設定します。関数の戻り値は、成功か失敗を示す文字列が返ります。
mysql> SELECT asynchronous_connection_failover_add_source('', '127.0.0.1', 3306, '', 60); +------------------------------------------------------------------------------+ | asynchronous_connection_failover_add_source('', '127.0.0.1', 3306, '', 60) | +------------------------------------------------------------------------------+ | The UDF asynchronous_connection_failover_add_source() executed successfully. | +------------------------------------------------------------------------------+ mysql> SELECT asynchronous_connection_failover_add_source('', '127.0.0.1', 3307, '', 50); +------------------------------------------------------------------------------+ | asynchronous_connection_failover_add_source('', '127.0.0.1', 3307, '', 50) | +------------------------------------------------------------------------------+ | The UDF asynchronous_connection_failover_add_source() executed successfully. | +------------------------------------------------------------------------------+
引数 | サンプル値 | 内容 |
---|---|---|
channel | '' | レプリケーションチャネル。チャネルを設定していない場合は空文字。 |
host | '127. |
ソースのホスト名 |
port | 3306 | ソースのポート |
network_ |
'' | 将来の使用のために予約されているため、空の文字列を指定 |
weight | 50 | ソースの優先度。優先度が最も高いソースが最初の接続試行に選択。1から100まででデフォルトは50。 |
ソースリストを確認するには以下のいずれかのテーブルを確認します。
mysql.
テーブルreplication_ asynchronous_ connection_ failover performance_
テーブルschema. replication_ asynchronous_ connection_ failover
mysql> SELECT * FROM mysql.replication_asynchronous_connection_failover; +--------------+-----------+-------+-------------------+--------+--------------+ | Channel_name | Host | Port | Network_namespace | Weight | Managed_name | +--------------+-----------+-------+-------------------+--------+--------------+ | | 127.0.0.1 | 3306 | | 60 | | | | 127.0.0.1 | 3307 | | 50 | | +--------------+-----------+-------+-------------------+--------+--------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM performance_schema.replication_asynchronous_connection_failover; +--------------+-----------+-------+-------------------+--------+--------------+ | CHANNEL_NAME | HOST | PORT | NETWORK_NAMESPACE | WEIGHT | MANAGED_NAME | +--------------+-----------+-------+-------------------+--------+--------------+ | | 127.0.0.1 | 3306 | | 60 | | | | 127.0.0.1 | 3307 | | 50 | | +--------------+-----------+-------+-------------------+--------+--------------+
ソースリストの内容はレプリケーションされないため、それぞれのレプリカで設定する必要があります。また、ソースリストから特定のソースを削除するにはasynchronous_
関数を利用します。引数はweight
を除いたasynchronous_
関数と同じ内容かつ順番です。
mysql> SELECT asynchronous_connection_failover_delete_source('','127.0.0.1',3307,''); +---------------------------------------------------------------------------------+ | asynchronous_connection_failover_delete_source('','127.0.0.1',3307,'') | +---------------------------------------------------------------------------------+ | The UDF asynchronous_connection_failover_delete_source() executed successfully. | +---------------------------------------------------------------------------------+
そして、レプリカの自動ソース切り替えを有効にするために、CHANGE REPLICATION SOURCE TO
ステートメントのSOURCE_
オプションを1に設定します。設定するには一度レプリケーションを停止する必要があります。
また、レプリカはソースとの接続が切断されたと判断されてから自動切り替わるまでSOURCE_
* SOURCE_
だけ待機した後に切り替えます。デフォルトではSOURCE_
SOURCE_
SOURCE_
を3 、SOURCE_
を10にして、待機時間は30秒が適切な値だと述べています。
mysql> STOP REPLICA; Query OK, 0 rows affected (0.00 sec) mysql> CHANGE REPLICATION SOURCE TO SOURCE_CONNECTION_AUTO_FAILOVER=1,SOURCE_RETRY_COUNT=3,SOURCE_CONNECT_RETRY=10; Query OK, 0 rows affected (0.00 sec) mysql> START REPLICA; Query OK, 0 rows affected (0.00 sec)
CHANGE REPLICATION SOURCE TO
ステートメントで設定したSOURCE_
の値は、mysql.
テーブルから確認することができます。
mysql> SELECT Source_connection_auto_failover FROM mysql.slave_master_info; +---------------------------------+ | Source_connection_auto_failover | +---------------------------------+ | 1 | +---------------------------------+ 1 row in set (0.00 sec)
ソースの切り替わりを確認
それでは、Port3306
のソースを停止して、Port3307
に自動で接続されるか確かめてみます。以下のSHOW REPLICA STATUS
ステートメントの内容は、一部表示を割愛しています。
このように、Source_
から接続先が自動で変更されたことが確認できます。
注意点
レプリカでレプリケーションを構築されている状態でこの機能を有効化するには、事前にasynchronous_
関数で、現ソースを優先度の一番高い値にして登録しておく必要があります。他のソースのほうが優先度が高いと有効化すると同時に、現ソースからその優先度の高いソースに切り替わってしまうためです。
まとめ
今回は非同期レプリケーションにおけるレプリカの自動ソース切り替えについて紹介しました。ソースのフェールオーバーは自前で実装しなくてはいけません。しかし、MySQLのフェールオーバーする仕組みを実装していれば、ソースのフェールオーバと共にレプリカの向き先ソースも併せて変更すると思います。この機能を利用すれば、ソースのフェールオーバのみを管理するだけで良いようになります。または、ソースに昇格する予定のない分析用のレプリカにはこの機能を導入するなどの使い方もあると思います。
今回は以下のドキュメント元に紹介しました。興味のある方はご参照ください。