Metaは現在の準同期データベースとしてのMySQLを置き換えるために、MySQL Raftをデータセンターで展開している。新しいコンセンサスエンジンは運用を助け、MySQLサーバーがプロモーションやメンバーシップに責任を持つことを可能にしている。
MetaのMySQLデータストアは、世界最大級の規模を誇り、数百万個のシャードで地理的に分散して複製された大規模なデプロイメントだ。ソーシャルグラフとメッセージング、広告、フィードなどのサービスを提供するクラスタは、ペタバイトのデータを保持し、分散した地域のデータセンターに設置された数千台のサーバーで稼働している。Meta社のソフトウェアおよびプロダクションエンジニアであるAnirban Rahut氏、Abhinav Sharma氏、Yichen Shen氏、Ahsanul Haque氏は次のように説明する。
ここ数年、私たちはMySQLと統合されたRaftコンセンサスエンジンであるMySQL Raftを実装し、複製されたステートマシンを構築してきた。私たちは、デプロイの大部分をMySQL Raftに移行し、現在のMySQL準同期データベースを完全にMySQL Raftに置き換える予定だ。
チームによると、新しいMySQLの導入により、書き込み性能を損なうことなく、高い信頼性、証明可能な安全性、フェイルオーバー時間の大幅な改善、運用の簡素化が実現されるとのことだ。
これまでのMetaのレプリケーション戦略では、MySQLの準同期(semisync)レプリケーションプロトコルを使用していた。プライマリーでは、プライマリーリージョン内の2つのログオンリーレプリカ(logtailer)への準同期レプリケーションでミリ秒以下のレイテンシーを実現し、他のリージョンへの配信には通常のMySQLプライマリーからレプリカへの非同期レプリケーションを使用することになった。チームは、直面していた課題をこう説明する。
複雑なプロモーションとフェイルオーバーの操作中に安全性を保証し、データ損失を避けるために、いくつかの自動化デーモンとスクリプトは、ロック、オーケストレーションステップ、フェンシングメカニズム、サービス発見システムであるSMCを使用します。分散型のセットアップであり、これを原子的に達成するのは困難だった。自動化は時間の経過とともに複雑化し、パッチが必要なコーナーケースも増え、メンテナンスが難しくなりました。
Source: https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/
その代わりにチームは全く新しいアプローチでMySQLを強化し、本当の意味での分散システムに移行することを決定した。 MetaはRaftに切り替え、コントロールプレーンとデータプレーンのオペレーションを同じレプリケートされたログの一部としたのである。FacebookでMTSを務めMongoの著名なエンジニアであるMark Callaghan氏はコメントしている。
MySQLとRaftは、お味噌汁と御飯、チャーシューとメンマと卵麺のように相性が良い。
DatabricksのシニアディレクターであるShrikanth Shankar氏は、変化の複雑さを強調する。
「飛んでいる飛行機のエンジンを交換しろ!」なんていうジョークがありますよね?このプロジェクトはまさにそれでした。見事に成功させたチームに拍手を送ります!
一方でPerconaの創設者でオープンソースの提唱者であるPeter Zaitsevはこのように問いかけている。
なぜFacebookはMySQL Group Replicationを使ったり改善したりするのではなく、MySQL Raftを構築しているのでしょうか?
Raft for MySQLは、Apache Kuduをベースに、MetaがMySQLのニーズに合わせて修正し、オープンソースプロジェクトであるkuduraftとしてフォークを公開している。kuduraftに追加された新機能は、2つの異なる交差するクォーラムをサポートするオプションであるFlexiRaftと、プロキシ中間ノードを使用しネットワーク帯域幅を削減する機能であるProxyingだ。さらに、圧縮とログ抽象化の改善により、配布前のバイナリログペイロードの圧縮や、異なる物理ログファイルの実装が可能になった。