分散型 MySQL Binlog ストレージ システムのアーキテクチャ設計

分散型 MySQL Binlog ストレージ システムのアーキテクチャ設計

1. キングバスの紹介

1.1 Kingbusとは何ですか?

kingbus は、raft の強力なコンセンサス プロトコルに基づく分散 MySQL binlog ストレージ システムです。これは MySQL スレーブとして機能し、実際のマスターから binglog を同期し、分散クラスターに保存できます。同時に、MySQL マスターとして機能し、クラスター内のバイナリログを他のスレーブと同期します。 Kingbus には次の機能があります。

  • MySQL レプリケーション プロトコルと互換性があり、Gtid を介してマスター上の binlog を同期し、Gtid を介して kingbus から binlog をプルするスレーブをサポートします。
  • クロスリージョン データ レプリケーション、Kingbus は Raft プロトコルを通じてクロスリージョン データ レプリケーションをサポートします。クラスターに書き込まれたバイナリログ データは、複数のノード間で強力な一貫性が保証され、バイナリログの順序はマスターとまったく同じであることが保証されます。
  • 高可用性: Kingbus は Raft の強力な一貫性プロトコルに基づいて構築されているため、クラスター内のノードの半分以上が稼働している場合、binlog プルおよびプッシュ サービス全体の可用性が高くなります。

1.2 kingbus はどのような問題を解決できますか?

  • kingbus はマスターのネットワーク伝送トラフィックを削減できます。 1 つのマスターと複数のスレーブのレプリケーション トポロジでは、マスターは各スレーブに binlog を送信する必要があります。スレーブが多すぎると、ネットワーク トラフィックがマスターのネットワーク カードの上限に達する可能性があります。たとえば、マスターが大きなテーブルの削除やオンライン DDL の実行などの操作を実行すると、大量の binlog イベントが瞬時に生成される可能性があります。マスターの下にスレーブが 10 台ある場合、マスター上のネットワーク カード トラフィックは 10 倍に増幅されます。マスターがギガビット ネットワーク カードを使用し、10MB/秒を超えるトラフィックを生成する場合、ネットワーク カードが完全に使用される可能性があります。マスターを Kingbus 経由で接続することで、スレーブを複数のマシンに分散し、送信トラフィックのバランスをとることができます。
  • マスター フェイルオーバー プロセスを簡素化するには、キングバスに接続されたスレーブをマスターに昇格し、キングバスを新しいマスターにリダイレクトするだけです。他のスレーブは引き続きキングバスに接続されており、レプリケーション トポロジは変更されません。
  • マスターが binlog ファイルを保存するためのスペースを確保します。通常、MySQL は高価な SSD に保存されます。 binlog ファイルが占めるスペースが大きすぎる場合は、MySQL に保存されるデータを削減する必要があります。すべてのバイナリログを Kingbus に保存すると、マスターに保存されるバイナリログ ファイルの数を減らすことができます。
  • 異種レプリケーションをサポートします。 Alibaba のオープンソース チャネルを通じて、Kingbus は Canal に接続されます。 Kingbus は継続的にバイナリログを Canal にプッシュします。 Canal は、バイナリログを受信した後、それを Kafka メッセージ キューにプッシュし、最終的に HBase に保存します。ビジネス部門は、Hive を通じて SQL を直接記述し、リアルタイムのビジネス分析を実現します。

2. キングバスの全体アーキテクチャ

