7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQL Group Replicationを使う上での注意点

Last updated at Posted at 2017-02-02

MySQL 5.7.17 でついにGAとなったMySQL Group Replication。
今までになかったマルチマスタ構成が可能となり、夢が広がるなあ… と感じています。

Group Replicationの検証をする中で何点か躓いた点があったので、メモしておきたいと思います。

1. START GROUP_REPLICATION実行時は、GTIDは空でないといけない

MySQL5.7をyumでインストールして、パスワード変更して、my.cnfを修正して、
さあ START GROUP_REPLICATION; と実行してみたら、以下のエラーが発生しました。

mysql> START GROUP_REPLICATION;
ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.
2017-02-01T05:23:37.398876Z 0 [ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: 818459df-e83d-11e6-894d-0800272020f4:1-3 > Group transactions: 84ac715e-e83d-11e6-89eb-0800272020f4:1-3,
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'
2017-02-01T05:23:37.399075Z 0 [ERROR] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'

どうやら、GROUP_REPLICATIONを開始した時点ではGTIDは空でないといけないようです。
上記手順の「パスワード変更」が原因でした。yumインストールだと、
初期パスワード(ランダム)が設定されるため、無意識で変更していた・・・。

解決策としては、「RESET MASTER;」を実行すれば、問題なくSTARTできます。

2. ノード間はホスト名の名前解決が出来ないといけない

第1ノードを起動して、第2ノードをSTARTしたのですが、"RECOVERING"状態のまま
一向に"ONLINE"になってくれない。
エラーログを見てみたら、ノード間の通信でタイムアウトが発生していました。

mysql> SELECT * FROM performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 818459df-e83d-11e6-894d-0800272020f4
 MEMBER_HOST: node2
 MEMBER_PORT: 3306
MEMBER_STATE: RECOVERING
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 84ac715e-e83d-11e6-89eb-0800272020f4
 MEMBER_HOST: node1
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
2 rows in set (0.00 sec)
2017-02-01T05:29:04.578678Z 28 [ERROR] Slave I/O for channel 'group_replication_recovery': error connecting to master 'rpl_user@node1:3306' - retry-time: 60  retries: 1, Error_code: 2003

今回の環境はvagrantで構築したのですが、サーバ間で名前解決が出来ていませんでした(IPアドレスはOK)。
エラーログや「replication_group_members」の通り、ノード間の通信時にはIPアドレスではなく
ホスト名を使用するため、名前解決が出来ないと通信が出来ないようです。

解決策としては、「/etc/hosts」に各ノードの情報を記載したらオケオケオッケーです。

3. mysqldump の --single-transactionは使えない

既にいくつかのユーザから指摘されていますが、Group ReplicationではSavePointsが
サポートされていないため、mysqldumpの--single-transactionオプションが使えません。

そのため、バックアップを取得する場合はそれ用のスレーブなどを用意する必要があるかもしれません。
(メンテナンス時間とかがあれば別ですが・・・)

==============================

以上、悪い点ばかりを列挙してしまいましたが、Group Replication自体はしっかり
特徴や制限事項などを理解すれば、面白い機能だと思います。
今後も検証をして、気になる点などがあればメモをしていきたいと思います。

※ そもそも名前解決ができない環境なんて稀ですしね。。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?