1
0

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 3 years have passed since last update.

MYSQL8.0でInnoDBクラスタを組み、mysqlrouterからの接続をラウンドロビンさせる

Posted at

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かは確認しましょう。

ありがとうございました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?