Facebookが何千台ものMySQLを人手を使わず自律管理する仕組み「MySQL Pool Scanner(MPS)」
おそらく世界でもっとも大規模にMySQLのクラスタを展開し、運用しているのがFacebookでしょう。複数のデータセンターにまたがり何千台ものMySQLサーバを運用するために、自動化の仕組みは欠かせません。
その自動化がどのような仕組みになっているのか。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はまさにその方向へ進んでいる重要なツールだといえるのではないでしょうか。
あわせて読みたい
OpenStackの新プロジェクト「Solum」は、DevOps環境の構築を目指す
≪前の記事
国内におけるパブリッククラウド市場規模、2017年には昨年の3.6倍にあたる3376億円へ。IDCジャパン