オンラインで Group Replication の設定が変更できる3つの新機能
- Changing a Group’s Primary Member
- Changing a Group’s Mode
- Using Group Replication Group Write Consensus
前回、1. Changing a Group’s Primary Member の検証を行いましたので、今回は、2. Changing a Group’s Mode を検証してみたいと思います
Changing a Group’s Mode とは
シングル・プライマリモード、マルチ・プライマリモードを相互に切り替える機能となります
環境
OS・MySQL バージョン
バージョン | |
---|---|
OS | Oracle Linux Server release 7.5 |
MySQL | 8.0.13 MySQL Community Server – GPL |
Group Replication 情報(MySQL InnoDB Cluster 環境で検証しています)
1 2 3 4 5 6 7 8 9 |
mysql> SELECT MEMBER_HOST, MEMBER_ID, MEMBER_ROLE FROM performance_schema.replication_group_members ORDER BY MEMBER_HOST; +-------------+--------------------------------------+-------------+ | MEMBER_HOST | MEMBER_ID | MEMBER_ROLE | +-------------+--------------------------------------+-------------+ | k-cluster01 | 4f3bbf53-dd76-11e8-a127-000c29e96070 | PRIMARY | | k-cluster02 | 4de92bb9-dd76-11e8-9ebc-000c297a6f76 | SECONDARY | | k-cluster03 | 4ee9addb-dd76-11e8-9be4-000c2968ee71 | SECONDARY | +-------------+--------------------------------------+-------------+ 3 rows in set (0.00 sec) |
現時点では、 シングル・プライマリモードで稼働しています
検証1
マルチ・プライマリモードに変更してみる
1.group_replication_switch_to_multi_primary_mode() を実行します
1 2 3 4 5 6 7 |
mysql> SELECT group_replication_switch_to_multi_primary_mode(); +--------------------------------------------------+ | group_replication_switch_to_multi_primary_mode() | +--------------------------------------------------+ | Mode switched to multi-primary successfully. | +--------------------------------------------------+ 1 row in set (0.00 sec) |
2.確認してみます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> SHOW STATUS like 'group_replication_primary_member'; +----------------------------------+-------+ | Variable_name | Value | +----------------------------------+-------+ | group_replication_primary_member | | +----------------------------------+-------+ 1 row in set (0.00 sec) mysql> SELECT MEMBER_HOST, MEMBER_ID, MEMBER_ROLE FROM performance_schema.replication_group_members ORDER BY MEMBER_HOST; +-------------+--------------------------------------+-------------+ | MEMBER_HOST | MEMBER_ID | MEMBER_ROLE | +-------------+--------------------------------------+-------------+ | k-cluster01 | 4f3bbf53-dd76-11e8-a127-000c29e96070 | PRIMARY | | k-cluster02 | 4de92bb9-dd76-11e8-9ebc-000c297a6f76 | PRIMARY | | k-cluster03 | 4ee9addb-dd76-11e8-9be4-000c2968ee71 | PRIMARY | +-------------+--------------------------------------+-------------+ 3 rows in set (0.00 sec) |
group_replication_primary_member の値が空になり、すべてのメンバーが PRIMARY となっています
残念?なところ
現時点では、InnoDB Cluster までは未対応なようで、InnoDB Cluster のメタ情報内にあるトポロジまでは変更されませんでした
※topology_type が pm
はシングルプライマリ・モード、 mm
なら、マルチプライマリ・モードとなります
1 2 3 4 5 6 7 |
mysql> SELECT topology_type FROM mysql_innodb_cluster_metadata.replicasets; +---------------+ | topology_type | +---------------+ | pm | +---------------+ 1 row in set (0.00 sec) |
そのため、MySQL Shell でクラスタのステータスを表示しようとしても、
1 |
Cluster.status: The InnoDB Cluster topology type (Single-Primary) does not match the current Group Replication configuration (Multi-Primary). Please use <cluster>.rescan() or change the Group Replication configuration accordingly. (RuntimeError) |
のように、Group Replication の設定値と異なっているために、エラーとなってしまいます
検証2
シングル・プライマリモードに変更してみる
1.group_replication_switch_to_single_primary_mode() を実行します
今回はあえて、引数で member_uuid は指定しないで、実行してみます。
member_uuid を指定して実行すると、指定されたメンバーをプライマリとして、シングル・プライマリモードに変更されます
1 2 3 4 5 6 7 |
mysql> SELECT group_replication_switch_to_single_primary_mode(); +---------------------------------------------------+ | group_replication_switch_to_single_primary_mode() | +---------------------------------------------------+ | Mode switched to single-primary successfully. | +---------------------------------------------------+ 1 row in set (0.01 sec) |
2.確認してみます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> SHOW STATUS like 'group_replication_primary_member'; +----------------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------------+--------------------------------------+ | group_replication_primary_member | 4de92bb9-dd76-11e8-9ebc-000c297a6f76 | +----------------------------------+--------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT MEMBER_HOST, MEMBER_ID, MEMBER_ROLE FROM performance_schema.replication_group_members ORDER BY MEMBER_HOST; +-------------+--------------------------------------+-------------+ | MEMBER_HOST | MEMBER_ID | MEMBER_ROLE | +-------------+--------------------------------------+-------------+ | k-cluster01 | 4f3bbf53-dd76-11e8-a127-000c29e96070 | SECONDARY | | k-cluster02 | 4de92bb9-dd76-11e8-9ebc-000c297a6f76 | PRIMARY | | k-cluster03 | 4ee9addb-dd76-11e8-9be4-000c2968ee71 | SECONDARY | +-------------+--------------------------------------+-------------+ 3 rows in set (0.00 sec) |
group_replication_primary_member に値が入り、k-cluster02 が PRIMARY となっています
PRIMARY 選出の基準は、こちらのマニュアル に記載されているように、 group_replication_member_weight や、server_uuid によって決定されます
まとめ
本番運用中にシングル・プライマリモードとマルチ・プライマリモードを変更することは、ほとんど無いとは思いますが、開発中に更新分散を試してみたいと言ったときには、クラスタを再構築することなく、モードを切り替えれるのは便利では無いでしょうか
次期バージョンで、InnoDB Cluster への対応も進めば、更に使い勝手が変わるのでは無いでしょうか