GA

2020/09/03

mysqlrouterのdisconnect_on_metadata_unavailableはURIに書く

TL;DR

The metadata-cache URI options are:


disconnect_on_metadata_unavailable なるものの存在を知って mysqlrouter.conf に書いてみたけど反映されなくてよく読んだらURIオプションだった。

$ sudo vim /etc/mysqlrouter/mysqlrouter.conf
..
[routing:myRs_ro]
bind_address=0.0.0.0
bind_port=6447
destinations=metadata-cache://myRs/?role=SECONDARY
round-robin-with-fallback
protocol=classic
disconnect_on_promoted_to_primary=yes  ### 間違い!!!
..

↑のようにルーティングセクションにそのまま書くのではなくて、ルーティングセクションの destinationsのURIに 指定する。

$ sudo vim /etc/mysqlrouter/mysqlrouter.conf
..
[routing:myRs_ro]
bind_address=0.0.0.0
bind_port=6447
destinations=metadata-cache://myRs/?role=SECONDARY&disconnect_on_promoted_to_primary=yes  ### ここ!
round-robin-with-fallback
protocol=classic
..

間違った書き方をしてもUnknown variables的なエラーもワーニングも出してくれないのでしばらく悩んでいた。

3306, 3307, 3308がメンバーの実ポートでmysqlrouter経由で接続している場合に3306から3307に rs.setPrimaryInstance でスイッチオーバーした時の切断の有無は以下のとおり。

クライアントから見た接続先 実際の接続先 3306から3307へのsetPrimaryInstance
6446 3306 切断される
6447 3307 disconnect_on_promoted_to_primary依存
6447 3308 切断されない

read-onlyの6447経由で昇格も降格もしていない3308への接続が切断されないのは良いこと。read-writeの6446経由は常に切断される。

6447経由で3307への接続はdisconnect_on_metadata_unavailable=yesなら切断されるしデフォルトのnoなら切断はされない。

コネクションプールのことを考えるとyesが良い気がしますね。

0 件のコメント :

コメントを投稿