天天看點

資料庫 之 Mysql半同步複制

1  概述

半同步複制指一部分主機同步複制,另一部分主機異步複制

同步的邏輯是使用者寫操作到主伺服器,主服務記錄到二進制檔案後,主服務會同步發送給從伺服器,從伺服器響應資料同步後,主伺服器才會把響應發給使用者。這種方式對IO有強依賴。

mysql是高度插件化的,半同步複制插件是google共獻給mysql的插件。裝有該插件的伺服器才能實作同步複制。半同步複制的插件在主節點和從節點是不一樣的,各自分别使用專有插件,當插件配置啟用後,從節點将同步的方式來同步主伺服器資料,其他沒有配置的插件的機器為異步同步機制複制。這裡的同步複制可以設定時間,在一定的時間範圍内,如果配有插件的從伺服器沒有複制主伺服器的資料,該從伺服器将會被降級為異步複制。

PXC:Percona XtraDB Cluster,percona的插件,是一種多主的高可用,可擴充的解決方案,可以在生産環境使用。實作了主從複制叢集,和mysql的主從服務複制邏輯不一樣,PXC實作了多主的叢集複制,每一個節點都是可讀可寫。通過叢集信道來同步資訊,不依賴于二進制日志和中繼日志,按位複制,不同步量少,實作幾乎同步的複制。二進制級别做校驗,可以發現資料的不一緻,但是這個方案不是mysql官方的,這種方案可能會停止維護,當資料量大後,要重新轉移資料庫難度就很大。

本文沒有介紹PXC工具的使用,主要mysql自帶的半同步複制安裝插件才能實作半同步的功能

2  插件安裝

檢視目前資料庫安裝的插件

MariaDB [sunny]> show plugins;

mysql支援多種插件,其中,在路徑/usr/lib64/mysql/plugin/下的semisync_master.so和semisync_slave.so這兩個插件實作半同步複制,需要安裝才能使用同步複制功能

在mysql下執行help  install檢視install的使用方法

安裝文法如下:

mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name'; 

其中,

plugin_name為插件名,與檔案名不一緻

shared_library_name為共享庫名稱,即/usr/lib64/mysql/plugin/下不需要加.so字尾的插件名。

通過文檔得知插件對應的插件名稱和檔案名,沒有規律可尋

半同步複制:

semisync_master.so  主節點的插件

semisync_slave.so  從節點的插件

主節點:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

+------------------------------------+-------+

| Variable_name                      | Value |

| rpl_semi_sync_master_enabled       | OFF   |

| rpl_semi_sync_master_timeout       | 10000 |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

+------------------------------------+-------+

MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;

從節點:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';                        

+---------------------------------+-------+

| Variable_name                   | Value |

| rpl_semi_sync_slave_enabled     | OFF   |

| rpl_semi_sync_slave_trace_level | 32    |

+---------------------------------+-------+

MariaDB [mydb]> STOP SLAVE IO_THREAD;

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [mydb]> START SLAVE IO_THREAD;

判斷方法:

主節點:

MariaDB [mydb]> SELECT @@global.rpl_semi_sync_master_clients;

3  例子 實作半同步複制

步驟一,主從複制模型配置

主伺服器71配置

[root@CentOS7A ~]#vim /etc/my.cnf.d/server.cnf 

[server]

skip_name_resolve = ON

innodb_file_per_table = ON

max_connections = 20000

log_bin = master-log

server_id = 1 

重新開機mysql

[root@CentOS7A ~]#systemctl restart mariadb

授權擁有複制權限的賬号

MariaDB [sunny]> grant replication client,replication slave on *.* to 'sunnycopy'@'192.168.1.%' identified by 'Pass123456';

MariaDB [sunny]> flush privileges;

從節點73配置

[root@CentOS7C ~]#vim /etc/my.cnf.d/server.cnf 

innodb_buffer_pool_size = 256M

max_connections = 2000

relay_log = relay-log

server_id = 2 

[root@CentOS7C ~]#systemctl restart mariadb

連接配接入從伺服器,啟動從伺服器的複制

MariaDB [(none)]> change master to master_host='192.168.1.71',master_user='sunnycopy',master_password='Pass1234',master_log_file='master-log.000004',master_log_pos=245;

其中,master_log_file和master_log_pos可以到主伺服器上用如下指令

MariaDB [sunny]> show binlog events in 'master-log.000004';

或者

MariaDB [sunny]> show mastert status;

檢視從哪個二進制檔案的位置開始複制

啟動複制線程

MariaDB [(none)]> start slave;

檢視狀态

MariaDB [(none)]> show slave status\G;

到這裡,主從複制叢集設定完成。

步驟二,配置為半同步模式

主節點73上安裝子產品

MariaDB [sunny]> install plugin rpl_semi_sync_master soname 'semisync_master';

安裝完成後,在主節點上會生成相關伺服器半同步參數

檢視如下

MariaDB [sunny]> show global variables like '%rpl%';

+------------------------------------+-------+

| Variable_name                      | Value |

| rpl_recovery_rank                  | 0     |

| rpl_semi_sync_master_enabled       | OFF   |

| rpl_semi_sync_master_timeout       | 10000 |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

5 rows in set (0.00 sec)

檢視半同步複制狀态的相關參數,指令如下

MariaDB [sunny]> show status like '%rpl%';

從節點73安裝插件

MariaDB [(none)]> install plugin rpl_semi_sync_slave soname 'semisync_slave';

檢視參數

步驟三,設定參數為啟用

注意,插件安裝完成後,master和slave節點上的rpl_semi_sync_master_enabled 和rpl_semi_sync_slave_enabled都是禁用的,需要啟用

主節點71上啟用

MariaDB [sunny]> set @@global.rpl_semi_sync_master_enabled=on;

從節點73上啟用

MariaDB [(none)]> set @@global.rpl_semi_sync_slave_enabled=on;

步驟四,從節點重新開機複制線程

注意,這裡是從原來的主從複制轉為半同步複制,已經設定了同步主機,即執行過change master to的指令,如果沒有需要設定相關參數,然後啟用複制線程

73上設定

MariaDB [(none)]> stop slave io_thread;

MariaDB [(none)]> start slave io_thread;

确認,從伺服器的Rpl_semi_sync_slave_status狀态為on才是正常啟用,檢視指令如下

MariaDB [(none)]> show status like '%rpl%';

主伺服器上檢視Rpl_semi_sync_master_clients 參數,value是1,表示已經有1台從伺服器啟用半同步複制方式連接配接到該主伺服器上

檢查,在主節點,插入資料後,狀态會變化

如73上執行如下操作

MariaDB [sunny]> create database test2;

MariaDB [sunny]> use test2

MariaDB [test2]> create table class(id int,major char(20));

檢視相關參數狀态, 就會發生變化,指令如下

繼續閱讀