Mysql半同步主從複製

一、異步複製、同步複製、半同步複製的區別

    異步複製:在主從架構中假如當客戶端發送了一條UPDATE語句,主服務器上I/O thread 線程將二進制日誌寫入binlog文件之後就返回客戶端結果,不管從服務器是否已經同步到從服務器的relaylog中,性能是最好的,缺點主服務器宕機,容易造成數據不一致,Mysql中默認使用的就是異步複製

    同步複製:當主服務器完成更新,並且同步到所有從服務器纔會返回成功結果,效率低,影響性能

    半同步複製:將兩種方法折中,當主服務器完成更新,至少有一個從服務器接收到並完成更新,主服務器就返回成功

二、具體實現

半同步至少需要3臺主機,2臺和異步就沒有區別了,需要使用Mysql5.5以上版本,半同複製是通過插件Mysql包中的插件實現的

1、搭建主從複製

主服務器

vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
server-id=57       #添加唯一 id                                                               
log-bin         #開啓二進制日誌
創建賬號
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.12.%' identified by '12345';
查看當前二進制日誌位置
show master logs;

從服務器配置方法類似,不重複寫了

vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
server-id=27   #添加唯一 id 
log-bin     #開啓二進制日誌

image.png

2、半同步複製配置

主服務器

MariaDB [(none)]> show plugins;  #可以查看安裝的插件

安裝主節點的插件

MariaDB [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME  'semisync_master.so';  #安裝主節點的插件
MariaDB [(none)]>SET GLOBAL rpl_semi_sync_master_enabled=1;   #啓用
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout = 10000;  #10000ms不同步,主服務器直接回應客戶端,默認10000
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';      #查看主節點狀態

image.png

MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';   #查看狀態變量

二臺從服務器配置一樣

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so';   #安裝從節點插件
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;    #啓用
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%'; 
MariaDB [(none)]> stop slave;  #從節點配置過需要重啓線程才生效
MariaDB [(none)]> start slave;  #啓動後在主服務器狀態變量中可以看到一個從節點

三、驗證

在主服務器上創建數據庫,二個從節點都可以同步

image.png

image.png

停止其中一個從服務器的Mariadb服務。同步不受影響

當二個從服務器服務都關閉,主服務器會等到rpl_semi_sync_master_timeout時間到了之後再執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章