DeNAによる大規模なMySQLノンストップ運用の裏側にある、フェイルオーバー自動化ツール

2011年4月15日

4月11日から米サンタクララで行われた「MySQL Conference & Expo 2011」。このイベントでDeNAの松信嘉範(まつのぶよしのり)氏が、同社の大規模なMySQLの運用を支えている技術とツールについてのセッション「Automated, Non-Stop MySQL Operations and Failover」を行いました。

プレゼンテーションの中で、社内で利用しているフェイルオーバーの自動化ツールをオープンソース化することにも触れています(英語のドキュメントも作成中とのこと)。

MySQLの大規模運用における自動フェイルオーバーは、特にクラウドでのMySQLの利用が増えるにつれてニーズが高まる分野と思われます。セッションのスライドが公開されていますので、そのポイントを紹介していきます。

自動化されたノンストップなMySQLの運用

fig

ソーシャルゲームでは高可用性が強く求められている。課金サービスでは利用者からの要求は厳しく、ダウンが長引けば業績にネガティブなインパクトを与える。

fig

そこで目指すのは「No Single Point of Failure」(単一障害点がないこと)だ。

DeNAでは700以上のMySQLを運用しており、150以上のMaster/Slaveのペアが構成され、主にMySQL 5.0/5.1を利用している。そして統計的にみて数カ月に1度マスターが落ちている。原因はLinuxかハードウェアが原因。できればこのとき、ダウンタイムを最小にするためにマニュアルでのフェイルオーバー操作をなくしたい。

しかしMasterを非単一障害点化するのは難しい。SlaveをMasterに自動的に昇格させる仕組みを、通常のMySQL 5.0/5.1/5.5以上で構成したい。

fig

フェイルオーバーのときに発生する課題がある。MySQLのMasterからSlaveへのレプリケーションは非同期なため、Masterがダウンしたときに、まだSlaveにレプリケートされていないデータがあるのだ。

例えばこの図ではid=102がレプリケートされていない。Slaveごとにどこまでレプリケートされているか状況も異なる。もっとも最新のSlaveを見つけ、他のSlaveと同期させる必要があるのだ。

fig

現在ある高可用性のソリューションについて。Heartbeart+DRBDは書き込み性能が落ちるなどの問題がある。MySQL Cluserは、残念ながらInnoDBを使っているので採用できず。

fig

そこで、高可用性の目的を達成するにはどうすればよいか。Masterが落ちたときにスレーブを昇格させてフェイルオーバーさせる。手順としては、可能ならMasterからbinary log eventsを救済し、最新のSlaveを見つけ、ほかのSlaveとの差分を更新。救済したログを当て、Masterに昇格させ、新Masterに対してSlaveのレプリケーションを開始する。

これを自動化していく。

fig

(ここから20枚以上のスライドを使って、上記を技術的にどう解決するのかの詳細が解説されています。興味のある方は記事末のスライドでぜひご確認ください。この部分がこのセッションの核心ではあるのですが、記事で紹介するにはテクニカルすぎるので省略させていただきます……)

これを実現したツールが「Master High Availability Tool」だ。Masterがダウンしたかどうかを監視するManagerがあり、フェイルオーバーを行う。DeNAはこのツールを社内で使い始めており、いずれオープンソースソフトウェアとして公開するつもりだ。

fig

1つのManagerはデータセンター内の複数のMasterを監視する。

fig

実際のケース。Masterでカーネルパニックが起きたとすると、Masterが本当にダウンしているかどうかをチェックするのに10秒、Masterのダウンを確定するため強制的にパワーオフをするのにかかる時間はハードウェアに依存するが4秒~5秒、もしくは5秒から10秒、Masterのリカバリは1秒以内、スレーブのリカバリに1秒以内。

fig

公開されているスライドは以下です。

あわせて読みたい

MySQL RDB データベース 運用・監視




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本