ホームページ データベース mysql チュートリアル MySQL Binlog ストレージ システムのアーキテクチャを設計する方法

MySQL Binlog ストレージ システムのアーキテクチャを設計する方法

Jun 02, 2023 pm 10:10 PM
mysql binlog

1. キングバスの紹介

1.1 キングバスとは何ですか?

Kingbus は、raft の強力な整合性プロトコルに基づいた分散 MySQL バイログ ストレージ システムです。 MySQL スレーブとして機能して、実際のマスターからバイナリログを同期し、分散クラスターに保存できます。同時に、クラスター内のバイナリログを他のスレーブに同期するための MySQL マスターとしても機能します。 kingbus には次の特徴があります:

MySQL レプリケーション プロトコルと互換性があり、Gtid を介してマスター上のバイナリ ログを同期し、スレーブが Gtid を介してキングバスからバイナリ ログを取得することをサポートします。

リージョン間のデータ レプリケーション。Kingbus は、raft プロトコルを介したリージョン間のデータ レプリケーションをサポートします。クラスターに書き込まれるバイナリログ データは、複数のノード間で強い一貫性があることが保証され、バイナリログの順序はマスター上の順序と完全に一致します。

高可用性。Kingbus は Raft の強力なコンセンサス プロトコルに基づいて構築されているため、クラスター内のノードの半分以上が存続している場合、ビンログのプルおよびプッシュ サービス全体の高可用性を実現できます。

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

Kingbus はマスターのネットワーク送信トラフィックを削減できます。 1 つのマスターと複数のスレーブを持つレプリケーション トポロジでは、マスターは各スレーブに binlog を送信する必要があります。スレーブが多すぎると、ネットワーク トラフィックがマスターのネットワーク カードの上限に達する可能性があります。たとえば、マスターが大きなテーブルやオンライン DDL の削除などの操作を実行すると、大量のバイナリログ イベントが瞬時に生成される可能性があり、10 台のスレーブがマスターに接続されている場合、マスター上のネットワーク カード トラフィックは 10 倍に増幅されます。 。マスターがギガビット ネットワーク カードを使用している場合、10MB/秒を超えるトラフィックが生成されると、ネットワーク カードがいっぱいになる可能性があります。 kingbus 経由でマスターに接続すると、スレーブを複数のマシンに分散して送信トラフィックのバランスをとることができます。

マスター フェイルオーバー プロセスを簡素化するには、キングバスに接続されているスレーブをマスターに昇格させ、キングバスを新しいマスターにリダイレクトするだけで済みます。他のスレーブは引き続きキングバスに接続されており、レプリケーション トポロジは変更されません。

マスターがバイナリログファイルを保存するために使用するスペースを節約します。一般に、MySQL はより高価な SSD を使用するため、binlog ファイルが多くのスペースを占有する場合は、MySQL に保存されるデータを減らす必要があります。すべてのビンログを kingbus

に保存することで、マスターに保存されるビンログ ファイルの数を減らすことができます。 異種レプリケーションをサポートします。 Alibaba のオープンソース Canal を介して kingbus に接続します。kingbus は継続的に binlog を canal にプッシュします。canal は binlog を受信し、それを Kafka メッセージ キューにプッシュし、最後に HBase に保存します。ビジネス部門は Hive を介して SQL を直接記述し、リアルタイムを実現します。ビジネスの分析。

2. Kingbus の全体的なアーキテクチャ

kingbus の全体的な構造を次の図に示します。 ストレージは raft ログ エントリとメタデータの保存を担当します。Kingbus では、raft ログと mysql binlog は統合されています。これらは異なるヘッダー情報によって区別されます。raft ログのデータ部分は binlog イベントであるため、2 つのタイプを保存する必要はありませんログを個別に保存できるので、保管スペースを節約できます。なぜなら、kingbus は、raft ノードの投票情報やいくつかの特別な binlog イベント (FORMAT_DESCRIPTION_EVENT) の特定の内容など、いくつかのメタ情報を保存する必要があるからです。

Raft は、etcd raft ライブラリを使用して、kingbus クラスターのリード選出、ログ レプリケーション、およびその他の機能を複製します。

Binlog syncer は Raft クラスターの Lead ノードでのみ実行され、クラスター全体で 1 つのみの syncer が存在します。シンサーはスレーブであるふりをして、マスターへのマスター/スレーブ レプリケーション接続を確立します。マスターは、シンサーによって送信された Executed_gtid_set に基づいて、シンサーが受け入れた binlog イベントをフィルターし、シンサーが受け入れていない binlog イベントのみを送信します。このレプリケーション プロトコルは、MySQL のマスター/スレーブ レプリケーション メカニズムと完全な互換性があります。 syncer は binlog イベントを受信すると、binlog イベント タイプに従っていくつかの処理を実行し、binlog イベントをメッセージにカプセル化して raft クラスターに送信します。 raft アルゴリズムを使用すると、このバイナリログ イベントを複数のノードに保存し、強い一貫性を実現できます。

