7. This yoku0825 is brought you by
開催してくれた @marcy̲terui さんありがとうございます
ノリで北海道まで付き合ってくれた @soudai1025 さんも
ありがとうございます
会社の予算(勉強会への登壇費⽤負担)で札幌まできまし
た。ありがとうヘーシャ。
6/55
27. これなんかひどい
MySQL Fabric uses wrong argument of MAKETIME
in prune̲log and prune̲error̲log events.
MAKETIME functionʼs arguments are (hour,
minute, second) but MySQL Fabric passes
prune̲time as hour
MySQL Bugs: #81557: MySQL Fabric uses wrong
argument of MAKETIME in prune̲log Event
26/55
29. これもひどい
status compares (not equal) with string ʻFAULTYʼ
but status has integer datatype.
mysql> SELECT server_uuid, group_id, server_address, mode, statu
s, weight FROM servers WHERE group_id LIKE '%%' AND group_id IS N
OT NULL AND status != 'FAULTY' ORDER BY group_id, server_addres
s, server_uuid;
..
2 rows in set, 1 warning (0.00 sec)
Warning (Code 1292): Truncated incorrect DOUBLE value: 'FAULTY'
MySQL Bugs: #81559: Incorrect WHERE clause in
dump̲servers fanction
28/55
41. MySQL Fabric(mikasafabric) + MySQL Routerの動
作
Master Slave
mysqlfabric
Monitor/Demote
Monitor/Promote
AP
AP
mysqlrouter
127.0.0.1:3306
AP
AP
mysqlrouter
127.0.0.1:3306
Lookup Group QueryRouting(NAT)
Routing(NAT)
40/55
45. サーバーごとのステータス
PRIMARY SECONDARY SPARE FAULTY
read-write Yes No No No
read-only No Yes No No
read-only &
allow̲primar
y̲reads
Yes Yes No No
フェイルオーバ
ー候補
- Yes No No
フェイルオーバ
ー時のマスター
追従
(Yes) Yes Yes No
死活監視 Yes Yes Yes No
MySQL Routerから⾒た時で、他のコネクターは違うかも知
れない
44/55
47. ステータス変更
PRIMARY SECONDARY SPARE FAULTY
PRIMARY - group
promote(*)
No threat
report̲failure
SECONDARY group
promote
- server
set̲status
threat
report̲failure
SPARE No server
set̲status
- threat
report̲failure
FAULTY No No server
set̲status
-
* 他のサーバーをマスターに昇格させるということ
46/55
48. mikasafabric for MySQLの死活監視
変更後ステータス mikasafabric特有
MySQL接続失敗(サーバーダ
ウン含む)
FAULTY No
SHOW SLAVE STATUSで
スレッドが⽌まってる
SPARE Yes
オフラインモードON FAULTY Yes
47/55
49. mikasafabric for MySQLのフェイルオーバー
マスターに対して SET GLOBAL read_only = 1
マスターに対して SET GLOBAL offline_mode = 1
(mikasafabric特有)
candidateに対して SELECT
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(..), STOP SLAVE,
RESET SLAVE ALL, SET GLOBAL read_only = 0
candidate以外のスレーブと旧マスターに対して STOP
SLAVE, CHANGE MASTER TO
旧マスターに対して SET GLOBAL offline_mode = 0
(mikasafabric特有)
48/55
50. オフラインモード (from MySQL 5.7.5)
MySQL :: MySQL 5.7 Reference Manual :: 6.1.4 Server
System Variables
SET GLOBAL offline_mode= 1 で有効化
オフラインモードだと、Super̲privを持っていないユーザ
ーは接続できない
Super̲privを持っていないユーザーのセッションは、現在
のクエリーが終了次第コネクションを切断される
これで、コネクションプールのスレッドたちを⼀度強制的に切り離せ
る
-
⽇々の覚書: MySQL 5.7.5のオフラインモードはgraceful
shutdownの夢を⾒るか
49/55
51. mikasafabric for MySQLということ
MySQL Fabricを使いたいおじさんが、 ⾃分で使うために
パッチしている
MySQL Fabric 1.6.0がlabsにあった時期があって、このまま1.5.6ベ
ースで⾏くかどうかは微妙だけれど、それでも「ある程度期待通りに
動くMySQL Fabric」として使える程度にはメンテナンスするはず
-
⾃分で⾔うのもアレだけど、MySQL 5.7 + MySQL Fabric
+ MySQL Routerの組み合わせで運⽤だったら⽇本で⼀番詳
しい気がする
だから、その組み合わせだけに特化して(それでも⼤概のユースケー
スには上⼿く合う)「DBAが本当に必要だったもの」を追加する
-
50/55