5. MySQL Fabric #とは
⾼可⽤性(High Availability)
障害探知と昇格-
データベースリクエストのアクセス先の選択-
シャーディング – スケールアウト
MySQL Fabric – コネクタとの連携
プロキシ不要の構成-
MySQL :: MySQL Fabric
4/73
6. MySQL Fabricを導⼊した構成
AP
[Not supported by viewer] Connector/J
Master Slave
mysqlfabric
Monitor/Demote
Monitor/Promote
Lookup Group Query
Routing
Routing
AP
AP Connector/J
5/73
25. サーバーの追加, 削除
MHA for MySQLは追加, 削除時にコンフィグの再読み込み
が必要
MySQL Fabricは mysqlfabric group add, mysqlfabric
group remove コマンドで動的に追加, 削除
どちらにせよこれらマネージャプロセスは単⼀障害点ではないので、
再起動でもオンラインでもそれほど違いはない
-
24/73
26. ここまでのまとめ
MySQL FabricはMHA for MySQLのようにMySQLの⾃動/⼿
動フェイルオーバーをサポートするためのプロダクト
MySQL Fabricは状態をバッキングストアに保管し、APIを
提供するウェブアプリケーションライクなつくり
良くも悪くも-
MHAは非同期レプリケーションしかない時代に開発された
もののため、リレーログから差分をリカバリーする機能がつ
いている
MySQL 5.7とそれ以降でサポートされた複数台の準同期レプリケーシ
ョンを利⽤すればリカバリーは不要になった
-
25/73
30. MySQL Fabricのパッケージング
MySQL Fabric 1.4
MySQL Utilities 1.4に同梱
MySQL Fabric 1.5
MySQL Utilities 1.5に同梱
MySQL Fabric 1.6
MySQL Fabric 1.6としてリリースされる 予定
29/73
31. MySQL Utilities 1.6はリリース済み
MySQL Utilities 1.6.4 (2016/08/05 GA)
MySQL Fabricは1.6系から別パッケージになる 予定 なの
で、もうMySQL Fabricは同梱されていない
http://dev.mysql.com/downloads/utilities/
30/73
39. これなんかひどい
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> DELETE FROM log WHERE TIMEDIFF(UTC_TIMESTAMP(), reported)
> MAKETIME(3600,0,0);
Query OK, 0 rows affected, 1 warning (0.03 sec)
Warning (Code 1292): Truncated incorrect time value: '3600:00:00'
MySQL Bugs: #81557: MySQL Fabric uses wrong
argument of MAKETIME in prune̲log Event
38/73
40. これもひどい
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
39/73
54. 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)
53/73
58. サーバーごとのステータス
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から⾒た時で、他のコネクターは違うかも知
れない
57/73
63. ステータス変更
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
-
* 他のサーバーをマスターに昇格させるということ
62/73
64. mikasafabric for MySQLの死活監視
変更後ステータス mikasafabric特有
MySQL接続失敗(サーバーダ
ウン含む)
FAULTY No
SHOW SLAVE STATUSで
スレッドが⽌まってる
SPARE Yes
オフラインモードON FAULTY Yes
63/73
65. 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特有)
64/73
66. オフラインモード (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の夢を⾒るか
65/73