導入 MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQL は次のレプリケーション方法をサポートしています。
この記事では主に MySQL の準同期レプリケーションについて説明します。 準同期レプリケーションの基本プロセス MySQL 準同期レプリケーションの実装は、MySQL 非同期レプリケーションに基づいています。 MySQL は、AFTER_SYNC と AFTER_COMMIT (rpl_semi_sync_master_wait_wait_point によって制御) というわずかに異なる 2 種類の半同期レプリケーションをサポートしています。 半同期レプリケーションが有効になっている場合、マスターはスレーブの応答またはタイムアウトを待ってから戻ります。スレーブがタイムアウトすると、半同期レプリケーションは非同期レプリケーションに退化します。これは、MySQL の半同期レプリケーションでも発生する問題です。この記事では、Salve がタイムアウトする状況については説明しません (非同期レプリケーションについては説明しません)。 準同期レプリケーションの基本プロセス AFTER_SYNC モード AFTER_SYNC モードは、MySQL 5.7 でサポートされている半同期レプリケーション モードであり、MySQL 5.7 のデフォルトの半同期レプリケーション モードでもあります。
準同期レプリケーションの基本プロセス AFTER_COMMIT モード MySQL 5.5 および 5.6 の半同期レプリケーションは AFTER_COMMIT のみをサポートします。
AFTER_SYNCとAFTER_COMMITの概要 AFTER_SYNC: ログがスレーブにコピーされた後、マスターは再度コミットします。 AFTER_COMMIT: マスターがコミットした後、ログがスレーブにコピーされます。 AFTER_SYNCモードでの異常状況の分析 異常事態 1: マスターがダウンした後、マスター・スレーブ切り替えが発生します。 マスターはトランザクション T を実行します。トランザクション T のバイナリログをハードディスクにフラッシュする前に、マスターがクラッシュします。スレーブがマスターにアップグレードされます。マスターが再起動されると、クラッシュリカバリによってトランザクション T がロールバックされます。プライマリ データとバックアップ データは一致しています。 マスターはトランザクション T を実行します。トランザクション T のバイナリログをハードディスクにフラッシュした後、スレーブから ACK を受信する前に、マスターがクラッシュします (保留中のログがあります)。スレーブがマスターにアップグレードされます。 2.1 スレーブはトランザクション T のバイナリログを受信していません。マスターが再起動すると、クラッシュリカバリによって保留中のログが直接送信されます。プライマリデータとバックアップデータが矛盾しています。 2.2 スレーブはトランザクション T のバイナリログを受信しました。プライマリ データとバックアップ データは一致しています。 異常事態 2: マスターがクラッシュした後、ホストが切り替わりません。例外ケース 1 の 2.1 を検討してください。 マスターが再起動すると、pendinglog が直接送信されます。この時点では、マスターとスレーブのデータは不一致です。 スレーブはマスターに接続し、非同期レプリケーションを通じてトランザクション T のバイナリログを取得します。プライマリ データとバックアップ データは一致しています。 上記の異常な状況の簡単な分析から、半同期レプリケーションでは、マスターがクラッシュして再起動し、保留中のログ (スレーブが応答していないバイナリログ) があるという特殊な状況を処理する必要があることがわかります。 マスターに障害が発生し、マスター スレーブの切り替えが実行されない状況の場合: クラッシュからの回復後、マスターはスレーブ接続を待機し、少なくとも 1 つのスレーブがコミットされたすべてのトランザクションのバイナリ ログを複製するまで複製します。 (マスターでは SHOW MASTER STATUS、スレーブでは SELECT master_pos_wait())。 マスターに障害が発生し、マスター スレーブの切り替えが実行される状況の場合: 古いマスターが再起動された後、クラッシュ回復中に pendinglog がロールバックされます。 (マスターのバイナリログのコピーされていない部分を手動で切り捨てますか?) 考える マスターが再起動した後、クラッシュ回復プロセス中に、スレーブの応答を要求しようと再試行するのではなく、pendinglog を直接コミットするのはなぜですか? MySQL の非同期レプリケーションと半同期レプリケーションはどちらもスレーブによってトリガーされ、スレーブはマスターにアクティブに接続して binlog を同期します。 マスターとスレーブの切り替えは行われず、マシンの再起動後にどのマシンがスレーブであるかを知ることはできません。 要約する MySQL の半同期レプリケーションには次の問題があります。
MySQL にはマスターとスタンバイ データの一貫性に関する問題があり、インターネット ビジネスの 7*24 高可用性サービスに影響を与えるため、大手企業は独自の「パッチ」をリリースしました。Tencent の TDSQL、WeChat の PhxSQL、Alibaba の AliSQL、NetEase の InnoSQL などです。 MySQL は、MySQL 5.7 で新しいレプリケーション モードである MySQL グループ レプリケーションを正式にリリースしました。 参考文献 MySQL 準同期レプリケーションのデータ一貫性に関する議論 MySQL 高可用性ソリューション MySQL 5.7.2 でのロスレス準同期レプリケーション 強化された準同期レプリケーション 以下もご興味があるかもしれません:
|
<<: Centos7 に PHP と Nginx をインストールする詳細なチュートリアル
>>: Vue はブラウザのパスワード記憶機能を無効にするサンプル コードを実装します
次のケースでは、これまでに学んだプロトタイプチェーンの知識ポイントを確認します。 // コンストラク...
1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...
Weibo ユーザーのフォローを一括で解除するクールな JavaScript コードWeibo には...
新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...
Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...
目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...
目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...
1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...
1. チェックステータスモジュールがインストールされているかどうかを確認します。 [root@loc...
画像をプルする docker pull season/fastdfs:1.2トラッカーを開始 doc...
目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...
このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...
問題の説明nginx を設定することで、異なるポートを介して異なる Web アプリケーションにアクセ...
文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...
怖いですね! 写真の翻訳: (内側から外側へ)最初のレイヤー:ユーザーエクスペリエンス第2層:コンテ...