mysql(5)mysql的組複製(全同步)

全同步複製(銀行)
指當主庫執行完一個事務,所有的從庫都執行了該事務才返回給客戶端。因爲需要等待所有從庫執行完該事務才能返回,所以全同步複製的性能必然會收到嚴重的影響。

1.組複製(全同步複製)介紹:

** 組複製分單主模式和多主模式,mysql 的複製技術僅解決了數據同步的問題,如果 master 宕機,意味着數據庫管理員需要介入,應用系統可能需要修改數據庫連接地址或者重啓才能實現。(這裏也可以使用數據庫中間件產品來避免應用系統數據庫連接的問題,例如 mycat 和 atlas 等產品)。組複製在數據庫層面上做到了,只要集羣中大多數主機可用,則服務可用。
單主模型:從複製組中衆多個MySQL節點中自動選舉一個master節點,只有master節點可以寫,其他節點自動設置爲read only,
當master節點故障時,會自動選舉一個新的master節點,選舉成功後,它將設置爲可寫,其他slave將指向這個新的master
多主模型:複製組中的任何一個節點都可以寫,因此沒有master和slave的概念只要突然故障的節點數量不太多,這個多主模型就能繼續可用**

2.組複製特點

● 高一致性

● 高容錯性

只要不是大多數節點壞掉就可以繼續工作,有自動檢測機制,當不同節點產生資源爭用衝突時,不會出現錯誤,按照先到者優先原則進行處理,並且內置了自動化腦裂防護機制;

● 高擴展性

節點的新增和移除都是自動的,新節點加入後,會自動從其他節點上同步狀態,直到新節點和其他節點保持一致,如果某節點被移除了,其他節點自動更新組信息,自動維護新的組信息;

● 高靈活性

有單主模式和多主模式,單主模式下,會自動選主,所有更新操作都在主上進行;
但是組複製的效率很低
當master節點寫數據的時候,會等待所有的slave節點完成數據的複製,然後才繼續往下進行
組複製的每一個節點都可能是slave

實驗環境

**172.25.62.1 server1 master
172.25.62.2 server2 slave
172.25.62.3 server3 slave
**

server1上

先將之前的環境刪掉

在這裏插入圖片描述修改配置文件

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE #關閉binlog校驗
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW #組複製依賴基於行的複製格式

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="c36cc649-3f17-11e9-960e-525400cf2a01"	##可以看/var/lib/mysql/auto.cnf 這個uuid必須與你當前的uuid不同,且組複製組成員配置文件內的uuid相同
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.62.1:24901"
loose-group_replication_group_seeds= "172.25.62.1:24901,172.25.62.2:24901,172.25.62.3:24901"##官網新版33061好像不太行
loose-group_replication_bootstrap_group=off	##插件是否自動引導,這個選項一般都要off掉,只需要由發起組複製的節點開啓,並只啓動一次,如果是on,下次再啓動時,會生成一個同名的組,可能會發生腦裂
loose-group_replication_ip_whitelist="127.0.0.1,172.25.62.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF  #後兩行是開啓多主模式的參數

4.啓動mysqld
systemctl start mysqld

在這裏插入圖片描述

在這裏插入圖片描述

啓動數據庫
在這裏插入圖片描述
過濾出密碼,數據庫初始化

在這裏插入圖片描述

mysql -uroot -pGaojia+123登錄數據庫
show databases;查看數據庫
alter user root@localhost identified by 'Gaojia123';
SET SQL_LOG_BIN=0;#關閉二進制日誌,防止傳到其他server上
CREATE USER rpl_user@'%' IDENTIFIED BY 'Gaojia+123';##創建複製要用的用戶
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';##授權REPLICATION表示授權複製的權限
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;##開啓日誌

在這裏插入圖片描述
根據官網設置組複製的用戶和密碼

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Gaojia+123' FOR CHANNEL 'group_replication_recovery';
SHOW PLUGINS;	##查看插件
SET GLOBAL group_replication_bootstrap_group=ON;	##組複製發起節點開啓這個參數,其他slave不開
START GROUP_REPLICATION;  ##測試看能否開啓
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;  ##查看server1是否有記錄

在這裏插入圖片描述

在這裏插入圖片描述

server2上

一樣的操作,刪除之前的數據
修改配置文件,再開啓

在這裏插入圖片描述

在這裏插入圖片描述``server_id=2
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE #關閉binlog校驗
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW #組複製依賴基於行的複製格式

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name=“c36cc649-3f17-11e9-960e-525400cf2a01” ##可以看/var/lib/mysql/auto.cnf
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= “172.25.62.2:24901”
loose-group_replication_group_seeds= “172.25.62.1:24901,172.25.62.2:24901,172.25.62.3:24901”
loose-group_replication_bootstrap_group=off ##插件是否自動引導,這個選項一般都要off掉,只需要由發起組複製的節點開啓,並只啓動一次,如果是on,下次再啓動時,會生成一個同名的組,可能會發生腦裂
loose-group_replication_ip_whitelist=“127.0.0.1,172.25.62.0/24”
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF #後兩行是開啓多主模式的參數
在這裏插入圖片描述
過濾出密碼,初始化
在這裏插入圖片描述

#進入數據庫
mysql> alter user root@localhost identified by 'Gaojia+123'; #修改root用戶密碼

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Gaojia123';

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Gaojia123' FOR CHANNEL 'group_replication_recovery';

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';

#這裏不需要做server1上做的SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;

在這裏插入圖片描述
此時報錯

在這裏插入圖片描述cat /var/log/mysqld.log ,找到解決辦法

在這裏插入圖片描述
要將參數設爲on

在這裏插入圖片描述
先停止組複製參數

set global group_replication_allow_local_disjoint_gtids_join=on;設置好
再去開啓組複製

在這裏插入圖片描述

server3上

同server2一樣,就配置文件不一樣,我就不解說了=—=!

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在server3上插入數據

mysql> CREATE DATABASE test;

mysql> USE test;

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);

mysql> INSERT INTO t1 VALUES (1, 'Luis');

mysql>  SELECT * FROM t1;

在這裏插入圖片描述
server1上也能看見
在這裏插入圖片描述

在這裏插入圖片描述組複製完成

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