kingbus の全体的なアーキテクチャを下図に示します。

  • ストレージは、raft ログ エントリとメタデータを保存する役割を担います。 Kingbus では、raft ログと MySQL binlog が統合されています。 raft ログのデータ部分は、異なるヘッダー情報によって区別される binlog イベントです。この方法では、2 種類のログを別々に保存する必要がないため、ストレージ スペースを節約できます。 kingbus は、ラフトノードの投票情報やいくつかの特別な binlog イベント (FORMAT_DESCRIPTION_EVENT) の特定のコンテンツなどのメタ情報を保存する必要があるためです。
  • Raft は、etcd raft ライブラリを使用して、リーダー選出、ログ複製、および kingbus クラスターのその他の機能を複製します。
  • binlog syncer は、Raft クラスターのリーダー ノードでのみ実行されます。クラスター全体に同期者は 1 つだけ存在します。 Syncer はスレーブのふりをして、マスターとのマスター-スレーブ レプリケーション接続を確立します。マスターは、syncer によって送信された execute_gtid_set に従って、syncer がすでに受信した binlog イベントをフィルタリングし、syncer が受信していない binlog イベントのみを送信します。このレプリケーション プロトコルは、MySQL マスター スレーブ レプリケーション メカニズムと完全に互換性があります。 binlog イベントを受信すると、syncer は binlog イベントの種類に応じていくつかの処理を実行し、binlog イベントをメッセージにカプセル化して raft クラスターに送信します。ラフト アルゴリズムにより、この binlog イベントは複数のノードに保存され、強力な一貫性を実現できます。
  • binlog サーバーは、レプリケーション プロトコルを実装するマスターです。実際のスレーブは、binlog サーバーがリッスンするポートに接続できます。 binlog サーバーは binlog イベントをスレーブに送信します。 binlog イベントを送信するプロセス全体は、MySQL レプリケーション プロトコルに従って実装されます。バイナリログ イベントがスレーブに送信されない場合、バイナリログ サーバーは定期的にハートビート イベントをスレーブに送信して、レプリケーション接続を維持します。
  • API サーバーは、次のものを含む Kingbus クラスター全体の管理を担当します。
    • Raft クラスターのメンバーシップ操作、クラスターのステータスの確認、ノードの追加、ノードの削除、ノード情報の更新など。
    • Binlog syncer 関連の操作: Binlog syncer の開始、Binlog syncer の停止、Binlog syncer のステータスの確認。
    • Binlog サーバー関連の操作: Binlog サーバーの起動、Binlog サーバーの停止、Binlog サーバーのステータスの確認。サーバー層でのさまざまな例外は、ラフト層には影響しません。サーバーは、必要に応じて起動および停止できるプラグインとして理解できます。将来的に Kingbus を拡張する際には、関連するロジックのサーバーを実装するだけで済みます。たとえば、Kafka プロトコル サーバーを実装すると、Kafka クライアントを介して Kingbus でメッセージを消費できます。

3. Kingbusコア実装

3.1 ストレージのコア実装

ストレージには 2 種類のログが存在します。 1つはラフトアルゴリズムによって生成され使用されるラフトログ(以下、ラフトログと呼ぶ)である。もう 1 つは、ユーザー タイプのログ (つまり、MySQL binlog イベント) です。ストレージの設計では、2 つのログ フォームが 1 つのログ エントリに結合されます。これらは異なるヘッダー情報によってのみ区別されます。ストレージは、次の図に示すように、データ ファイルとインデックス ファイルで構成されます。

  • セグメントのサイズは固定 (1GB) であり、追加モードでのみ書き込むことができます。名前は first_raft_index-last_raft_index で、セグメントのラフト インデックス範囲を示します。
  • 最初のセグメントのみが書き込み可能で、そのファイル名は first_raft_index-inprogress です。その他のセグメントは読み取り専用です。
  • 読み取り専用セグメントと対応するインデックス ファイルは、mmap を介して書き込まれ、読み取られます。
  • ***セグメントのインデックス コンテンツは、ディスクとメモリに同時に保存されます。インデックスを読み取るには、メモリから読み取るだけで済みます。

3.2 etcd raftライブラリの使用

Etcd raft ライブラリは、適用されたログ、コミットされたエントリ、およびその他のコンテンツを単一のスレッドで処理します。具体的な機能についてはリンク先をご参照ください。この機能の処理時間はできる限り短くする必要があります。処理時間がラフト選出時間を超えると、クラスターは再選出されます。この点には特別な注意が必要です。

3.3 Binlog Syncer のコア実装

binlog syncer の主なタスクは次のとおりです。

  • バイナリログイベントのプル
  • バイナリログイベントを解析して処理する
  • binlog イベントを raft クラスターに送信します。明らかに、パイプライン機構を使用すると、プロセス全体の処理速度を向上させることができます。 Kingbus は、各ステージを処理するために個別の goroutine を使用し、パイプラインを通じて異なるステージを接続します。 binlog syncer は binlog イベントを 1 つずつ受信するため、トランザクションの整合性を保証することはできません。 Syncer が切断された後、マスターに再接続する必要がある可能性があります。現時点では、最後の取引が未完了である可能性があります。 Binlog syncer には、トランザクションの整合性を検出する機能が必要です。 Kingbus は、MySQL ソース コードを参照して完全に実装されたトランザクション整合性解析機能を実装します。

