TL;DR
Hiding instances on MySQL InnoDB Cluster/ReplicaSet | MySQL Server Blog
MySQL Shell AdminAPI – What’s new in 8.0.21? | MySQL Server Blog
MySQL Shell(metadataに追加)とMySQL Router(metadataを読んだ時にこのタグがついてたら接続を切る)の組み合わせなので、MySQL Serverのバージョンの要件は知らないけれどMySQL ShellとMySQL Routerは8.0.21とそれ以降が必要
まずはフツーにMySQL Shellでサンドボックスを3つばかり作る。
$ mysqlsh -- dba deploySandboxInstance 3306 { --password="" }
$ mysqlsh -- dba deploySandboxInstance 3307 { --password="" }
$ mysqlsh -- dba deploySandboxInstance 3308 { --password="" }
3306のインスタンスで dba.createaReplicaSet('myRs')
$ mysqlsh --uri=root:""@localhost:3306 -- dba createReplicaSet myRs
で --replicaset
で rs
に受けてからの rs.addInstance
(このコマンドラインオプションの奇妙な書き方は 日々の覚書: CentOS 7のAMIでEC2を起動してGroup Replicationを組むところまでを何も考えずに をやってる時に見つけた)
$ mysqlsh --uri=root:""@localhost:3306 --replicaset -- rs addInstance root@localhost:3307 { --recoveryMethod=clone }
$ mysqlsh --uri=root:""@localhost:3306 --replicaset -- rs addInstance root@localhost:3308 { --recoveryMethod=clone }
以前にInnoDB Clusterとかを組んだことがあると mysqlrouter.conf に書かれていたりするので一度消してから mysqlrouter --bootstrap
$ sudo rm /etc/mysqlrouter/mysqlrouter.conf
$ sudo mysqlrouter --bootstrap=root@localhost:3306 --user=mysqlrouter
Please enter MySQL password for root:
$ sudo systemctl start mysqlrouter
この状態でRead-Onlyな6447は3307と3308にラウンドロビンされている。
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3308
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3308
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3308
rs.setInstanceOption(‘127.0.0.1:3308’, ‘tag:_hidden’, true) とやると
$ mysqlsh --uri=root:""@localhost:3306 --replicaset -- rs setInstanceOption '127.0.0.1:3308' 'tag:_hidden' 'true'
WARNING: Using a password on the command line interface can be insecure.
You are connected to a member of replicaset 'myRs'.
ルーターを再起動とかしなくても読み取り分散から外れる。
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
$ mysql -h127.0.0.1 -P6447 -sse "SELECT @@port"
3307
これはうまく使えば便利そう。
ただし、_hidden: trueのままでもsetPrimaryInstanceできてしまうし、_hiddenは効いたままなのでその辺はどうなのか感ある。
0 件のコメント :
コメントを投稿