MySQL半同期レプリケーションの構築と構成原理

5650 ワード

半同期レプリケーション:
半同期レプリケーションとはデフォルトでは、MySQLのレプリケーションは非同期であることがわかります.これは、プライマリ・サーバとセカンダリ・サーバが独立していることを意味します.非同期レプリケーションは、プライマリ・サーバが更新されたデータをバイナリ・ログ・ファイルに書き込むと、更新されたデータがサーバからコピーされたかどうかを検証するのを待つことなく、他のトランザクションを自由に処理できるため、最適なパフォーマンスを提供します.しかし、プライマリ・サーバまたはセカンダリ・サーバで障害が発生すると、プライマリ・セカンダリ・データが一致せず、リカバリ時にデータが失われる可能性もあります.
半同期レプリケーションはMySQL 5からである.5は、プライマリ・サーバとアクセス・チェーンの少なくとも1台のスレーブ・サーバ間のデータの一貫性と冗長性を確保する半同期レプリケーション機能を導入し始めた.この構成構造では、1台のプライマリ・サーバとその多くのセカンダリ・サーバが構成されているため、レプリケーション・トポロジでは、少なくとも1台のセカンダリ・サーバが親プライマリ・サーバでトランザクションを行う前に、更新が受信され、リレー・ログ(Relay Log)に書き込まれたことを確認する必要があります.タイムアウトが発生した場合、ソース・プライマリ・サーバは、半同期レプリケーション・モードに設定された少なくとも1台のサーバからタイムリーに情報を受信するまで、非同期レプリケーション・モードに一時的に切り替えて再レプリケーションする必要があります.
次に、通常のレプリケーションから半同期レプリケーションに変換する方法を見てみましょう.一主二従のGTIDレプリケーション環境を構築したと仮定します.
MySQL1:172.16.16.35:3306
MySQL2:172.16.16.35:3307
MySQL3:172.16.16.34:3306
この環境は私が前にMHAをテストする時すでに構築したので、どのように普通のGTIDの複製環境を構築するかを強調していません.次にどのようにインストールするかを見てみましょう.
(1)プラグインをインストールし、3台のMySQLサーバーが実行する.
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

インストールに成功したかどうかは、次の文で確認できます.
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
| rpl_semi_sync_slave | ACTIVE |
+----------------------+---------------+
2 rows in set (0.00 sec)

3台のMySQLプロファイルに次のパラメータを追加します.
rpl_semi_sync_master_enabled=1 #       
rpl_semi_sync_slave_enabled=on; #       

その後、semisync_をインストールせずにデータベースを再起動します.master.soではこのパラメータを認識できないので、このパラメータはインストールが完了してから再起動する必要があります.
(2)再起動が完了すると、デフォルトでは半同期レプリケーションが行われます.半同期に関するパラメータを見てみましょう.
mysql> show variables like 'rpl_se%';+-------------------------------------------+------------+| Variable_name | Value |+-------------------------------------------+------------+| rpl_semi_sync_master_enabled | ON || rpl_semi_sync_master_timeout | 10000 || rpl_semi_sync_master_trace_level | 32 || rpl_semi_sync_master_wait_for_slave_count | 1 || rpl_semi_sync_master_wait_no_slave | ON || rpl_semi_sync_master_wait_point | AFTER_SYNC || rpl_semi_sync_slave_enabled | ON || rpl_semi_sync_slave_trace_level | 32 |+-------------------------------------------+------------+8 rows in set (0.00 sec)
 
次に、これらのパラメータの具体的な意味を見てみましょう.
rpl_semi_sync_master_enabled:メインライブラリが半同期レプリケーションを開くかどうか
rpl_semi_sync_master_timeout:ミリ秒単位で、プライマリ・ライブラリがライブラリACKの実践からこの値を超えるのを待つと、自動的に非同期レプリケーションに変換されます.
rpl_semi_sync_master_trace_level:masterのtraceレベルは、4つ(1,16,32,64)に分けられ、それぞれ異なる情報が記録され、32はより詳細なネットワーク遅延などの情報を出力することができ、デフォルト値でもある
rpl_semi_sync_master_wait_for_slave_count:少なくともN個のslaveがログを受信し,1つのプライマリが複数の場合,1つのslaveのACKがプライマリライブラリに返されるとcommitが行われる.
rpl_semi_sync_master_wait_no_slave:デフォルトはONで、セミシンクロレプリケーションが非同期レプリケーションに変換された後、ライブラリのログからマスターライブラリに追いつくと自動的にセミシンクロレプリケーションに変換され、OFFに設定されていると変換されません.
rpl_semi_sync_slave_enabled:ライブラリから半同期レプリケーション機能を開くかどうか
rpl_semi_sync_slave_trace_レベル:traceレベル
rpl_semi_sync_master_wait_ポイント:MySQL 5です.7新機能、2つの値を設定できるAFTER_SYNCとAFTER_COMMIT,AFTER_COMMITモードではmasterが各トランザクションをbinlogに書き込み、slaveに渡してディスクにリフレッシュし、メインライブラリがトランザクションをコミットします.masterはslaveフィードバックがrelay logを受信するのを待っており、ACKを受信した後にmasterだけがcommit OK結果をクライアントにフィードバックする.AFTER_SYNCの場合、masterは各トランザクションをbinlogに書き込み、slaveに渡してディスク(relay log)にリフレッシュします.masterはslaveフィードバックがrelay logのackを受信するのを待ってから、トランザクションをコミットし、commit OK結果をクライアントに返します.プライマリ・ライブラリcrashであっても、プライマリ・ライブラリでコミットされたすべてのトランザクションがslaveのrelay logに同期されていることを保証します.デフォルトのAFTERを使用することをお勧めします.SYNCの場合、パフォーマンスを向上させ、待ち時間を短縮できます.
 
またMySQL 5.7の半同期レプリケーションではdump threadによるbinlogの反発ロックに加えて,高同時環境でbinlogをシリアル読み出しする問題を解決した.
転載先:https://www.cnblogs.com/shengdimaya/p/6959021.html