3.4 Binlogサーバーのコア実装

binlog サーバーはマスターの機能を実装します。スレーブが binlog サーバーとのレプリケーション接続を確立すると、スレーブは関連するコマンドを送信し、binlog サーバーはこれらのコマンドに応答する必要があります。最後に、binlog イベントがスレーブに送信されます。各スレーブに対して、binlog サーバーは goroutine を開始し、raft ログを継続的に読み取り、関連するヘッダー情報を削除し、それを binlog イベントに変換して、スレーブに送信します。

4. 結論

この記事では、Kingbus の全体的なアーキテクチャ、コア コンポーネント、プロセスについて簡単に説明します。この記事を通じて、読者が Kingbus についてより包括的に理解していただければ幸いです。

<<:  瞬きする間に、情報は 17 億回更新されます。 Alibaba Cloud オープンソースのリアルタイムコンピューティングプラットフォーム

>>:  上海視聴覚教育センターはUCloudの助けを借りてクラウドレイアウトを実現し、教育情報化のリーダーになることを目指しています。

推薦する

実際のデータは、360度検索が百度よりもユーザー価値が高いことを証明している

ご存知のとおり、360 Search は現在中国で 2 番目に大きな検索エンジンであり、SEO に携...

今後10年間で最も有望なゲームジャンル

今年5月、「モバイルゲームIPの年は本当だ」という記事の最後で、テキストゲームに注目していて将来性が...

UGCモードはウェブサイト運営に新たな方向性をもたらします

今日、丁道師匠と少し話をした後、私は再びUGCモデルに注目しました。 UGC (ユーザー生成コンテン...

競合他社を顧客として扱うことで、ランキングがより高いレベルに上がります

現在、SEO実践者はますます増えており、SEOはほぼすべての業界に存在します。一部の業界では、特定の...

ケース分析: ウェブサイトのインデックスボリュームが減少した場合はどうすればよいでしょうか?

今日の話題に入る前に、今日お話しする内容をよりよく説明できるように、写真をお見せしましょう。上の写真...

インターネットマーケティングはターゲットトラフィックの増加に重点を置いています

現在、さまざまな企業がマーケティングにおいてさまざまな方法やアプローチを採用しています。インターネッ...

電子商取引調査: 地元の肉製品に重点を置くモバイル電子商取引会社 AgLocal

アグローカルホーム「電子商取引研究」は、新浪科技が立ち上げた海外の電子商取引サイトを紹介する新しいコ...

SEO 担当者は検索エンジンの進歩に喜ぶべきでしょうか、それともパニックになるべきでしょうか?

検索エンジンは SEO に対してますます友好的になってきていますが、SEO 担当者はますます不安を感...

ウェブサイトのプロモーションの観点から、ウェブマスターがウェブサイトのタイトルをどのように設定しているかを分析する

タイトルはウェブサイトの表札であり、ユーザーが検索結果にウェブサイトを入力できるようにするチャネルで...

優れた SEO 担当者に求められるものは何でしょうか?

みなさんこんにちは。私は warsion です。SEO と SEO とオンライン マーケティング プ...

ユーザーのニーズを満たす入札ページを設計する方法

ウェブサイト構築では、ウェブサイトの速度、ウェブサイトのコンテンツの品質、ウェブサイトの最適化手順な...

2回の核分裂実験の後、これらの提案と注意事項を知っておく必要があります

月収10万元の起業の夢を実現するミニプログラム起業支援プラン今年初めから、分裂はインターネット業界で...

LEE外部リンク判定はネットワーク最適化の新時代に相当する

あなたと私がまだ「頑張れ雅安」の悲しみに浸っている間にも、百度は世界を変えるペースを止めていません。...

ウェブサイト分析: レスポンシブナビゲーションメニューを設計するための 5 つのルール

概要: この記事では、より難しいレスポンシブ Web デザイン、つまりレスポンシブ ナビゲーション ...

SEOは死んではいない、ただ基準が引き上げられただけだ

Baidu の大規模なアップデートが次々と登場し、ウェブマスターの世界は混乱に陥り、検索エンジンに依...