MySQL アクティブ-アクティブ同期レプリケーションの 4 つのソリューションの詳細な説明

MySQL アクティブ-アクティブ同期レプリケーションの 4 つのソリューションの詳細な説明

リアルタイム データ同期の核心は、ログに基づいて実装することであり、これにより、準リアルタイム データ同期を実現できます。ログ ベースの実装では、データベース自体に設計と実装における追加の制約は必要ありません。

MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューション

これは一般的なソリューションです。一般的に、このアーキテクチャは中小規模のプロジェクトの場合に最も便利です。

2 つのノードは、シンプルなデュアル マスター モードを採用し、専用回線接続を使用できます。master_A ノードに障害が発生すると、アプリケーション接続はすぐに master_B ノードに切り替えられ、その逆も同様です。注意すべき点がいくつかあります。スプリット ブレインの場合、2 つのノードが同じデータを書き込んで競合が発生します。同時に、2 つのノードの auto_increment_increment (自動インクリメント ステップ) と auto_increment_offset (自動インクリメント開始値) が異なる値に設定されます。目的は、マスターノードが予期せずクラッシュしたときに、一部のバイナリログがスレーブにコピーされずにアプリケーションが実行され、スレーブの新しく書き込まれた自動インクリメント ID が元のマスターと競合するのを回避することです。そのため、最初からずらして配置されています。もちろん、マスターとスレーブの自動インクリメント ID の競合を解決するための適切なフォールト トレラント メカニズムがあれば、これも回避できます。新しいデータ バージョン 5.7+ を使用すると、マルチスレッド レプリケーションを使用して、レプリケーションの遅延を大幅に削減できます。同時に、レプリケーションの遅延に特に敏感な別の代替ソリューションは、半同期半同期レプリケーションです。これは基本的に遅延はありませんが、特に双方向書き込みでは、トランザクションの同時実行パフォーマンスが大幅に低下するため、決定する前に包括的な評価が必要です。

Galeraレプリケーションソリューションに基づく

Galera は、Codership が提供するマルチマスター データ同期およびレプリケーション メカニズムです。複数のノード間でデータ同期レプリケーションと読み取り/書き込みを実現し、データベース サービスの高可用性とデータの一貫性を確保できます。Galera に基づく高可用性ソリューションには、主に MariaDB Galera Cluster と Percona XtraDB Cluster (略して PXC) があります。

現在、PXC はより広く使用されています。データの一貫性が厳格で、特に電子商取引アプリケーションに適しています。ただし、PXC にも制限があります。同時トランザクション量が多い場合は、ネットワーク遅延を減らすために InfiniBand ネットワークを使用することをお勧めします。PXC には書き込み拡張とショートボード効果があるため、同時効率が大幅に低下します。半同期半同期レプリケーションと同様に、Gelera は実際には 3 つのノードしか使用できず、ネットワーク ジッターによるパフォーマンスと安定性の問題が常態化しています。

グループレプリケーションソリューションに基づく

MGRはMySQLが正式にリリースした高可用性ソリューションで、Paxosプロトコルを通じてデータベースクラスタノードデータに強力な一貫性保証を提供します。ネイティブレプリケーションテクノロジに基づいており、プラグインとして提供されます。クラスタ間のすべてのノードに書き込みが可能で、単一クラスタの書き込みパフォーマンスを解決します。すべてのノードが読み取りと書き込みが可能で、ネットワークパーティションによるブレインスプリットの問題を解決し、複製されたデータの信頼性を向上させます。しかし、現実はまだ少し残酷です。現時点では、試した人は多くありません。同時に、InnoDBテーブルのみをサポートしており、書き込みセットの競合検出のために各テーブルにプライマリキーが必要です。GTID機能をオンにし、プライマリ選択と書き込みセットのバイナリログ形式をROWに設定する必要があります。

COMMIT は、スナップショット トランザクション分離レベルの障害シナリオと同様に、障害を引き起こす可能性があります。現在、MGR クラスターは最大 9 ノードをサポートし、外部キーとセーブ ポイント機能をサポートせず、グローバル制約検出と部分ロールバックを実行できず、バイナリ ログは binlog イベント チェックサムをサポートしていません。

運河ソリューションに基づく

