SlideShare a Scribd company logo
MHAの次を目指すmikasafabric
for MySQL
今年のアドベントカレンダー
2016/11/05
yoku0825
OSC 2016 Tokyo/Fall
\こんにちは/
yoku0825@とある企業のDBA
オラクれない-
ポスグれない-
マイエスキューエる-
家に帰ると
妻の夫-
せがれの⽗-
ムスメの⽗-
⽣息域
Twitter: @yoku0825-
Blog: ⽇々の覚書-
MyNA ML: ⽇本MySQLユーザ会-
MySQL Casualʼs Slack: MySQL Casual-
1/73
mikasafabric for MySQL #とは
GMO Media, Inc.によってメンテナンスされている
MySQL Fabric のフォークプロダクト
MySQLの障害を検知してマスターの⾃動切換え
MHA for MySQLと同じポジションを担うフレームワーク
2/73
Do you know
MySQL
Fabric ︖
3/73
MySQL Fabric #とは
⾼可⽤性(High Availability)
障害探知と昇格-
データベースリクエストのアクセス先の選択-
シャーディング – スケールアウト
MySQL Fabric – コネクタとの連携
プロキシ不要の構成-
MySQL :: MySQL Fabric
4/73
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
MySQL Fabric構成の仕組み
MySQL Fabrci対応コネクター(図中ではConnector/J)が
mysqlfabric デーモンからHAグループ情報とシャードグル
ープ情報を受け取る
Connector/J 以外では Connector/.NET, Connector/Python-
アプリケーションはMySQLの代わりに mysqlfabric のデー
モンに接続する(IPアドレス, ポート)ような設定にする
すると、Connector/Jがその接続をハンドルして、HAグループのマス
ター/スレーブ, シャードの属するシャードグループにプロキシーして
くれる
-
mysqlfabric デーモンがダウンしている場合、直前のキャッシュを使
ってルーティングする
-
HAグループ内のフェイルオーバー処理、シャードグループ
間のリシャードは mysqlfabric デーモンのAPIを介して⾏う 6/73
つまり
MHA for MySQL と同等の使い⽅が可能
MHA for MySQL はWEB界隈で最も⼈気の⾼いMySQL冗⻑化ソリ
ューション
ダウン検出でマスターの⾃動昇格は⽋損しているバイナリーログの(可能な限りの)
リカバリーを含み
昇格時にキックされるスクリプトでVIPやDNSの書き換えを⾏う
-
GTID必須(MySQL 5.7のオンラインGTID有効化で⼀気に
⾝近に)
クラッシュセーフスレーブの設定でも使える
MHA for MySQLは relay_log_info_repository= TABLE と相性が悪
くて起動に転ける
-
7/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
8/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
9/73
マネージャプロセス
どちらもMySQLと別のプロセスが切り替える
OSダウンを考えると別のノードに収容しておきたい-
スレーブだけ単体でOSごと落ちるのであれば切り替わり⾃体は必要な
いので2台3台構成ならそれも⼿ではあるが
-
マネージャプロセスのダウンは切り替わりができないだけ
で、サービスそのものに影響は出ない
10/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デ
ーモンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
11/73
マネージャの状態確認
MHA for MySQLはプロセスの内部にマスター/スレーブの情
報を持ち、APIは特に⽤意されていない
masterha_master_monitor はマネージャから情報を惹くのではなく、
⾃分が起動してMySQLの状態をチェックする
-
MySQL Fabricは、管理対象とは別のMySQL(バッキングス
トア)に構成情報を保存する
mysqlfabricデーモンがMySQLプロトコルとXMLRPCプロトコルで
APIを持っている
-
バッキングストアが落ちるとmysqlfabricデーモンが落ち…てくれず
に刺さる
-
12/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
13/73
エージェント
MHA for MySQLのエージェントは常駐型ではない
いくつかのコマンドを提供する mha4mysql-node をインストールする-
mha4mysql-node の提供するコマンドをSSH経由でマネージャーが叩く-
MySQL Fabricはフェイルオーバーなどに必要な全ての動作
をSQLだけで実装しているためエージェントが要らない
拡張する場合はSQLでできることをやらせないといけない-
14/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
15/73
切り替わり時のリカバリー
MHA for MySQLは⼀番進んでいるスレーブのリレーログを
チェックして差分を読み込み、実⾏させる
ポジションを判定してseek(), read() で読む-
MySQL Fabricは⼀番進んでいるスレーブを次のマスターに
選ぶものの、リカバリー処理⾃体は存在しない
受け取ったリレーログをすべて適⽤するまで待つだけ-
Semisyncレプリケーション必須-
16/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲scr
ipt
ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
17/73
切り替わりの処理(主にIPのつけかえ)
MHA for MySQLは master_ip_failover_script に切り替わ
りの処理を書く
VIPの付け替えだったり、DNSの更新だったり-
read_only の設定変更だったり、新しいレプリケーションユーザーを
作ったりの処理もここに書くことができる
-
MySQL Fabricは切り替わりはコネクターが吸収する
バッキングストアに持っているマスター/スレーブの状態を更新し、-
ファブリック対応コネクターが次にHAグループ情報を参照してきた時
にコネクター側に反映される
-
MySQL RouterもFabric対応コネクターと⾒做せる-
デフォルトのTTLは1秒-
18/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scr
ipt,
secondary̲check̲scrip
t, shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予
約されているが、Pythonで
直書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
19/73
処理フック
MHA for MySQLはいい感じのところにフックがあり、それ
ぞれ⾃分の好きなスクリプトで書けば良い
これにより、応答がなくなった旧マスターをOSごとシャットダウンす
る、という荒業も可能に
-
MySQL Fabricもイベントトリガーは予約されているもの
の、設定ファイルではどうにもならない
更に、SSHも利⽤できるMHAに対してMySQL FabricはSSHのセット
アップを要求しないので、出来ることは限られている
-
とはいえ単にスクリプトを叩くようにイベントを書けばいいはず-
20/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
21/73
構成の検出
MHA for MySQLは管理対象のIP, portをコンフィグから読
み取り、実際にどのMySQLがマスターになっているかは⾃
動で検出する
MySQL Fabricはバッキングストアの情報を正として、実態
はチェックしない
再起動には強い-
バッキングストアの内容と実態がズレると地獄が⾒える-
既存のレプリケーション環境に導⼊しようと思うとちょっとだけコツ
が必要
-
22/73
MHA for MySQLとの⽐較
MHA for MySQL MySQL Fabric
マネージャプロセス masterha̲manager mysqlfabric
マネージャの状態確認 ログのみ mysqlfabricコマンド (デー
モンと同じコマンド)
エージェント ライブラリ なし
切り替わり時のリカバリー ⼀番進んでいるスレーブのリ
レーログから(via SSH)
なし
切り替わりの処理 master̲ip̲failover̲script ファブリック対応コネクター
依存
処理フック master̲ip̲failover̲scrip
t,
secondary̲check̲script,
shutdown̲script,
report̲script
SERVER̲LOST,
SERVER̲PROMOTED,
SERVER̲DEMOTEDが予約
されているが、Pythonで直
書き
構成の検出 ⾃動 ⼿動で登録
サーバーの追加, 削除 コンフィグ編集, 再起動 mysqlfabricコマンド
23/73
サーバーの追加, 削除
MHA for MySQLは追加, 削除時にコンフィグの再読み込み
が必要
MySQL Fabricは mysqlfabric group add, mysqlfabric
group remove コマンドで動的に追加, 削除
どちらにせよこれらマネージャプロセスは単⼀障害点ではないので、
再起動でもオンラインでもそれほど違いはない
-
24/73
ここまでのまとめ
MySQL FabricはMHA for MySQLのようにMySQLの⾃動/⼿
動フェイルオーバーをサポートするためのプロダクト
MySQL Fabricは状態をバッキングストアに保管し、APIを
提供するウェブアプリケーションライクなつくり
良くも悪くも-
MHAは非同期レプリケーションしかない時代に開発された
もののため、リレーログから差分をリカバリーする機能がつ
いている
MySQL 5.7とそれ以降でサポートされた複数台の準同期レプリケーシ
ョンを利⽤すればリカバリーは不要になった
-
25/73
興味が湧いて
きましたか︖
[はい/Yes]
26/73
2016年現在の
MySQL Fabric
のGAバージョン
27/73
存在しな
い
28/73
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
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
MySQL Fabric 1.6はどこにもない
以前はLab版があったが2016/11/05現在Labにも存在しない
http://dev.mysql.com/downloads/fabric/
31/73
追い打ち
http://www.slideshare.net/mattalord/mysql-high-
availability-innodb-clusters
32/73
今までMySQL
Fabricがいたとこ
ろにMySQL Shell
ガイル
33/73
あっ(察
し
34/73
先が無いことを⾒抜くのは難しい (c)matsunobu
「先が無い」とは誰も⾔ってくれない
興味の無いものに対してわざわざ情報発信してベンダー
に喧嘩を売る動機は無い
..
先が無い技術を選んで⼀番痛い目を⾒るのはその採⽤企
業とエンジニア
http://www.slideshare.net/matsunobu/ss-28303485/31
35/73
諦めますか︖
[No/否]
36/73
というよりは最初から諦めていた
MySQL Fabricつらい
MySQL Fabricつらい Advent Calendar 2014
MySQL Fabric&Routerつらくない Advent Calendar 2015
MySQL Fabricでぼっこぼこにされたはなし
37/73
これなんかひどい
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
これもひどい
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
作ったやつ出てこい
もともと何故誰も⽂句を⾔わないのか不思議なレベルの品質
パッチを送っても放置
ついにはバグレポートがトリアージすらされなくなった
使ってないソフトウェアに⽂句を⾔う⼈はいない
40/73
だいぶ考えたこと
MHA for MySQLは流⾏っている
とはいえ⾃分で使うのに⾜りない機能があって
relay_log_info_repository= TABLE の場合起動できない
MHA for MySQL⾃体を監視する⼿段が微妙
あんまりメンテナンスされてる気配がない
-
MySQL Fabricだって考え⽅⾃体は間違っていなかったはず
だ
死活監視とマスター切り替えを備えたフレームワークという⽅向性-
死活監視がちょっとイケてなくて、エラーハンドルがイケてなくて、
補助機能が貧弱すぎて、ログ機構が極悪なだけ
-
シャーディングのことは忘れることにする-
41/73
オレオレパッ
チしたことあ
る⼈︖
42/73
オレオレパッチの
ソフトウェアを 運
⽤ したことある
⼈︖
43/73
つらい
[はい/Yes]
44/73
オレオレパッチの 運⽤
メインラインのバージョン固定してパッチしてビルドしては
いおしまい、なら楽
ex. mysql コマンドラインクライアント, mysqldump なんかはバージョ
ンアップしたところでそんなに機能が変わらないから、バージョンを
固定してビルドするのは⼗分現実的
-
メインラインが⽣きていて新機能が追加され続ける場合、追
従しないといけない
メインラインが別の実装で同じ機能を作ったり-
非互換のAPI変更があったり-
テスト書くのつらい-
45/73
半年くらい悩んだ結果
あまりにもつらかったので、おとなしくフォークして⾃
前でパッチを当てることにしました。フォークするつい
でに名前を変えたのが mikasafabric for MySQLになり
ます。
期待通りに使えるMySQL Fabricを目指した結果なの
で、まあまあ期待通りに動きます
mikasafabric for MySQLをオープンソースライセンスで公
開しました | GMOメディア エンジニアブログ
46/73
悩んだ経緯
というか、 “Support MySQL 5.7” と銘打たれたコミッ
トがひどすぎて、テストすら通らない(何故マージされ
たし)
という訳でまずテストを直すPRした。これがマージさ
れれば Issue #109のやつも頑張るかも知れない。これ
がマージされないようなら、 innotop は死んだんであ
ろう(というか、死んだと思ってForkしてゴニョったや
つをrpmbuildしたらテストが通らないのに気が付い
た。。)
⽇々の覚書: innotopが最近息してないなーと思ったんだ
47/73
MySQLエコシステムの中⾝
中⾝を⾒たことのある⼈いますか︖
innotop (Perl)-
PMP for Cactiの ss̲get̲mysql̲stats.php (PHP)-
MHA for MySQL (Perl)-
どれも同じなのは、「⼈間がやるべき⾯倒くさい処理を、泥
臭く丁寧(︖)に実装してある」
48/73
innotopの⼀件で感じたこと
かっこよくなくてもいい
誰もやりたくない泥臭いことを、丁寧に
⾃分で使いたい範囲のFixなら何とかなる
⾃分が使うために作ったものが誰かの役に⽴つこともある-
49/73
脱線しま
した
50/73
mikasafabric for MySQL #とは
⾼可⽤性(High Availability)
障害探知と昇格-
データベースリクエストのアクセス先の選択-
シャーディング – スケールアウト
今のところMySQL Fabricの機能に⼿を⼊れてない-
MySQL Fabricもともとのシャーディング機能が何故かグループレプ
リケーションを要求するようになっていたので、ここは完全にサポー
ト外
-
MySQL Fabric – コネクタとの連携
プロキシ不要の構成-
MySQL Routerとの組み合わせに特化-
他のファブリック対応コネクターとも動くはずだけど未検証-
51/73
mikasafabric for MySQL
MySQL 5.7の新機能も積極的に使う
offline_mode を使ってコネクションプールとの相性を改善
0.4.0現在、ファームはMySQL 5.7.5以上必須
-
Multi-Source Replication環境下でもファームに組み込めるように改
善
-
既存のバグのFIX
prune_log, prune_error_log イベントのバグのせいでいつまでも消え
ないログテーブル
-
レプリケーションスレッドのエラーでスレーブを SPARE ステートに切
り離し
-
“ちょっと便利な” 機能
event_schedular がオフだとワーニングメッセージ-
レプリケーションユーザーの⾃動作成-
ログテーブルへの出⼒をコンフィグで設定- 52/73
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
名前解決ベースのHAに近い
MySQL Router(またはFabric-awareコネクター)がリゾルバ
ー
MySQL RouterはTTLが切れるたびにMySQL Fabricに経路
情報を問い合わせ
TTL期間内はMySQL Router内のルーティングキャッシュを使って経
路解決
-
TTL期間後でもMySQL Fabricへの経路情報の問い合わせに失敗した
らルーティングキャッシュを使い続ける
-
54/73
MySQL Router
MySQL Routerは全てのパケットを⼀度NATする
もしアプリケーションから⾒てlocalhost以外に置くなら、MySQLア
カウントの接続元はMySQL RouterのIPアドレスにしないといけない
-
遅延は数⼗us単位-
⼀度NATしている関係上、エラーパケットを捕捉して特定のエラーコ
ードなら切断するとかいうパッチもしてみた(動いた)
-
パスワードをiniファイルに書くと起動できない、書かないとプロンプ
トを出そうとするのがダメなところ(パッチでしのいでる)
-
mikasafabricでマスター昇格コマンドを叩くと2〜3秒で切
り替わる
TTLは1(mikasafabric側の設定)-
フェイルオーバーの場合、mikasafabricがファームのダウンを検知す
るまでに6秒くらいなので合わせて10秒ちょい(のはず)
-
55/73
MySQL Fabric
レプリケーションのマスター/スレーブの組を “グループ” と
呼んで管理
サーバー(mysqld)は server_uuid ごとに識別される
4つのステータス。PRIMARY, SECONDARY, SPARE, FAULTY-
56/73
サーバーごとのステータス
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
mysqlrouter.ini
[fabric_cache:hogehoge]
address = 172.17.3.202
user = mysqlrouter
#password = router_password
[routing:master]
bind_address= 0.0.0.0:13306
mode = read-write
destinations= fabric+cache://hogehoge/group/myfabric
[routing:slave_only]
bind_address= 0.0.0.0:23306
mode = read-only
destinations= fabric+cache://hogehoge/group/myfabric
[routing:all_wrr]
bind_address= 0.0.0.0:33306
mode = read-only
destinations= fabric+cache://hogehoge/group/myfabric&allow_primar
y_reads=yes
58/73
mysqlrouter.iniの設定
fabric̲cacheセクション
fabric_cache:xx のxxは識別名-
parameter value
address MySQL FabricのIPアドレス
user MySQL Fabricの(not バッキングストア)
ユーザー
password MySQL Fabricの(not バッキングストア)
パスワード
(ただしMySQL Router 2.0.3現在、この項目
を設定するとエラーで起動しない
59/73
mysqlrouter.iniの設定
routingセクション
routing:xx のxxは識別名-
parameter value
bind̲addres バインドするIPアドレスとポート
mode read-writeまたはread-only
destinations コンマ区切りのIPアドレス(単純なラウンド
ロビン)または
fabric+cache://Fabric識別名/group/
Fabricグループ名
allow_primary_reads={yes | no}
60/73
MySQL Router
mysqlrouter のプロセスと「マスターへのルーティング」
「スレーブへのルーティング」が別のポートでLISTENされ
る
「どっちにルーティングするためにどっちのポートを叩くか」は
MySQL Routerは判断してくれない
⼀応MySQL Routerのルーティングはプラグイン⽅式なので、将来に期待
-
mysqlrouter は全てのパケットをシングルスレッドでNATす
るので、
レイテンシーは10us未満なのでそんなに⼼配はしなくて良さげa.
300並列(Not 同時接続)とかは mysqlrouter がサチるb.
やろうと思えばクエリーの中⾝も覗けるc.
61/73
ステータス変更
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
mikasafabric for MySQLの死活監視
変更後ステータス mikasafabric特有
MySQL接続失敗(サーバーダ
ウン含む)
FAULTY No
SHOW SLAVE STATUSで
スレッドが⽌まってる
SPARE Yes
オフラインモードON FAULTY Yes
63/73
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
オフラインモード (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
DEMO
しかしじかんがたりな
い︕︕
66/73
InnoDB Clusterとの接点
http://www.slideshare.net/mattalord/mysql-high-
availability-innodb-clusters
67/73
InnoDB Cluster
グループレプリケーション(5.7.15-preview) をメインに置
いたHA構成
MySQL Router(2.1.0-preview) のMetadata Cacheプラグ
インとMySQL Fabric Cacheプラグインは非常に似たつくり
HA情報の問い合わせ先が違うだけ。-
どちらもMySQL Routerから⾒ると CALL でストアドファンクション
を呼び出す
-
68/73
MySQL Fabirc vs InnoDB Cluster
MySQL Fabric InnoDB Cluster
同期⽅式 非同期レプリケーション 同期グループコミュニケーシ
ョン
死活監視 mysqlfabricデーモン 多分メンバー同⼠のグループ
コミュニケーション
状態の操作 mysqlfabricコマンド MySQL Shell
69/73
非同期ベース, 同期
ベースでユースケ
ースは分かれてい
く(かも)
70/73
mikasafabric for MySQLということ
MySQL Fabricを使いたいおじさんが、 ⾃分で使うために
パッチしている
MySQL Fabric 1.6.0がlabsにあった時期があって、このまま1.5.6ベ
ースで⾏くかどうかは微妙だけれど、それでも「ある程度期待通りに
動くMySQL Fabric」として使える程度にはメンテナンスするはず
-
本家のメンテナンスが終わった(︖)以上、mikasafabric for
MySQLはポストMHAとして⼿間をかける理由になった
-
⾃分で⾔うのもアレだけど、MySQL 5.7 + MySQL Fabric
+ MySQL Routerの組み合わせで運⽤だったら⽇本で⼀番詳
しい気がする
だから、その組み合わせだけに特化して(それでも⼤概のユースケー
スには上⼿く合う)「DBAが本当に必要だったもの」を追加する
-
71/73
mikasafabric
for MySQL をよ
ろしくお願いしま
す :)
72/73
Questions
and/or
Suggestions?
73/73

More Related Content

PDF
MySQLチューニング
PPT
MHAを検証して導入した話
PDF
mikasafabric for MySQL
PDF
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
PPTX
MySQL clients
PDF
MySQL 5.7の次のMySQLは
PDF
Devsの常識、DBAは非常識
PDF
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQLチューニング
MHAを検証して導入した話
mikasafabric for MySQL
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
MySQL clients
MySQL 5.7の次のMySQLは
Devsの常識、DBAは非常識
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06

What's hot (20)

PDF
ゆるふわMySQLフェイルオーバー
PPTX
MySQLの運用でありがちなこと
PPT
Handlersocket 20140218
PDF
MySQLレプリケーションあれやこれや
PDF
MySQLを割と一人で300台管理する技術
PDF
Dockerイメージで誰でも気軽にMroonga体験
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
PDF
Handlerさんコンニチワ
PDF
How to backup your mroonga database?
PDF
MySQL 初めてのチューニング
PPTX
MySQL Clusterを運用して10ヶ月間
PDF
tcpdump & xtrabackup @ MySQL Casual Talks #1
PDF
MySQLやSSDとかの話 前編
PDF
MHA for MySQLとDeNAのオープンソースの話
PDF
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
PDF
MySQLの冗長化 2013-01-24
PDF
わたしを支える技術
KEY
My sql casual_in_fukuoka_vol1
PDF
Mysql toranomaki
PPTX
dimSTATから見るベンチマーク
ゆるふわMySQLフェイルオーバー
MySQLの運用でありがちなこと
Handlersocket 20140218
MySQLレプリケーションあれやこれや
MySQLを割と一人で300台管理する技術
Dockerイメージで誰でも気軽にMroonga体験
MySQL 5.7 トラブルシューティング 性能解析入門編
Handlerさんコンニチワ
How to backup your mroonga database?
MySQL 初めてのチューニング
MySQL Clusterを運用して10ヶ月間
tcpdump & xtrabackup @ MySQL Casual Talks #1
MySQLやSSDとかの話 前編
MHA for MySQLとDeNAのオープンソースの話
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQLの冗長化 2013-01-24
わたしを支える技術
My sql casual_in_fukuoka_vol1
Mysql toranomaki
dimSTATから見るベンチマーク
Ad

Viewers also liked (20)

PDF
MySQLerの7つ道具
PDF
5.7の次のMySQL
PDF
MySQLerの7つ道具 plus
PDF
MySQL Fabricでぼっこぼこにされたはなし
PDF
とあるイルカの近況報告
PDF
MySQLアンチパターン
PDF
MySQLと正規形のはなし
PDF
MySQLおじさんの逆襲
PDF
異業種から福祉介護ジョブチェンジ検討
PDF
異業種から福祉業界ジョブチェンジして10か月後
PDF
地雷職人の朝は早い
PDF
雑なMySQLパフォーマンスチューニング
PDF
紹介 of Anemometer
PDF
ペパボ de MySQL
PDF
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
PPTX
SQLアンチパターン メンター用資料
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
MySQL 5.7の罠があなたを狙っている
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
PDF
MySQLで論理削除と正しく付き合う方法
MySQLerの7つ道具
5.7の次のMySQL
MySQLerの7つ道具 plus
MySQL Fabricでぼっこぼこにされたはなし
とあるイルカの近況報告
MySQLアンチパターン
MySQLと正規形のはなし
MySQLおじさんの逆襲
異業種から福祉介護ジョブチェンジ検討
異業種から福祉業界ジョブチェンジして10か月後
地雷職人の朝は早い
雑なMySQLパフォーマンスチューニング
紹介 of Anemometer
ペパボ de MySQL
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
SQLアンチパターン メンター用資料
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
MySQL 5.7の罠があなたを狙っている
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQLで論理削除と正しく付き合う方法
Ad

Similar to MHAの次を目指す mikasafabric for MySQL (7)

PPTX
mysqlcasual6-fabric
PDF
Introducing MySQL MHA (JP/LT)
PDF
MHA for MySQL の話
PDF
MySQL Fabricつらい
KEY
MHA, Murakumo & Me
PDF
Spider storage engine (dec212016)
PDF
ゆるふわLinux-HA 〜PostgreSQL編〜
mysqlcasual6-fabric
Introducing MySQL MHA (JP/LT)
MHA for MySQL の話
MySQL Fabricつらい
MHA, Murakumo & Me
Spider storage engine (dec212016)
ゆるふわLinux-HA 〜PostgreSQL編〜

More from yoku0825 (9)

PDF
逝くぞ最新版、罠の貯蔵は十分か
PDF
MySQL 8.0で憶えておいてほしいこと
PDF
片手間MySQLチューニング戦略
PDF
MySQLステータスモニタリング
PDF
わかった気になるMySQL
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PDF
MySQL 5.7が魅せる新しい運用の形
PDF
MySQL5.7で遊んでみよう
PDF
光のMySQL 5.7
逝くぞ最新版、罠の貯蔵は十分か
MySQL 8.0で憶えておいてほしいこと
片手間MySQLチューニング戦略
MySQLステータスモニタリング
わかった気になるMySQL
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
MySQL 5.7が魅せる新しい運用の形
MySQL5.7で遊んでみよう
光のMySQL 5.7

MHAの次を目指す mikasafabric for MySQL