MYSQL8.0でInnoDBクラスタを組み、mysqlrouterからの接続をラウンドロビンさせる
はい皆さんこんにちは
この記事ではInnoDBクラスタを利用した環境にMYSQLROUTER経由で接続し、R/Oをラウンドロビンさせる内容を整理します。
詳細
参考URL:
https://www.s-style.co.jp/blog/2020/10/6689/
環境:
-
APserver
CentOS7
mysql-community-server-8.0.21-1.el7.x86_64
DBサーバに接続する用にFirewallを開けておく -
DBmaster、DBslave1、DBslave2
CentOS7
mysql-router-community-8.0.21-1.el7.x86_64
APサーバから繋がるようにFirewallを開けておく
注意事項:
R/WはDBmasterのみ
R/OはDB3台のラウンドロビンとなりますが、
DBが1台でもMISSINGの場合は、完全なラウンドロビンにはなりません。
MISSINGのサーバが復旧した後は再度ラウンドロビンに戻ります。
##DBサーバにてInnoDBクラスタを作る
3台それぞれ実施します。
# mysqlsh --uri root@localhost:53306 --sql
↑↑実際のホスト名やポート番号に変えてください。
SQL > reset persist;
SQL > stop group_replication;
SQL > set global super_read_only=0;
SQL > drop database mysql_innodb_cluster_metadata;
SQL > reset master;
SQL > \quit
ここはDBmasterで実施します。
# mysqlsh --uri root@DBmaster:53306
SQL > cluster = dba.getCluster()
↑↑現段階では何も表示されない
SQL > cluster=dba.createCluster('dbcluster',{ipWhitelist:'172.25.32.0/24',localAddress:'DBmaster:53061'})
SQL > cluster.addInstance('root@DBslave1:53306',{ipWhitelist:'172.25.32.0/24',localAddress:'DBslave1:53061'})
SQL > cluster.addInstance('root@DBslave2:53306',{ipWhitelist:'172.25.32.0/24',localAddress:'DBslave2:53061'})
↑↑クラスタに接続可能なIPのホワイトリスト、ローカルアドレスで使うポートを指定。
SQL > cluster.status()
↑↑クラスタ情報が見れること。DBmasterがR/Wになっている。
SQL > \quit
##APサーバでmysqlrouterの設定
# mysqlrouter --bootstrap root@DBmaster:53306 --user=mysqlrouter --force
↑↑実際のホスト名やポート番号に変えてください。
※R/Wになっているホストを指定します
# vi /etc/mysqlrouter/mysqlrouter.conf
編集箇所
[routing:dbcluster_default_rw]
#bind_port=6446
bind_port=56446
↑↑これはAPサーバ上で待ち受けているポート番号を指定します。
[routing:dbcluster_default_ro]
#bind_port=6447
bind_port=56447
↑↑これはAPサーバ上で待ち受けているポート番号を指定します。
#destinations=metadata-cache://dbcluster/default?role=SECONDARY
destinations=metadata-cache://dbcluster/default?role=PRIMARY_AND_SECONDARY
↑↑PRIMARY_AND_SECONDARYにする事で3台でのラウンドロビンになります。
#routing_strategy=round-robin-with-fallback
routing_strategy=round-robin
↑↑ここも変えてください。
# systemctl restart mysqlrouter
##APからDBに繋いでみましょう
# mysqlsh --uri root@localhost:56447 -p --sql -e "SELECT @@HOSTNAME;"
⇒数回実行すると3台でラウンドロビンになっている事が分かります
# mysqlsh --uri root@localhost:56446 -p --sql -e "SELECT @@HOSTNAME;"
⇒R/WになっているDBmasterにしか行きません。
##感想
構築した時に3台ラウンドロビンにならない事が分かり、色々と調べたのですが
このやり方で落ち着きました。
縮退中はラウンドロビンにならないので、運用的にOKかは確認しましょう。
ありがとうございました。