エンジニアブログ

エンジニアブログ
Perl

札幌MySQL勉強会に参加してきた(1)

photo.jpg onagatani 2011年08月20日

メモですがとりあえず晒します
*あくまでもメモなのでおかしな文言・間違っている内容があるかも。書くのが間に合わなかった内容もあります。あしからず


MHAについて

単一障害点をなくしたい
 DENAではサーバ台数が1000台・・
MYSQLではスレーブは複数だが、マスターが1つなのでシングルポイントになってしまう。

マスターが障害を起こしたときに、全ての情報が全てのslaveにバイナリログを渡していない可能性がある。

正しく復旧するには、マスターのバイナリログの最終更新を拾い出し、slave間の差分をなくす必要がある。

MHAは。。。
Managerサーバが全てのMYSQLサーバをチェック(pingするだけ)。
マスターの稼働監視から自動フェイルオーバーまでを行なうツール。PurePerl。
秒単位でできる(アクティブ・アクティブ型なので)。
任意のスレーブを新マスターにできる
外部スクリプトを呼ぶ拡張ポイントがある
- 複数の経路(NW)から本当にマスターが死んだか検証
- 強制電源OFF
- マスターIPアドレスの更新
MYSQL5.0以降で動作
導入にはプロセスの停止は必要ない
パフォーマンス劣化はない
ストレージエンジンに依存しない

--- 中略(電話に出てる間に話がわからなくなる)---

デモ

--- 中略(電話に出てる間に話がわからなくなる)---

任意のスレーブをマスターにできる
準同期レプリを使うとほぼデータのロストがない

マスターを他のサーバに移したい事はよくある。
ダウンタイムなしでマスター切り替えがしたい。
マスターの更新を止める、スレーブの同期をまつ
それらを0.5秒くらいでできればいいかも

書き込みのブロックは?
MYSQLの更新ブロックは全てが安全ではない
アプリケーションから使っているユーザをdrop
 新規セッションがはれないくなる
 接続済みのセッションは切断までエラーにならず
=>この話はOSCでも聞いたんですが、非常に納得しました


MHAだと手動でマスターを切り替える機能がある!!!


QA

MHA Managerがおちたらどうする?
ManagerをHertBeatしてpeacemakerとか。