データベースのリアルタイム同期のために、Alibaba は分散データベースの同期レプリケーションを実装する特別なオープンソース プロジェクト Otter を持っています。その中心となるアイデアは、データベースの増分データ ログを取得することで、準リアルタイムの同期レプリケーションを実行することです。そのため、Otter 自体は、増分データベース同期ログ情報の取得に重点を置いた別のオープンソース プロジェクトである Canal に依存しています。

現在、Otter の焦点は、MySQL 間のデータベース同期とレプリケーションを実現することにあります。基本的には、同様のテクノロジを使用して、2 つの MySQL データベース間の双方向同期データベース レプリケーションを実現します。この双方向性自体は、A->B または B->A に移動できることを意味し、特定の時点では単方向であることに注意してください。

マスタースレーブレプリケーションは 3 つのステップに分かれています。

マスターはバイナリ ログに変更を記録します (これらの記録はバイナリ ログ イベントと呼ばれ、show binlog events で表示できます)。

スレーブはマスターのバイナリ ログ イベントをリレー ログにコピーします。

スレーブはリレー ログ内のイベントをやり直し、データを自身のものに反映するように変更します。

運河の原理は比較的単純です。

Canal は MySQL スレーブの対話型プロトコルをシミュレートし、MySQL スレーブのふりをして、ダンプ プロトコルを MySQL マスターに送信します。

MySQL マスターはダンプ要求を受信し、バイナリ ログをスレーブ (チャネル) にプッシュし始めます。
Canalはバイナリログオブジェクト(元々はバイトストリーム)を解析します

詳細については、https://github.com/alibaba/canal をご覧ください。

要約する

上記は、編集者が紹介したMySQLアクティブ-アクティブ同期レプリケーションの4つのソリューションです。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの原理と設定方法(詳細)
  • MySQLでテーブル構造をコピーする方法の概要
  • テーブル構造と内容を別のテーブルにコピーする MySQL SQL ステートメント
  • MySQLデータベーステーブルを素早くコピーする方法
  • MySQL マスタースレーブレプリケーション(マスタースレーブ)の実際の動作例
  • MySQL マスタースレーブ同期レプリケーションエラーを解決する例
  • MySQL のデータベース間テーブルレプリケーションの例 (同じ IP アドレス内)
  • MySQL同期レプリケーション構築方法ガイドの詳細な手順
  • MySQLデータベースのレプリケーション方法を簡単に説明します
  • MySQL データベースの双方向ミラーリング、循環ミラーリング (レプリケーション)
  • MySQL レプリケーションの原理と実際のアプリケーションの詳細な説明

<<:  Centos7 に mysql と mysqlclient をインストールする際に遭遇する落とし穴の概要

>>:  vue-tableは追加と削除を実装します

推薦する

MySQL の where と on の違いと、いつ使用するか

以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生...

Reactは無限ループスクロール情報を実装する

この記事では、無限ループスクロールを実現するためのReactの具体的なコードを参考までに紹介します。...

CSS 擬似要素::マーカーの詳細な説明

この記事では、CSS ::markerの興味深い疑似要素を紹介します。これを使用すると、テキスト番号...

CSSボックスの表示/非表示とトップレイヤーの実装コード

.imgbox{ 幅: 1200ピクセル; 高さ: 612px; 右マージン: 自動; 左マージン...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

Tomcat コアコンポーネントとアプリケーションアーキテクチャの詳細な説明

目次Web コンテナとは何ですか? HTTP の性質HTTP リクエスト応答の例クッキーとセッション...

MySQL ログトリガー実装コード

SQL文 ドロップトリガー もし sys_menu_edit が存在します。 各行のsys_menu...

リソースアップロード機能を実現するための SpringBoot+nginx の詳細な例

最近、画像、ビデオ、CSS/JS などの静的リソースを配置するために nginx を使用する方法を学...

Web Storage APIの使用に関する簡単な説明

目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

カレンダーウィジェットのネイティブJS実装

この記事の例では、カレンダーウィジェットを実装するためのjsの具体的なコードを参考までに共有していま...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

MySQLで時間を判定条件として使用する方法

背景: 開発プロセスでは、現在の月、現在の日、現在の時間、今後数日など、時間を判断条件としてデータを...

JavaScriptで配列を作成する方法の詳細な説明

目次JavaScript で配列を作成する配列の使用配列を分割文字列に変換する配列に要素を追加する配...