一昨日インストールして 、 昨日HA構成だけ設定してみた MySQL Fabric。
さすがに手動での切り替えくらいは簡単だった。
* ファームに登録しているのはMySQL::Sandboxで作ったマスター/スレーブ1台ずつ構成です。
こんな状態から
単にmysqlfabric group promoteでグループ名だけ指定してやればよくて
こんな状態に入れ替わる。
(そのままじゃ動かないので、./check_slavesはマスターとスレーブでSHOW MASTER STATUSとSHOW SLAVE STATUSを逆にしてある)
* 出力結果のmaster, slave #1というのはMySQL::Sandboxから見た(最初の構成の)マスターとスレーブ。
マスターをもとに戻してから、今度はkill。
マスターが死んだぞ。さあどうする。
変わんねぇ(´・ω・`)
と思ったら、答えはなんと日本語のスライドの中に見つけた。 doublemarketさん++。
mysqlfabric group activateだと…:(;゙゚'ω゚'):
おおおお切り替わった!!
参考にしていたブログも 公式スタートガイドも もうちょっと大きな字で書いてくれていいんですよactivate。というかデフォルトそれじゃダメですかバッキングストアのテーブルにDEFAULT句つけるくらいで済むと思うんですがどうなんですかあとで見てみよう。
Fabric対応コネクターであれば、このstatus: PRIMARYとかを見て接続先を判断することになるので、VIPとかそういう仕組みなしでMySQL Fabricだけで完結するのが利点だと思う。余計な仕組み考えなくて良いけどGTID必須。新規には(コネクター使うかどうかは別として)配備だけでもしておいていいかも知れない。ヘルスチェックできるし。
今のところの感想は引き続きこれ。
さすがに手動での切り替えくらいは簡単だった。
* ファームに登録しているのはMySQL::Sandboxで作ったマスター/スレーブ1台ずつ構成です。
$ ./use_all "select @@read_only"
# master
@@read_only
0
# server: 1:
@@read_only
1
$ ./check_slaves
master
File: mysql-bin.000004
Position: 191
slave # 1
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 191
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 191
こんな状態から
$ mysqlfabric group lookup_servers my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
server_uuid address status mode weight
------------------------------------ --------------- --------- ---------- ------
47cf54df-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20886 PRIMARY READ_WRITE 1.0
4b7036a9-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20887 SECONDARY READ_ONLY 1.0
$ mysqlfabric group promote my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
uuid finished success result
------------------------------------ -------- ------- ------
03c27976-809f-48f1-a385-e3dc6caf9ae6 1 1 1
state success when description
----- ------- ------------- -------------------------------------------------------------
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_define_ha_operation).
5 2 1.41525e+09 Executed action (_define_ha_operation).
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_find_candidate_switch).
5 2 1.41525e+09 Executed action (_find_candidate_switch).
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_check_candidate_switch).
5 2 1.41525e+09 Executed action (_check_candidate_switch).
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_block_write_switch).
5 2 1.41525e+09 Executed action (_block_write_switch).
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_wait_slaves_switch).
5 2 1.41525e+09 Executed action (_wait_slaves_switch).
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_change_to_candidate).
5 2 1.41525e+09 Executed action (_change_to_candidate).
$ mysqlfabric group lookup_servers my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
server_uuid address status mode weight
------------------------------------ --------------- --------- ---------- ------
47cf54df-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20886 SECONDARY READ_ONLY 1.0
4b7036a9-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20887 PRIMARY READ_WRITE 1.0
単にmysqlfabric group promoteでグループ名だけ指定してやればよくて
$ ./use_all "select @@read_only"
# master
@@read_only
1
# server: 1:
@@read_only
0
$ ./check_slaves.a
master
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 1548
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 1548
slave # 1
File: mysql-bin.000003
Position: 1548
こんな状態に入れ替わる。
(そのままじゃ動かないので、./check_slavesはマスターとスレーブでSHOW MASTER STATUSとSHOW SLAVE STATUSを逆にしてある)
* 出力結果のmaster, slave #1というのはMySQL::Sandboxから見た(最初の構成の)マスターとスレーブ。
マスターをもとに戻してから、今度はkill。
$ kill -9 15569 15853
$ ./check_slaves
master
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox20886.sock' (111)
slave # 1
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 191
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 191
マスターが死んだぞ。さあどうする。
$ mysqlfabric group health my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
uuid is_alive status is_not_running is_not_configured io_not_running sql_not_running io_error sql_error
------------------------------------ -------- --------- -------------- ----------------- -------------- --------------- ---------------------------------------------------------------------------------- ---------
47cf54df-63fc-11e4-942e-fa163e020fd0 0 FAULTY 0 0 0 0 False False
4b7036a9-63fc-11e4-942e-fa163e020fd0 1 SECONDARY 0 0 1 0 error reconnecting to master 'fabric@127.0.0.1:20886' - retry-time: 60 retries: 3 False
issue
-----
$ mysqlfabric group lookup_servers my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
server_uuid address status mode weight
------------------------------------ --------------- --------- ---------- ------
47cf54df-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20886 PRIMARY READ_WRITE 1.0
4b7036a9-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20887 SECONDARY READ_ONLY 1.0
$ ./check_slaves
master
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox20886.sock' (111)
slave # 1
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 191
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 191
変わんねぇ(´・ω・`)
と思ったら、答えはなんと日本語のスライドの中に見つけた。 doublemarketさん++。
mysqlfabric group activateだと…:(;゙゚'ω゚'):
$ mysqlfabric group activate my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
uuid finished success result
------------------------------------ -------- ------- ------
91e8f2cc-43fa-4855-a6c9-44a4deedc9bf 1 1 1
state success when description
----- ------- ------------- -------------------------------------------------------------
3 2 1.41525e+09 Triggered by.
4 2 1.41525e+09 Executing action (_activate_group).
5 2 1.41525e+09 Executed action (_activate_group).
$ mysqlfabric group health my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
uuid is_alive status is_not_running is_not_configured io_not_running sql_not_running io_error
sql_error
------------------------------------ -------- ------- -------------- ----------------- -------------- --------------- --------
---------
47cf54df-63fc-11e4-942e-fa163e020fd0 0 FAULTY 0 0 0 0 False
False
4b7036a9-63fc-11e4-942e-fa163e020fd0 1 PRIMARY 0 0 0 0 False
False
issue
-----
$ mysqlfabric group lookup_servers my_first_fabric
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
server_uuid address status mode weight
------------------------------------ --------------- ------- ---------- ------
47cf54df-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20886 FAULTY READ_WRITE 1.0
4b7036a9-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20887 PRIMARY READ_WRITE 1.0
$ ./check_slaves.a
master
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox20886.sock' (111)
slave # 1
File: mysql-bin.000003
Position: 1548
$ ./use_all "select @@read_only"
# master
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox20886.sock' (111)
# server: 1:
@@read_only
0
おおおお切り替わった!!
参考にしていたブログも 公式スタートガイドも もうちょっと大きな字で書いてくれていいんですよactivate。というかデフォルトそれじゃダメですかバッキングストアのテーブルにDEFAULT句つけるくらいで済むと思うんですがどうなんですかあとで見てみよう。
Fabric対応コネクターであれば、このstatus: PRIMARYとかを見て接続先を判断することになるので、VIPとかそういう仕組みなしでMySQL Fabricだけで完結するのが利点だと思う。余計な仕組み考えなくて良いけどGTID必須。新規には(コネクター使うかどうかは別として)配備だけでもしておいていいかも知れない。ヘルスチェックできるし。
今のところの感想は引き続きこれ。
今のところの感想としては、"GTID-ableなファームが増え続けるならエージェントレスかつ単体で複数のファームを管理できるFabricは検証してもいいと思うけど、そうでないならMHAで十分"がHA方面の感想です。
— yoku0825 (@yoku0825) 2014, 11月 5