Mysql搭建mgr單主,多主組複製

安裝環境

3臺服務器搭建3節點MGR集羣,MySQL版本5.7.27,操作系統版本CentOS 7.6。


10.10.10.91  mysql01

10.10.10.92  mysql02

10.10.10.93  mysql03

爲了方便實驗,關閉所有節點的防火牆


[root@mysql01 ~]# systemctl stop firewalld

[root@mysql01 ~]# systemctl disable firewalld

所有節點的selinux設置爲disabled


[root@mysql01 ~]# getenforce

Disabled

配置各主機名和ip映射,所有節點配置一樣


[root@mysql01 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.10.91  mysql01

10.10.10.92  mysql02

10.10.10.93  mysql03



安裝步驟

官網下載5.7安裝包  mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,建立安裝目錄/mysql和數據目錄/data/mysql,解壓壓縮包

[root@mysql01 ~]#mkdir /mysql

[root@mysql01 ~]#mkdir /data/mysql

[root@mysql01 ~]# cd /softwares/

[root@mysql01 softwares]#tar -zxvf   mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz 

[root@mysql01 softwares]# cd mysql-5.7.27-linux-glibc2.12-x86_64

[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]# cp -rf * /mysql

[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]#chown -R mysql.mysql /mysql /data/mysql




#配置環境變量


vi /root/.bash_profile

# .bash_profile


# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi


# User specific environment and startup programs


#PATH=$PATH:$HOME/bin

PATH=$PATH:$HOME/bin:/mysql/bin:/mysql/lib:/mysql

export PATH



配置完畢後source /root/.bash_profile生效


配置my.cnf


group_replication_group_name是通過select uuid()得來,所有的庫唯一

[root@mysql01 mysql]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

server_id=1

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="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.91:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE







[root@mysql02 software]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

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="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.92:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE




[root@mysql03 mysql]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

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="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.93:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE





組複製部分配置參數說明:


group_replication變量使用的loose-前綴是指示Server啓用時尚未加載複製插件也將繼續啓動

transaction_write_set_extraction = XXHASH64

##指示Server必須爲每個事務收集寫集合,並使用XXHASH64哈希算法將其編碼爲散列

loose-group_replication_group_name="01e5fb97-be64-41f7-bafd-3afc7a6ab555"

##表示將加入或者創建的複製組命名爲01e5fb97-be64-41f7-bafd-3afc7a6ab555

##可自定義(通過cat /proc/sys/kernel/random/uuid)

loose-group_replication_start_on_boot=off 

##設置爲Server啓動時不自動啓動組複製

loose-group_replication_local_address="10.10.10.91:33061" 

##綁定本地的10.10.10.91及33061端口接受其他組成員的連接,IP地址必須爲其他組成員可正常訪問

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

##本行爲告訴服務器當服務器加入組時,應當連接到10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061

##這些種子服務器進行配置。本設置可以不是全部的組成員服務地址。

loose-group_replication_bootstrap_group = off 

##配置是否自動引導組

loose-group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″

##配置白名單,默認情況下只允許10.10.10.x連接到複製組,如果是其他IP則需要配置。

3.4初始化並啓動各數據庫節點

/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir=/data/mysql --datadir=/data/mysql


/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &




[root@mysql01 ~]# mysql -uroot -p -S /data/mysql/mysql.sock

# 所有的節點都執行安裝MGR插件

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


#所有的節點都執行設置複製賬號

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER repl@'%' IDENTIFIED BY '123';

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

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';



# 啓動MGR,在主庫(10.10.10.91)上執行

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

# 查看MGR組信息

mysql> SELECT * FROM performance_schema.replication_group_members;



# 其他節點加入MGR,在從庫(10.10.10.92,10.10.10.93)上執行

mysql> START GROUP_REPLICATION;





啓動MGR單主模式

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

Query OK, 0 rows affected (0.00 sec)


mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected (2.10 sec)


mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec)


mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

1 row in set (0.00 sec)

# 查看MGR組信息

mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02     |        3306 | ONLINE       |

| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

3 rows in set (0.00 sec)


可以看到,3個節點狀態爲online,並且主節點爲10.10.10.91,只有主節點可以寫入,其他節點只讀,MGR單主模式搭建成功。






切換至多主模式

MGR切換模式

需要重新啓動組複製,因些需要在所有節點上先關閉組複製,設置 group_replication_single_primary_mode=OFF 等參數,再啓動組複製。

# 停止組複製(所有節點執行):

mysql> stop group_replication;

mysql> set global group_replication_single_primary_mode=OFF;

mysql> set global group_replication_enforce_update_everywhere_checks=ON;




mysql> stop group_replication;

Query OK, 0 rows affected (9.51 sec)


mysql> set global group_replication_single_primary_mode=OFF;

Query OK, 0 rows affected (0.00 sec)


mysql> set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec)


mysql> 



# 隨便選擇某個節點執行

mysql> SET GLOBAL group_replication_bootstrap_group=ON; 

mysql> START GROUP_REPLICATION; 

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;




mysql> SET GLOBAL group_replication_bootstrap_group=ON; 

Query OK, 0 rows affected (0.00 sec)


mysql> START GROUP_REPLICATION; 

Query OK, 0 rows affected (2.02 sec)


mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec)




其他節點執行



START GROUP_REPLICATION; 





mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02     |        3306 | ONLINE       |

| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

3 rows in set (0.00 sec)


mysql> 




參考

https://www.cnblogs.com/kevingrace/p/10470226.html

https://www.cnblogs.com/kevingrace/p/10470226.html


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