mysql5.7強化されたハーフ同期レプリケーションのオン
10887 ワード
非同期レプリケーション環境から事前に構築し、mysqlをオンにして半同期を強化することを前提としています.
環境:mysql 5.7.26主従非同期レプリケーションは既に導入されている.
1.プラグインのロード
マスターとslaveですべて実行することを推奨します(MHAの主従自動切替の環境を考慮します)
メインライブラリにsemisync_をインストールするmaster.soとsemisync_slave.soプラグイン:
linuxサーバ上のmasterライブラリ実行:
linuxサーバ上のslaveライブラリ実行:
ヒント:slaveで半同期を強化するプラグインがすでに存在するため、エラーが発生しました.理由:masterにハーフ同期を強化したプラグインをインストールすると自動的にslaveライブラリに同期します
2.slaveとmasterオープン強化半同期パラメータ
生産環境ではslaveライブラリでのオープン強化半同期パラメータを推奨
ここでマスターのエラーログを観察します:ヒントSemi-sync replicationレプリケーションを開きました
次にmasterで強化半同期パラメータをオンにします
3.MySQL公式サイトの構成方法
公式要求masterとslaveの/etc/my.cnfは次のパラメータをオンにします.
マスターとslaveデータベースを再起動します.
4.実際の生産環境の配置方法
もちろん実際の操作ではパラメータrplを推奨しません.semi_sync_master_enabledとrpl_semi_sync_slave_enabledはプロファイルに直接書き込まれます.原因:パラメータをmyに加える.cnfプロファイルの場合、slaveライブラリがマウントされ、slaveライブラリが再起動されるか、slaveライブラリが再起動されると、自動的に強化された半同期レプリケーションがオンになります.slaveライブラリがmasterライブラリを切断する時間が長い場合は、mysql非同期レプリケーションを開き、slaveライブラリがmasterライブラリに追いついた後、強化された半同期レプリケーションを開くことが望ましい.これでマスターライブラリをドラッグすることはありません.エンハンスハーフ同期レプリケーションを直接オンにすると、プライマリ・ライブラリが破棄されます.rpl_semi_sync_master_timeout=1000##1 s非同期レプリケーションに変換されたタイムアウトパラメータは、プロファイルに書き込むことができます.
5.プレゼンテーション強化半同期タイムアウトがクローズされました
プレゼンテーションの強化された半同期レプリケーションは、設定された時間を超えてオフになります.
マスターでタイムアウト時間を設定する
slaveでio_を停止threadスレッド
次に、masterライブラリからテストライブラリを削除して、強化された半同期クローズを実証します.
カードシールドの20 s期間中、masterライブラリ上でshow proccesslistが実行され、masterライブラリがslaveのsemi-syncのackの応答を待っていることが分かった.
マスターライブラリのエラーログを表示すると、強化された半同期レプリケーションが閉じられます.
マスターライブラリで設定した20 sタイムアウト時間を超えると、エンハンスメント半同期コピーが閉じられます.Waiting for semi-sync ACK from slave消失
次にmasterでtest 01ライブラリを削除するとカードシールドが表示されなくなり、エンハンス半同期レプリケーションが閉じられたことを示します.
mysql> drop database test01; Query OK,2 rows affected(0.00 sec)現在の強化された半同期レプリケーションのいくつかのslave clientがmaserに表示され、clientリンクがないことがわかりました
slaveでio_をオンにしますthread
マスターライブラリのエラーログを表示するには、次の手順に従います.
ヒント強化半同期がオンになりました.
マスターは、ハーフ同期リンクのステータスを表示するために1つ追加しました.
6.masterライブラリエラーログの変化を観察する
6.1 slaveライブラリはioスレッドを閉じ、半同期レプリケーションを閉じてからslaveのio_を開くthreadスレッド
マスターライブラリのエラーログを確認します.
6.2 slaveライブラリはioスレッドを閉じ、20 s待ってから半同期レプリケーションを閉じ、slaveのio_を開きます.threadスレッド
マスターライブラリのエラーログを確認します.
6.1と6.2のエラーログがまだ異なることを発見しました
7.ケース
オンラインで実行されているMySQL拡張ハーフ同期レプリケーションアーキテクチャで、slaveライブラリが1台停止した場合、元の拡張ハーフ同期レプリケーションアーキテクチャにどのように正しく再追加すればいいですか?
正しい方法は次のとおりです.
ここまでプレゼンテーションして、伝言を歓迎して一緒に勉強を交流します.
環境:mysql 5.7.26主従非同期レプリケーションは既に導入されている.
1.プラグインのロード
マスターとslaveですべて実行することを推奨します(MHAの主従自動切替の環境を考慮します)
メインライブラリにsemisync_をインストールするmaster.soとsemisync_slave.soプラグイン:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
linuxサーバ上のmasterライブラリ実行:
root@localhost [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (4.52 sec)
root@localhost [(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.07 sec)
linuxサーバ上のslaveライブラリ実行:
root@localhost [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1125 (HY000): Function 'rpl_semi_sync_master' already exists
root@localhost [(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
ERROR 1125 (HY000): Function 'rpl_semi_sync_slave' already exists
root@localhost [(none)]>
ヒント:slaveで半同期を強化するプラグインがすでに存在するため、エラーが発生しました.理由:masterにハーフ同期を強化したプラグインをインストールすると自動的にslaveライブラリに同期します
2.slaveとmasterオープン強化半同期パラメータ
生産環境ではslaveライブラリでのオープン強化半同期パラメータを推奨
set global rpl_semi_sync_slave_enabled =1;
stop slave io_thread;start slave io_thread;
ここでマスターのエラーログを観察します:ヒントSemi-sync replicationレプリケーションを開きました
2019-06-16T20:31:28.923731+08:00 718 [Note] While initializing dump thread for slave with UUID <7659cf56-8e81-11e9-bcbd-842b2b5999d9>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(717).
2019-06-16T20:31:28.923838+08:00 717 [Note] Stop asynchronous binlog_dump to slave (server_id: 113306)
2019-06-16T20:31:28.923951+08:00 718 [Note] Start binlog_dump to master_thread_id(718) slave_server(113306), pos(, 4)
2019-06-16T20:31:28.923984+08:00 718 [Note] Start semi-sync binlog_dump to slave (server_id: 113306), pos(, 4)
2019-06-16T20:31:29.189007+08:00 718 [Note] Semi-sync replication switched ON at (mysql-bin.000005, 852045921)
次にmasterで強化半同期パラメータをオンにします
set global rpl_semi_sync_master_enabled =1
set global rpl_semi_sync_master_timeout =1000
3.MySQL公式サイトの構成方法
公式要求masterとslaveの/etc/my.cnfは次のパラメータをオンにします.
rpl_semi_sync_master_enabled =1 # 0
rpl_semi_sync_slave_enabled =1 # 0
rpl_semi_sync_master_timeout =1000 # 1000(1 second) 1s ,
rpl_semi_sync_master_wait_for_slave_count=N
plugin_load_add =semisync_master.so #
plugin_load_add =semisync_slave.so #
マスターとslaveデータベースを再起動します.
4.実際の生産環境の配置方法
もちろん実際の操作ではパラメータrplを推奨しません.semi_sync_master_enabledとrpl_semi_sync_slave_enabledはプロファイルに直接書き込まれます.原因:パラメータをmyに加える.cnfプロファイルの場合、slaveライブラリがマウントされ、slaveライブラリが再起動されるか、slaveライブラリが再起動されると、自動的に強化された半同期レプリケーションがオンになります.slaveライブラリがmasterライブラリを切断する時間が長い場合は、mysql非同期レプリケーションを開き、slaveライブラリがmasterライブラリに追いついた後、強化された半同期レプリケーションを開くことが望ましい.これでマスターライブラリをドラッグすることはありません.エンハンスハーフ同期レプリケーションを直接オンにすると、プライマリ・ライブラリが破棄されます.rpl_semi_sync_master_timeout=1000##1 s非同期レプリケーションに変換されたタイムアウトパラメータは、プロファイルに書き込むことができます.
5.プレゼンテーション強化半同期タイムアウトがクローズされました
プレゼンテーションの強化された半同期レプリケーションは、設定された時間を超えてオフになります.
マスターでタイムアウト時間を設定する
mysql> set global rpl_semi_sync_master_timeout=20000; ## 20s
slaveでio_を停止threadスレッド
mysql> stop slave io_thread;
次に、masterライブラリからテストライブラリを削除して、強化された半同期クローズを実証します.
mysql> drop database test02; ## test02 20s 。
Query OK, 0 rows affected (20.00 sec)
カードシールドの20 s期間中、masterライブラリ上でshow proccesslistが実行され、masterライブラリがslaveのsemi-syncのackの応答を待っていることが分かった.
mysql> show processlist;
+-----+-----------------+-----------+------+---------+--------+--------------------------------------+----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-----------------+-----------+------+---------+--------+--------------------------------------+----------------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 185099 | Waiting on empty queue | NULL |
| 700 | root | localhost | NULL | Query | 3 | Waiting for semi-sync ACK from slave | drop database test02 |
| 703 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 709 | root | localhost | NULL | Sleep | 999 | | NULL |
+-----+-----------------+-----------+------+---------+--------+--------------------------------------+----------------------+
4 rows in set (0.00 sec)
マスターライブラリのエラーログを表示すると、強化された半同期レプリケーションが閉じられます.
2019-06-16T18:58:38.249020+08:00 0 [ERROR] ./mysqld: Got an error reading communication packets ### slave stop slave io_thread
2019-06-16T18:59:14.870329+08:00 711 [ERROR] Semi-sync master failed on net_flush() before waiting for slave reply
2019-06-16T18:59:14.870409+08:00 711 [Note] Stop semi-sync binlog_dump to slave (server_id: 113306)
2019-06-16T18:59:14.870469+08:00 711 [Note] Aborted connection 711 to db: 'unconnected' user: 'rept' host: '192.168.0.11' (Found net error)
2019-06-16T18:59:34.870253+08:00 703 [Warning] Timeout waiting for reply of binlog (file: mysql-bin.000004, pos: 422036), semi-sync up to file mysql-bin.000004, position 421882.
2019-06-16T18:59:34.870298+08:00 703 [Note] Semi-sync replication switched OFF.
マスターライブラリで設定した20 sタイムアウト時間を超えると、エンハンスメント半同期コピーが閉じられます.Waiting for semi-sync ACK from slave消失
mysql> show processlist;
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 185120 | Waiting on empty queue | NULL |
| 700 | root | localhost | NULL | Sleep | 4 | | NULL |
| 703 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 709 | root | localhost | NULL | Sleep | 1020 | | NULL |
+-----+-----------------+-----------+------+---------+--------+------------------------+------------------+
4 rows in set (0.00 sec)
次にmasterでtest 01ライブラリを削除するとカードシールドが表示されなくなり、エンハンス半同期レプリケーションが閉じられたことを示します.
mysql> drop database test01; Query OK,2 rows affected(0.00 sec)現在の強化された半同期レプリケーションのいくつかのslave clientがmaserに表示され、clientリンクがないことがわかりました
mysql> show global status like "Rpl_semi_sync_master_clients";
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
+------------------------------+-------+
1 row in set (0.01 sec)
slaveでio_をオンにしますthread
mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
マスターライブラリのエラーログを表示するには、次の手順に従います.
2019-06-16T19:10:46.656964+08:00 713 [Note] Start binlog_dump to master_thread_id(713) slave_server(113306), pos(, 4)
2019-06-16T19:10:46.657003+08:00 713 [Note] Start semi-sync binlog_dump to slave (server_id: 113306), pos(, 4)
2019-06-16T19:10:46.670872+08:00 0 [Note] Semi-sync replication switched ON at (mysql-bin.000004, 422366)
ヒント強化半同期がオンになりました.
マスターは、ハーフ同期リンクのステータスを表示するために1つ追加しました.
mysql> show global status like "Rpl_semi_sync_master_clients";
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
+------------------------------+-------+
1 row in set (0.00 sec)
mysql>
6.masterライブラリエラーログの変化を観察する
6.1 slaveライブラリはioスレッドを閉じ、半同期レプリケーションを閉じてからslaveのio_を開くthreadスレッド
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)
mysql> set global rpl_semi_sync_slave_enabled=0 ;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
mysql>
マスターライブラリのエラーログを確認します.
2019-06-16T20:35:14.463978+08:00 0 [ERROR] ./mysqld: Got an error reading communication packets
2019-06-16T20:35:44.309080+08:00 719 [Note] While initializing dump thread for slave with UUID <7659cf56-8e81-11e9-bcbd-842b2b5999d9>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(718).
2019-06-16T20:35:44.309252+08:00 718 [Note] Stop semi-sync binlog_dump to slave (server_id: 113306)
2019-06-16T20:35:44.309724+08:00 719 [Note] Start binlog_dump to master_thread_id(719) slave_server(113306), pos(, 4)
2019-06-16T20:35:44.309740+08:00 719 [Note] Start asynchronous binlog_dump to slave (server_id: 113306), pos(, 4)
6.2 slaveライブラリはioスレッドを閉じ、20 s待ってから半同期レプリケーションを閉じ、slaveのio_を開きます.threadスレッド
マスターライブラリのエラーログを確認します.
2019-06-16T20:39:18.806715+08:00 0 [ERROR] ./mysqld: Got an error reading communication packets
2019-06-16T20:39:58.854194+08:00 720 [Note] Stop semi-sync binlog_dump to slave (server_id: 113306)
2019-06-16T20:39:58.854305+08:00 720 [Note] Aborted connection 720 to db: 'unconnected' user: 'rept' host: '192.168.0.11' (failed on flush_net())
2019-06-16T20:41:06.636868+08:00 721 [Note] Start binlog_dump to master_thread_id(721) slave_server(113306), pos(, 4)
2019-06-16T20:41:06.636902+08:00 721 [Note] Start asynchronous binlog_dump to slave (server_id: 113306), pos(, 4)
6.1と6.2のエラーログがまだ異なることを発見しました
7.ケース
オンラインで実行されているMySQL拡張ハーフ同期レプリケーションアーキテクチャで、slaveライブラリが1台停止した場合、元の拡張ハーフ同期レプリケーションアーキテクチャにどのように正しく再追加すればいいですか?
正しい方法は次のとおりです.
1. 2 rpl_semi_sync_master_enabled rpl_semi_sync_slave_enabled my.cnf 。
2. slave stop slave io_thread ;set global rpl_semi_sync_slave_enabled=0 。 start slave io_thread start slave , slave master 。
3. slave set global rpl_semi_sync_slave_enabled=1 ;stop slave io_thread;start slave io_thread;
ここまでプレゼンテーションして、伝言を歓迎して一緒に勉強を交流します.