您好,登錄后才能下訂單哦!
下文內(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ù)制。
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更新。
免責聲明:本站發(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)容。