溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mysql半同步復(fù)制定義及安裝教程簡析

發(fā)布時間:2020-04-28 14:36:42 來源:億速云 閱讀:283 作者:三月 欄目:MySQL數(shù)據(jù)庫

下文內(nèi)容主要給大家?guī)?a title="Mysql" target="_blank" href="http://kemok4.com/mysql/">Mysql半同步復(fù)制定義及安裝教程簡析,這里所講到的知識,與書籍略有不同,都是億速云專業(yè)技術(shù)人員在與用戶接觸過程中,總結(jié)出來的,具有一定的經(jīng)驗分享價值,希望給廣大讀者帶來幫助。

1  概述

半同步復(fù)制指一部分主機同步復(fù)制,另一部分主機異步復(fù)制

同步的邏輯是用戶寫操作到主云服務(wù)器,主服務(wù)記錄到二進制文件后,主服務(wù)會同步發(fā)送給從服務(wù)器,從服務(wù)器響應(yīng)數(shù)據(jù)同步后,主服務(wù)器才會把響應(yīng)發(fā)給用戶。這種方式對IO有強依賴。

mysql是高度插件化的,半同步復(fù)制插件是google共獻給mysql的插件。裝有該插件的服務(wù)器才能實現(xiàn)同步復(fù)制。半同步復(fù)制的插件在主節(jié)點和從節(jié)點是不一樣的,各自分別使用專有插件,當插件配置啟用后,從節(jié)點將同步的方式來同步主服務(wù)器數(shù)據(jù),其他沒有配置的插件的機器為異步同步機制復(fù)制。這里的同步復(fù)制可以設(shè)定時間,在一定的時間范圍內(nèi),如果配有插件的從服務(wù)器沒有復(fù)制主服務(wù)器的數(shù)據(jù),該從服務(wù)器將會被降級為異步復(fù)制。

Mysql半同步復(fù)制定義及安裝教程簡析

PXC:Percona XtraDB Cluster,percona的插件,是一種多主的高可用,可擴展的解決方案,可以在生產(chǎn)環(huán)境使用。實現(xiàn)了主從復(fù)制集群,和mysql的主從服務(wù)復(fù)制邏輯不一樣,PXC實現(xiàn)了多主的集群復(fù)制,每一個節(jié)點都是可讀可寫。通過集群信道來同步信息,不依賴于二進制日志和中繼日志,按位復(fù)制,不同步量少,實現(xiàn)幾乎同步的復(fù)制。二進制級別做校驗,可以發(fā)現(xiàn)數(shù)據(jù)的不一致,但是這個方案不是mysql官方的,這種方案可能會停止維護,當數(shù)據(jù)量大后,要重新轉(zhuǎn)移數(shù)據(jù)庫難度就很大。

本文沒有介紹PXC工具的使用,主要mysql自帶的半同步復(fù)制安裝插件才能實現(xiàn)半同步的功能

2  插件安裝

查看當前數(shù)據(jù)庫安裝的插件

MariaDB [sunny]> show plugins;

mysql支持多種插件,其中,在路徑/usr/lib64/mysql/plugin/下的semisync_master.so和semisync_slave.so這兩個插件實現(xiàn)半同步復(fù)制,需要安裝才能使用同步復(fù)制功能

在mysql下執(zhí)行help  install查看install的使用方法

安裝語法如下:

mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name'; 

其中,

plugin_name為插件名,與文件名不一致

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

通過文檔得知插件對應(yīng)的插件名稱和文件名,沒有規(guī)律可尋

半同步復(fù)制:

semisync_master.so  主節(jié)點的插件

semisync_slave.so  從節(jié)點的插件

主節(jié)點:

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;

從節(jié)點:

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;

判斷方法:

主節(jié)點:

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

3  例子 實現(xiàn)半同步復(fù)制

步驟一,主從復(fù)制模型配置

主服務(wù)器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

授權(quán)擁有復(fù)制權(quán)限的賬號

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

MariaDB [sunny]> flush privileges;

從節(jié)點73配置

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

[server]

skip_name_resolve = ON

innodb_file_per_table = ON

innodb_buffer_pool_size = 256M

max_connections = 2000

relay_log = relay-log

server_id = 2 

重啟mysql

[root@CentOS7C ~]#systemctl restart mariadb

連接入從服務(wù)器,啟動從服務(wù)器的復(fù)制

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可以到主服務(wù)器上用如下命令

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

或者

MariaDB [sunny]> show mastert status;

查看從哪個二進制文件的位置開始復(fù)制

啟動復(fù)制線程

MariaDB [(none)]> start slave;

查看狀態(tài)

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

到這里,主從復(fù)制集群設(shè)置完成。


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

主節(jié)點73上安裝模塊

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

安裝完成后,在主節(jié)點上會生成相關(guān)服務(wù)器半同步參數(shù)

查看如下

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)

查看半同步復(fù)制狀態(tài)的相關(guān)參數(shù),命令如下

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

從節(jié)點73安裝插件

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

查看參數(shù)

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

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


步驟三,設(shè)置參數(shù)為啟用

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

主節(jié)點71上啟用

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

從節(jié)點73上啟用

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


步驟四,從節(jié)點重啟復(fù)制線程

注意,這里是從原來的主從復(fù)制轉(zhuǎn)為半同步復(fù)制,已經(jīng)設(shè)置了同步主機,即執(zhí)行過change master to的命令,如果沒有需要設(shè)置相關(guān)參數(shù),然后啟用復(fù)制線程

73上設(shè)置

MariaDB [(none)]> stop slave io_thread;

MariaDB [(none)]> start slave io_thread;

確認,從服務(wù)器的Rpl_semi_sync_slave_status狀態(tài)為on才是正常啟用,查看命令如下

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

主服務(wù)器上查看Rpl_semi_sync_master_clients 參數(shù),value是1,表示已經(jīng)有1臺從服務(wù)器啟用半同步復(fù)制方式連接到該主服務(wù)器上

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

檢查,在主節(jié)點,插入數(shù)據(jù)后,狀態(tài)會變化

如73上執(zhí)行如下操作

MariaDB [sunny]> create database test2;

MariaDB [sunny]> use test2

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

查看相關(guān)參數(shù)狀態(tài), 就會發(fā)生變化,命令如下

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

半同步復(fù)制到這里配置完成,注意,半同步是一把雙刃劍,因為為了等待事務(wù)同步復(fù)制事務(wù)的完成,需要耗費一定的時間,速度相對較慢。

生成環(huán)境,建議用keepalive工具將proxysql配置為高可用,防止單點故障

對于以上關(guān)于Mysql半同步復(fù)制定義及安裝教程簡析,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)硪欢ǖ闹R更新。

 

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI