mysql5.7 開啟增強半同步復制


前提是主從異步復制環境要提前搭建好,然后再開啟mysql增強半同步

環境:mysql5.7.26 主從異步復制早已部署好。

1.加載plugin插件

建議master和slave上全部執行(考慮到MHA的主從自動切換的環境)

在主庫安裝semisync_master.so和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';
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)

 

查看時候已經安裝了插件

root@localhost 07:52:  [fengjian]> show plugins;
+----------------------------+----------+--------------------+--------------------+---------+
| Name                       | Status   | Type               | Library            | License |
+----------------------------+----------+--------------------+--------------------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL               | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL               | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL               | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | NULL               | GPL     |
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so  | GPL     |
+----------------------------+----------+--------------------+--------------------+---------+
46 rows in set (0.11 sec)

 

2.slave和master開啟增強半同步參數

生產環境上建議先在slave庫上的開啟 增強半同步參數

 

set global rpl_semi_sync_slave_enabled =1;
stop  slave io_thread;start  slave io_thread;

 

此刻觀察master的錯誤日志:提示開啟了Semi-sync replication 復制

2020-02-24T07:39:39.445151-00:00 584 [Note] Start binlog_dump to master_thread_id(584) slave_server(255506), pos(, 4)
2020-02-24T07:44:44.300106-00:00 586 [Note] While initializing dump thread for slave with UUID <22da22b2-56af-11ea-9b23-0242ac120c03>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(584).
2020-02-24T07:44:44.300345-00:00 586 [Note] Start binlog_dump to master_thread_id(586) slave_server(255506), pos(, 4)
2020-02-24T07:44:44.300371-00:00 586 [Note] Start semi-sync binlog_dump to slave (server_id: 255506), pos(, 4)
2020-02-24T07:44:44.300809-00:00 584 [Note] Stop asynchronous binlog_dump to slave (server_id: 255506)
2020-02-24T07:46:09.373869-00:00 585 [Note] Semi-sync replication initialized for transactions.
2020-02-24T07:46:09.373908-00:00 585 [Note] Semi-sync replication enabled on the master.
2020-02-24T07:46:09.374779-00:00 0 [Note] Starting ack receiver thread

 

然后master上再開啟增強半同步參數

set global rpl_semi_sync_master_enabled =1
set global rpl_semi_sync_master_timeout        =1000

#增強半同步的個數
rpl_semi_sync_master_wait_for_slave_count = 1  

 

3.MySQL官網配置方法

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       

 

 

重啟master和slave數據庫。

4.實際生產環境配置方法

當然實際操作中還是不建議把參數rpl_semi_sync_master_enabled 和rpl_semi_sync_slave_enabled 直接寫入配置文件的。
原因:把參數加入my.cnf配置文件時,在slave庫掛掉,重新開啟slave庫或者是slave庫重啟后,會自動開啟增強半同步復制。
如果在slave庫斷開master庫時間較長時,最好是先開啟mysql異步復制,讓slave庫追趕上master庫后,然后再開啟增強半同步復制。這樣不會拖垮master庫。要是直接開啟增強半同步復制是會拖垮主庫的。
rpl_semi_sync_master_timeout =1000 ##1s 這個轉化為異步復制的超時參數是可以寫入配置文件的。

 

5.案例

當線上運行的MySQL增強半同步復制架構中,當其中的一台slave庫掛掉了應該如何正確重新添加到原先的增強半同步復制架構??

正確的做法如下:

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;

 

 

轉載於:https://blog.51cto.com/wujianwei/2409754

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM