Facebookが何千台ものMySQLを人手を使わず自律管理する仕組み「MySQL Pool Scanner(MPS)」

2013年10月28日

おそらく世界でもっとも大規模にMySQLのクラスタを展開し、運用しているのがFacebookでしょう。複数のデータセンターにまたがり何千台ものMySQLサーバを運用するために、自動化の仕組みは欠かせません。

Under the hood: MySQL Pool Scanner (MPS)

その自動化がどのような仕組みになっているのか。FacebookのデータベースエンジニアであるShlomo Priymak氏が、Under the hood: MySQL Pool Scanner (MPS)という記事をFacebookで公開しています。

かなり長い記事なので、ここではそのポイントをまとめて解説してみました。詳細はぜひ原文をあたってみてください。

MPSのおもな3つの機能

Facebookで稼働しているMySQLは、つねに1つのマスターとそこからレプリケーションされた複数のスレーブによるレプリカセットを構成しています。このレプリカセットの構造を維持し続けることで、可用性と高速なアクセスを実現しているわけです。そして大量のレプリカセットがFacebookのデータセンター内で稼働しています。

これを維持するためのMPSの仕組みは、大きく3つの部分に分かれています。1つは、スレーブが落ちたときの仕組み。もう1つはマスターが落ちたときの仕組み。そしてMPS自身が自律的に動くための仕組みです。

スレーブが落ちたとき

スレーブが落ちたとき、あるいはディスクスペースの不足などのときには、別の物理サーバにスペアとなるインスタンスを作り、そこにスレーブのコピーを行い、コピー完了後にそちらを新スレーブとして扱います。

下記の図では、説明を単純にするため各物理サーバには2つのインスタンスが稼働していることになっています。Spare(スペア)とは、予備用に空いているインスタンスのことです。

マスターが落ちたとき

マスターが落ちたときには、レプリカの1つをマスターに昇格させます。いったん書き込みを停止し、スレーブをマスターに昇格させ、その後マスターへの書き込みを再開します。

MPSはすべてのステータスを保持している

この2つの操作は完全に自動化されているとのことです。

These two operations (which are usually complex procedures for most companies running MySQL) have been completely automated to a point where MPS can run them hundreds or thousands of times a day in a fast and safe manner, without any human intervention.

この2つの運用(MySQLを稼働させている多くの企業にとって、一般にはとても複雑な操作)は完全に自動化され、MPSが毎日何百回、何千回と人手を介すことなく迅速かつ安全に実行している。

MPS自身はどのように動いているのでしょう? MPSはまず、すべてのインスタンスの現在のステータスとメタデータとその履歴を保持するレジストリを持っており、それを元にさまざまな操作を行っています。

主なステータスとして以下の種類があります。

  • Production : 運用中
  • Spare : タスク割り当て可能
  • Spare allocated : タスク割り当てのターゲットとして選定済み、あるいはデータコピー中
  • Spare deallocated: 運用から削除され、一時的にクリーンアップされている
  • Drained: 使用停止中、テストやメンテナンスのため予約済みなど
  • Reimage: このサーバの全インスタンスは修理中

このステータスを決定するために、すべてのサーバにはエージェントが組み込まれ、ハードウェアの種類や状態、フラッシュディスクの残り容量やソフトウェアの状況などを数分ごとに報告しています。

この報告を元に、MPSは上記のステータスを割り当て、それを基に自動的な運用処理を行っているわけです。

そしてMPSのこのレジストリもまた、MySQLクラスタ自身で保持されていると。

This registry is managed by the database servers themselves so that it scales with the database cluster and MPS doesn't need a complex application server installation.

このレジストリは、このデータベースサーバ自身によって管理されているため、データベースクラスタとともにスケールしていく、だからMPSは複雑なアプリケーションサーバのインストールは不要なのだ。

クラスタに集団的知性を持たせる

一匹の蟻はあまり知性を持っているように見えませんが、蟻の集団であるコロニーにはそれを上回る集団的知性があるのではないかと考えた昆虫学者がいたそうです

FacebookのMPSは、複数のインスタンスからなるMySQLのクラスタをコロニーとして捉え、全体として自律的に振る舞うような知性を与える仕組みのように見えます。

コンピュータはより高い並列性を持たせることで性能を向上させていくという時代に入っています。そのとき、並列なコンピュータのコロニーに対して集団的知性を持たせることが非常に重要な要素の1つであるとすれば、FacebookのMPSはまさにその方向へ進んでいる重要なツールだといえるのではないでしょうか。

あわせて読みたい

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




タグクラウド

クラウド
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本