分散型 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の助けを借りてクラウドレイアウトを実現し、教育情報化のリーダーになることを目指しています。

推薦する

SAPはBaicaibangのクラウド管理をサポートし、通信事業の運用コストを削減し、包括的な通信サービスを提供

本日、SAPと北京百彩邦科技有限公司(以下、「百彩邦」)は北京で調印式を開催し、新たな協力の旅を開始...

ダンダンの14年間の電子商取引の盛衰の歴史:利益と損失の両方を伴う凸凹の道

1999年に設立されたDangdang.comは、14年間の電子商取引のキャリアの中で浮き沈みを経験...

#推奨 VPS# shockhosting - $3.47/KVM/1G メモリ/20gSSD/1T トラフィック/ロサンゼルス + ニュージャージー

shockhosting の KVM 仮想 VPS はもともと高価ではなく、今回は 25% の割引が...

Googleの2つのアルゴリズムの導入後、ウェブサイトのユーザーエクスペリエンスが特に重要になる

パンダ アルゴリズムが昨年 Google によって提案されたことは誰もが知っています。その本質は、W...

locvps: 香港 cn2 vps、香港高セキュリティ VPS、米国 CN2 VPS はすべて 35% オフ、最低 29 元です。

locvps(中国の古いブランド)は現在、香港データセンターのCN2+BGP回線のVPS、高防御VP...

2018 年のクラウド コンピューティングの 4 つの意外なトレンド

2018 年は成長が加速する年となり、仮想製品によってデータ漏洩が増加し、クラウド コンピューティン...

テンセントはゲーム業界から脱却できるか?

テンセントにとってゲーム事業の意味に大きな変化があった。テンセントは3月22日の午後、通期および第4...

福建省は今年4万以上のウェブサイトを検査し、200以上の違法ウェブサイトを閉鎖した。

福建省が今年3月に開始した、インターネットやモバイルメディアにおけるわいせつ、ポルノ、下品な情報の流...

初心者でも毎日高品質なソフト記事を書けるようになる方法

ソフトコンテンツマーケティングは非常に効果的なマーケティング手法ですが、非常に難しいものでもあります...

ウェブサイトのおすすめ: SmartAsset は、どんな家が買えるか計算するのに役立ちます

SmartAsset: 購入可能な住宅の種類を計算するのに役立ちます家と車を買うことは多くの若者の目...

ウェブサイトのコンバージョン率を効果的に向上させる5つの要素

簡単に言えば、従来の中小企業がオンラインマーケティングを行う目的は、インターネットを通じて自社の露出...

高品質な動画サイトのコンテンツを拡充するスキルについて、どれだけご存知ですか?

おそらく、多くの動画サイトの運営者は、動画サイトのコンテンツの編集や更新についても心配しているでしょ...

並列および分散コンピューティングの原理

クラウド コンピューティングは、IT インフラストラクチャ、サービス、およびアプリケーションのより有...

ロングテールキーワードの意味とその実践を再確認する

ロングテール キーワードは、現在の SEO 分野で広く使用されています。現在の SEO 実践者も、ウ...

毛宏亮:IDCホスティングプロバイダーの品質はサービスによって決まる

みなさんこんにちは。私はみなさんの古い友人です。今日は、IDC の長所と短所についてお話ししたいと思...