binlog サーバーは、レプリケーション プロトコルを実装するマスターです。実際のスレーブは、binlog サーバーによって監視されているポートに接続できます。binlog サーバーは、binlog イベントをスレーブに送信します。binlog イベントの送信プロセス全体は、MySQL を参照して実装されます。レプリケーションプロトコル。 binlog イベントがスレーブに送信されない場合、binlog サーバーは定期的にハートビート イベントをスレーブに送信して、レプリケーション接続を維持します。

API サーバーは、以下を含む kingbus クラスター全体の管理を担当します:

Raft クラスターのメンバーシップ操作、クラスターのステータスの表示、ノードの追加、ノードの削除、ノード情報の更新など。

binlog syncer 関連の操作: binlog syncer を開始し、binlog syncer を停止し、binlog syncer のステータスを確認します。

binlog サーバー関連の操作、binlog サーバーの開始、binlog サーバーの停止、および binlog サーバーのステータスの確認。サーバー層の各種異常はraft層には影響せず、サーバーはオンデマンドで起動・停止できるプラグインとして捉えることができます。将来的に KingBus を拡張する場合は、関連するロジックを備えたサーバーを実装するだけで済みます。たとえば、kafka プロトコル サーバーを実装すると、kafka クライアントを介して kingbus 内のメッセージを消費できます。

3.kingbus コアの実装

3.1 ストレージのコア実装

ストレージには 2 つのログ形式があり、1 つは raft アルゴリズムによって生成および使用される raft ログ (以下、raft ログと呼びます)、もう 1 つはユーザー形式のログ (つまり、mysql binlog イベント) です。 。ストレージの設計では、2 つのログ フォームが 1 つのログ エントリに結合されます。ヘッダー情報の違いによってのみ区別されます。次の図に示すように、ストレージはデータ ファイルとインデックス ファイルで構成されます。 セグメントは固定サイズ(1GB)で追加書き込みのみ可能で、名前はfirst_raft_index-last_raft_indexとなり、セグメントのraftインデックスの範囲を示します。

最後のセグメントのみ書き込み可能で、そのファイル名は first_raft_index-inprogress であり、他のセグメントは読み取り専用です。

読み取り専用セグメントと対応するインデックス ファイルは、mmap を通じて書き込みおよび読み取りが行われます。

最後のセグメントのインデックス コンテンツは、ディスクとメモリの両方に保存されます。インデックスの読み取りには、メモリからの読み取りのみが必要です。

3.2 etcd raft ライブラリの使用

Etcd raft ライブラリは、適用されたログ、コミットされたエントリなどを処理するときはシングルスレッドです。特定の関数については、リンクを参照してください。この関数の処理時間は、できるだけ短くする必要があります。処理時間がラフト選出時間を超えると、クラスターが再選出されます。この点は特に注意が必要です。

3.3 binlog syncerのコア実装

binlog syncer の主なジョブは次のとおりです:

バイナリログイベントをプルします

バイナリログイベントを解析して処理します

binlog イベントを raft クラスターに送信します。パイプライン機構を使用することでプロセス全体の処理速度を向上させることができるのは当然ですが、Kingbus では各ステージの処理に別個のゴルーチンを使用し、異なるステージをパイプラインで接続します。 binlog syncer は binlog イベントを 1 つずつ受信するため、syncer はトランザクションの整合性を保証できません。syncer がハングした後、マスターに再接続する必要がある可能性があります。この時点で、最後のトランザクションが不完全である可能性があります。binlog syncer は、トランザクションが完了していないことを確認する必要があります。 kingbus は、独自の機能を備えたトランザクション整合性分析機能を実装しており、これは MySQL ソース コードを参照して完全に実装されています。

3.4 binlog サーバーのコア実装

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

以上がMySQL Binlog ストレージ システムのアーキテクチャを設計する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース Apr 18, 2025 am 07:09 AM

小さなアプリケーションを開発する際には、軽量データベース操作ライブラリをすばやく統合する必要性という厄介な問題に遭遇しました。複数のライブラリを試した後、私はそれらがあまりにも多くの機能を持っているか、あまり互換性がないかのどちらかであることがわかりました。最終的に、私は問題を完全に解決したYii2に基づいた単純化されたバージョンであるMinii/DBを見つけました。

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

初心者向けのMySQL:データベース管理を開始します 初心者向けのMySQL:データベース管理を開始します Apr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

See all articles