MySQL8.0配置MGR


環境

CentOS 7

MySQL 8.0

數據庫節點:

192.168.6.151 node1 server-id為1
192.168.6.152 node2 server-id為2
192.168.6.153 node3 server-id為3

安裝MySQL8.0

yum localinstall -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p

修改密碼

set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
flush privileges;
exit;

配置Host

vim /etc/hosts
192.168.6.151 node1
192.168.6.152 node2
192.168.6.153 node3

修改My.cnf配置文件

在node1節點,/etc/my.cnf 修改

[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
         
symbolic-links = 0
         
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
 
#開啟GTID,必須開啟
gtid_mode=ON
#強制GTID的一致性
enforce_gtid_consistency=ON
 
#binlog格式,MGR要求必須是ROW,不過就算不是MGR,也最好用row
binlog_format=row
#server-id必須是唯一的
server-id = 1
#MGR使用樂觀鎖,所以官網建議隔離級別是RC,減少鎖粒度
transaction_isolation = READ-COMMITTED
#因為集群會在故障恢復時互相檢查binlog的數據,
#所以需要記錄下集群內其他服務器發過來已經執行過的binlog,按GTID來區分是否執行過.
log-slave-updates=1
#binlog校驗規則,5.6之后的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE
binlog_checksum=NONE
#基於安全的考慮,MGR集群要求復制模式要改成slave記錄記錄到表中,不然就報錯
master_info_repository=TABLE
#同上配套
relay_log_info_repository=TABLE
 
#組復制設置
#記錄事務的算法,官網建議設置該參數使用 XXHASH64 算法
transaction_write_set_extraction = XXHASH64
#相當於此GROUP的名字,是UUID值,不能和集群內其他GTID值的UUID混用,可用uuidgen來生成一個新的,
#主要是用來區分整個內網里邊的各個不同的GROUP,而且也是這個group內的GTID值的UUID
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
#IP地址白名單,默認只添加127.0.0.1,不會允許來自外部主機的連接,按需安全設置
loose-group_replication_ip_whitelist = '127.0.0.1/8,192.168.6.0/24'
#是否隨服務器啟動而自動啟動組復制,不建議直接啟動,怕故障恢復時有擾亂數據准確性的特殊情況
loose-group_replication_start_on_boot = OFF
#本地MGR的IP地址和端口,host:port,是MGR的端口,不是數據庫的端口
loose-group_replication_local_address = '192.168.6.151:33081'
#需要接受本MGR實例控制的服務器IP地址和端口,是MGR的端口,不是數據庫的端口
loose-group_replication_group_seeds = '192.168.6.151:33081,192.168.6.152:33081,192.168.6.153:33081'
#開啟引導模式,添加組成員,用於第一次搭建MGR或重建MGR的時候使用,只需要在集群內的其中一台開啟,
loose-group_replication_bootstrap_group = OFF
#是否啟動單主模式,如果啟動,則本實例是主庫,提供讀寫,其他實例僅提供讀,如果為off就是多主模式了
loose-group_replication_single_primary_mode = ON
#多主模式下,強制檢查每一個實例是否允許該操作,如果不是多主,可以關閉
loose-group_replication_enforce_update_everywhere_checks = on

將node1的文件發送到node2和node3

rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.152:/etc/
rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.153:/etc/

修改server-id和loose-group_replication_local_address的相關值

重啟mysql

systemctl restart mysqld

安裝插件

mysql -uroot -p123456
install PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

配置賬號

SET SQL_LOG_BIN=0;
SET GLOBAL validate_password.policy=0;
SET GLOBAL validate_password.length=1;
CREATE USER repl@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

 啟動MGR單主模式

在node1節點,啟動引導,進入mysql服務端

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;

在node2\node3節點,進入mysql服務端

START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;

 切換到MGR多主模式

在所有數據庫節點,執行

stop group_replication;
set global group_replication_single_primary_mode=OFF;
set global group_replication_enforce_update_everywhere_checks=ON;

在node1節點,執行

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

在node2、node3節點,執行

START GROUP_REPLICATION;

查看MGR信息

SELECT * FROM performance_schema.replication_group_members;

故障切換

多主模式

在node3上模擬故障

systemctl stop mysqld

在其它節點,如node1上,查詢MGR信息

 

 可以看到其它節點正常進行同步。

在node3節點故障恢復

systemctl start mysqld

需要手動激活該節點的組復制功能(注意配置文件my.cnf中相關設置

START GROUP_REPLICATION;

 

 單主模式

切換回單主模式

所有數據庫節點停止MGR

stop group_replication;
set global group_replication_enforce_update_everywhere_checks=OFF;
set global group_replication_single_primary_mode=ON;

選擇node1節點,作為主庫

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

其它節點(node2、node3),執行

START GROUP_REPLICATION;

查詢MGR狀態

SELECT * FROM performance_schema.replication_group_members;

 

 在主節點node1模擬故障,在node2查詢MGR狀態

 

 可以看到主節點掛了,通過選舉程序從從庫節點中選擇一個作為主節點。

node1故障恢復之后,需要手動激活該節點的組復制功能

START GROUP_REPLICATION;


免責聲明!

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



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