介紹
MySQL Group Replication(簡稱MGR)是MySQL官方於2016年12月推出的一個全新的高可用與高擴展的解決方案。MySQL Group Replication提供了高可用、高擴展、高可靠的MySQL集羣服務
MGR基礎結構要求:
1、引擎必須爲innodb,因爲需事務支持在commit時對各節點進行衝突檢查
2、每個表必須有主鍵,在進行事務衝突檢測時需要利用主鍵值對比
3、必須開啓binlog且爲row格式
4、開啓GTID,且主從狀態信息存於表中(–master-info-repository=TABLE 、–relay-log-info-repository=TABLE),–log-slave-updates打開
5.一致性檢測設置–transaction-write-set-extraction=XXHASH64
部署MGR集羣
1.準備三臺mysql,三臺都設置hostname和ip映射
vim /etc/hosts
輸入以下
192.168.100.10 master
192.168.100.20 slave1
192.168.100.30 slave2
2.配置master主配置文件
vim /etc/my.cnf
添加以下 ##紅色部分修改組名和自己主機名
server_id=100 #服務ID
gtid_mode=ON #全局事務
enforce_gtid_consistency=ON #強制GTID的一致性
master_info_repository=TABLE #將master.info元數據保存在系統表中
relay_log_info_repository=TABLE #將relay.info元數據保存在系統表中
binlog_checksum=NONE #禁用二進制日誌事件校驗
log_slave_updates=ON #級聯複製
log_bin=binlog #開啓二進制日誌記錄
binlog_format=ROW #以行的格式記錄
3.transaction_write_set_extraction=XXHASH64 #使用哈希算法將其編碼爲散列
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856' #加入的組名
loose-group_replication_start_on_boot=off #不自動啓用組複製集羣
loose-group_replication_local_address='cong11:33061'
#以本機端口33061接受來自組中成員的傳入連接
loose-group_replication_group_seeds='cong11:33061,cong12:33061,cong13:33061'
#組中成員訪問表
loose-group_replication_bootstrap_group=off #不啓用引導組
Uuidgen 可以自動生成組名
Systemctl restart mysqld ##重啓
3,授權賬戶
進入mysql裏
mysql> set SQL_LOG_BIN=0; #停掉日誌記錄
mysql> grant replication slave on *.* to repl@' 192.168.1.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #開啓日誌記錄
mysql>change master to master_user='repl',master_password='123456' for channel 'group_replication_recovery'; #構建group replication集羣,如果報錯,重啓mysql,再執行。
4,安裝group replication
install PLUGIN group_replication SONAME 'group_replication.so';
查看
Show plugins
5,啓動master上mysql的group replication
Set global group_replication_bootstrap_group=ON;
##group_replication_bootstrap_group爲ON是爲了標示以後加入集羣的服務器以這臺服務器爲基準,以後加入的就不需要設置。
start group_replication;
set global group_replication_bootstrap_group=OFF;
查看mgr狀態
select * from performance_schema.replication_group_members;
測試插入一些數據
6,複製組添加新實例slave1,修改配置文件
第二臺虛擬機配置
vim /etc/my.cnf
##添加以下 注意,ip不一樣,組名三臺都要一樣
server_id=101 #注意服務ID不一樣
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='cong12:33061'
loose-group_replication_group_seeds='cong11:33061,cong12:33061,cong13:33061'
loose-group_replication_bootstrap_group=off
Systemctl restart mysqld
##重啓
7,授權,和上面一樣
8,安裝group replication 插件
和上面一樣
把實例添加到之前的複製組
set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;
查看複製組狀態
select * from performance_schema.replication_group_members;
9,複製組添加新實例slave2,修改配置文件,添加以下
vim /etc/my.cnf
##組名,主機名和id
server_id=102 #注意服務ID不一樣
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='cong13:33061'
loose-group_replication_group_seeds='cong11:33061,cong12:33061,cong13:33061'
loose-group_replication_bootstrap_group=off
systemctl restart mysqld
##重啓
配置slave2
10,授權
同上
安裝group replication
同上
查看狀態
select * from performance_schema.replication_group_members;
同步完成
11,查看集羣參數設置列表
show variables like 'group_replication%';
查看主服務器id
SHOW STATUS LIKE 'group_replication_primary_member';
multi-primary模式(多主master模式)
1,由單主改爲多主
在原來單主的主節點上
進入mysql
stop GROUP_REPLICATION;
set global group_replication_single_primary_mode=off; #關閉單master模式
set global group_replication_enforce_update_everywhere_checks=ON; #這個參數設置多主模式下各個節點嚴格一致性檢查
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION; #加入到複製組
SET GLOBAL group_replication_bootstrap_group=OFF;
2,在slave1和slave2上配置
配置兩個一樣
進入mysql
stop GROUP_REPLICATION; ##停止複製組
set global group_replication_allow_local_disjoint_gtids_join=ON; #即使含有組中不存在的事務,也允許當前server加入組
set global group_replication_single_primary_mode=off; #關閉單master模式
set global group_replication_enforce_update_everywhere_checks=ON; #這個參數設置多主模式下各個節點嚴格一致性檢查
start group_replication; #加入到複製組
3,搭建多主master模式 在master上
vim /etc/my.cnf
##進入添加 , 再把主機名改一下
#roup Replication
server_id = 100 #服務ID
gtid_mode = ON #全局事務
enforce_gtid_consistency = ON #強制GTID的一致性
master_info_repository = TABLE #將master.info元數據保存在系統表中
relay_log_info_repository = TABLE #將relay.info元數據保存在系統表中
binlog_checksum = NONE #禁用二進制日誌事件校驗
log_slave_updates = ON #級聯複製
log_bin = binlog #開啓二進制日誌記錄
binlog_format= ROW #以行的格式記錄
transaction_write_set_extraction = XXHASH64 #使用哈希算法將其編碼爲散列
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的組名
loose-group_replication_start_on_boot = off #不自動啓用組複製集羣
loose-group_replication_local_address = 'cong11:33061' #以本機端口33061接受來自組中成員的傳入連接
loose-group_replication_group_seeds = 'cong11:33061,cong12:33062,cong13:33063' #組中成員訪問表
loose-group_replication_bootstrap_group = off #不啓用引導組
loose-group_replication_single_primary_mode = off #關閉單master模式
loose-group_replication_enforce_update_everywhere_checks = ON #多主一致性檢查
進入mysql
stop GROUP_REPLICATION;
reset master; #重置所有的日誌
4,在從服務器上配置,slave1 slave2
Vim /etc/my.cnf
##添加以下 修改主機名
# Group Replication
server_id = 101 #服務ID
gtid_mode = ON #全局事務
enforce_gtid_consistency = ON #強制GTID的一致性
master_info_repository = TABLE #將master.info元數據保存在系統表中
relay_log_info_repository = TABLE #將relay.info元數據保存在系統表中
binlog_checksum = NONE #禁用二進制日誌事件校驗
log_slave_updates = ON #級聯複製
log_bin = binlog #開啓二進制日誌記錄
binlog_format= ROW #以行的格式記錄
transaction_write_set_extraction = XXHASH64 #使用哈希算法將其編碼爲散列
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的組名
loose-group_replication_start_on_boot = off #不自動啓用組複製集羣
loose-group_replication_local_address = 'cong12:33061' #以本機端口33061接受來自組中成員的傳入連接
loose-group_replication_group_seeds = 'cong11:33061,cong12:33062,cong13:33063' #組中成員訪問表
loose-group_replication_bootstrap_group = off #不啓用引導組
loose-group_replication_single_primary_mode = off #關閉單master模式
loose-group_replication_enforce_update_everywhere_checks = ON #多主一致
性檢查
/etc/init.d/mysqld restart
##重啓
select * from performance_schema.replication_group_members;
Slave2配置同上
配置完重啓,查看狀態
select * from performance_schema.replication_group_members;
完成
實驗到這裏就結束了,如果有問題請小夥伴們留言,謝謝~~