MySQL集群MGR架構for多主模式


本文轉載自: https://www.93bok.com

MGR簡介

MySQL Group Replication(簡稱MGR)是MySQL官方於2016年12月推出的一個全新的高可用與高擴展的解決方案。MySQL組復制提供了高可用、高擴展、高可靠的MySQL集群服務。

1)高一致性

基於原生復制及paxos協議的組復制技術,並以插件的方式提供,提供一致數據安全保證;

2)高容錯性

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

3)高擴展性

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

4)高靈活性

有單主模式和多主模式,單主模式下,會自動選主,所有更新操作都在主上進行;多主模式下,所有server都可以同時處理更新操作。

MGR是MySQL數據庫未來發展的一個重要方向。

MGR基礎結構要求

1、引擎必須為innodb,因為需事務支持在commit時對各節點進行沖突檢查
2、每個表必須有主鍵,在進行事務沖突檢測時需要利用主鍵值對比
3、必須開啟binlog且為row格式
4、必須打開GTID特性,且主從狀態信息存於表中
(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE)
5、--log-slave-updates打開
6、一致性檢測設置--transaction-write-set-extraction=XXHASH64

MGR使用限制

1、RP和普通復制binlog校驗不能共存,需設置--binlog-checksum=none
2、不支持gap lock(間隙鎖),隔離級別需設置為read_committed
3、不支持對表進行鎖操作(lock /unlock table),不會發送到其他節點執行 ,影響需要對表進行加鎖操作的情況,列入mysqldump全表備份恢復操作
4、不支持serializable(序列化)隔離級別
5、DDL語句不支持原子性,不能檢測沖突,執行后需自行校驗是否一致
6、不支持外鍵:多主不支持,單主模式不存在此問題
7、最多支持9個節點:超過9台server無法加入組

MGR多主模式部署

一、准備環境

主機IP		     主機名		  數據庫版本		     Server ID				 操作系統
192.168.10.22	nongziyi22.xin	 mysql-5.7.19		1				Centos6.5
192.168.10.27	nongziyi27.xin   mysql-5.7.19		2				Centos6.5
192.168.10.29   nongziyi29.xin	 mysql-5.7.19		3				Centos6.5

二、設置hostname和ip映射關系

在三台服務器上都設置:

vim /etc/hosts
192.168.10.22   nongziyi22.xin
192.168.10.27   nongziyi27.xin
192.168.10.29   nongziyi29.xin

三、nongziyi22.xin服務器配置

1、配置my.cnf(和單主模式只差兩句配置在末尾)
vim /etc/mysql/my.cnf

[mysqld]
datadir=/a01/apps/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#Group Replication
server_id = 1								#服務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 = '192.168.10.22:33061'		#以本機3306端口接收來自組成員的傳入連接
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'								#組中成員訪問列表
loose-group_replication_bootstrap_group = off		#不啟用引導組
loose-group_replication_single_primary_mode = off			#關閉單master模式
loose-group_replication_enforce_update_everywhere_checks = ON		#多主一致性檢查

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2、重啟mysql服務
service mysqld restart
3、建立復制賬號
mysql -u root -p123456

mysql> set SQL_LOG_BIN=0;				#停掉日志記錄
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1;				#開啟日志記錄
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#構建group_replication集群
4、安裝group replication插件

#安裝插件

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

#查看group replication組件

mysql> show plugins;

PXf9qH.png

5、啟動服務器上mysql的group replication

#設置group_replication_bootstrap_group為ON是為了標示以后加入集群的服務器以這台服務器為基准,以后加入的就不需要設置

mysql> set global group_replication_bootstrap_group=ON;

#作為首個節點啟動MGR集群

mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=OFF;

PXfEJP.png

6、查看MGR的狀態
mysql> select * from performance_schema.replication_group_members;

PXfZz8.png

7、插入數據以便一會別的主機添加到集群中的時候查看效果
mysql> create database nongkaige;
mysql> use nongkaige;
mysql> create table ziyi(id int primary key,name varchar(20));
mysql> insert into ziyi values (1,'nongziyi');
mysql> select * from nongkaige.ziyi;

PXfnsg.png

四、nongziyi27.xin服務器配置

1、配置my.cnf(和之前的一樣,只是server_id和IP地址不一樣而已)
vim /etc/mysql/my.cnf

#Group Replication
server_id = 2
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 = '192.168.10.27:33061'
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
loose-group_replication_bootstrap_group = off
loose-group_replication_single_primary_mode = off
loose-group_replication_enforce_update_everywhere_checks = ON
2、重啟mysql服務
service mysqld restart
3、建立復制賬號
mysql -u root -p123456

mysql> set SQL_LOG_BIN=0;				#停掉日志記錄
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1;				#開啟日志記錄
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#構建group_replication集群
4、安裝group replication插件

#安裝插件

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、啟動MGR集群
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;
6、查看MGR的狀態
mysql> select * from performance_schema.replication_group_members;

PXfJzT.png

7、檢測數據是否同步過來
mysql> select * from nongkaige.ziyi;

PXftQU.png

五、nongziyi29.xin服務器配置

1、配置my.cnf(和之前的一樣,只是server_id和IP地址不一樣而已)
vim /etc/mysql/my.cnf

#Group Replication
server_id = 3
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 = '192.168.10.29:33061'
loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
loose-group_replication_bootstrap_group = off
loose-group_replication_single_primary_mode = off
loose-group_replication_enforce_update_everywhere_checks = ON
2、重啟mysql服務
service mysqld restart
3、建立復制賬號
mysql -u root -p123456

mysql> set SQL_LOG_BIN=0;				#停掉日志記錄
mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1;				#開啟日志記錄
mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#構建group_replication集群
4、安裝group replication插件

#安裝插件

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5、啟動MGR集群
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;
6、查看MGR的狀態
mysql> select * from performance_schema.replication_group_members;

PXfdeJ.png

7、檢測數據是否同步過來
mysql> select * from nongkaige.ziyi;

PXfDF1.png

查看誰是MGR集群的主節點

mysql> select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';

PXfrJx.png

和單主模式不同,這里所有的主機都是主服務器,都能進行寫操作

MGR集群測試

測試是否3個節點都能進行寫操作

1、在nongziyi22這台主機上插入一條數據看看能否寫入
mysql> insert into nongkaige.ziyi values (3,'huanglihua');

PXf6SK.png

2、在nongziyi27這台主機插入一條數據看看能否寫入
mysql> insert into nongkaige.ziyi values (4,'nongkaige');

PXfgyD.png

3、在nongziyi29這台主機插入一條數據看看能否寫入
mysql> insert into nongkaige.ziyi values (5,'pipixia');

PXf2Oe.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM