LoginSignup
1
0

More than 3 years have passed since last update.

mysqlshを使ってinnodbclusterのサービス停止、起動について

Posted at

背景

Mysql設定変更じなどメンテナンス作業時クラスタを完全に再起動したい場合があるかと思います。
クラスタを完全停止した場合は、サービス起動⇒Groupreplicationを起動するだけでクラスタを起動できません。
と言ってクラスタを作り直したり、memberをjoinし直したりするのもよろしくなかったので
試行錯誤で以下の方法にたどり着いたんですが、もっといい方法があれば教えていただければと思います。

環境

instance1: primary
instance2: secondary
instance3: secondary
OS: Centos7.3
mysql: mysql-community-server-8.0.16

サービス停止

普通に全インスタンスでsystemctl stop mysqldを実行すればよいですが、
single primaryモードでFailoverさせたく無い場合は、secondaryから停止する必要があります。

サービス起動

新規にクラスタを作るのではなく、既存クラスタをiteractive:offで再起動する方法を紹介(既にご存じ?)します。

mysqld起動

systemctl start mysqld

Group Replication停止

#/bin/mysqlsh user@ip:port --sql -e 'stop group_replication;'

・group_replication_start_on_boot=onの場合はサービス起動時にstart group_replicationを起動してくれ、
クラスタが既に起動している場合のみ自動参加されますが、クラスタ自体は起動してくれません。(なので少なくともprimaryは停止する必要があります。)
・user@ip:portはmyloginに設定しておけば、パスワード聞かれずに実行可能です。

Group Replication開始(primary)

#/bin/mysqlsh user@ip:port --py -e 'dba.reboot_cluster_from_complete_outage("cluster_name", {"removeInstances": [],"rejoinInstances": [], "clearReadOnly": True})'

reboot_cluster_from_complete_outage で既存のクラスタを再起動します。
removeInstances: 言葉の通り、クラスタ起動時に消したいメンバーを書きます。聞かれたくないので[]を指定します。
rejoinInstances: 言葉の通り、クラスタ起動時にJoinしたいメンバーを書きます。すぐsecondaryのgroup_replicationを起動する場合は、指定しなく([]にする)てもよいです。
clearReadOnly: replication_groupを離れる場合のオプションによって、readonlyになる可能性があるため、念のためTrueにします。
なお、reboot_cluster_from_complete_outageを実行することによってgroup_replication_start_on_boot=onに設定されます。mysqld-auto.cnfで確認できます。offにしたい場合は
#/bin/mysqlsh user@ip:port --sql -e 'set persist group_replication_start_on_boot=off'

primaryが起動されていることを確認

sql>select MEMBER_ID,MEMBER_HOST,MEMBER_STATE,MEMBER_ROLE from performance_schema.replication_group_members;
MEMBER_ID       MEMBER_HOST     MEMBER_STATE    MEMBER_ROLE
0cffd742-98b6-11e9-b857-fa163e0290da    instance1        ONLINE  PRIMARY

Group Replication開始(secondary)※起動されている場合は不要

#/bin/mysqlsh user@ip:port --sql -e 'stop group_replication;'

secondaryが起動されていることを確認

sql>select MEMBER_ID,MEMBER_HOST,MEMBER_STATE,MEMBER_ROLE from performance_schema.replication_group_members;
MEMBER_ID       MEMBER_HOST     MEMBER_STATE    MEMBER_ROLE
0cffd742-98b6-11e9-b857-fa163e0290da    instance1        ONLINE  PRIMARY
4e9c38f8-98b6-11e9-a435-fa163e020899    instance2        ONLINE  SECONDARY
4ead6a0f-98b6-11e9-ac78-fa163e02119d    instance3        ONLINE  SECONDARY

終わり

1
0
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
1
0