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 件のコメント :
コメントを投稿