MYSQL Group Replication搭建過程記錄

abstractcyj發表於2019-01-23

1. 環境準備
作業系統redhat linux 6.8
虛擬機器3臺
一臺用於primary, 另外兩臺用於做secondary
注意:
請先設定好各個主機的hostname與/etc/hosts
mysql版本: mysql-5.7.20
  主名        ip地址      在mgr中的角色

mgrhost01       192.168.43.143      primary

mgrhost02    192.168.43.144      seconde

mgrhost03    192.168.43.145      seconde

2. 安裝mysql資料服務
 cd /tmp/
 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

 tar -xvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
 cd /usr/local/
 ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql

注意:三個環境都需要安裝

在三臺主機上執行以下命令:
mkdir -p /database/mysql/data/3306
useradd mysql
chown -R mysql:mysql /database/mysql/data/3306
chown -R mysql:mysql /usr/local/mysql*

3.配置mysql服務
三臺主機都增加配置檔案: /etc/my.cnf

其中143的配置檔案內容:
basedir=/usr/local/mysql/

datadir=/database/mysql/data/3306

port=3306

socket=/tmp/mysql.sock

server_id=143

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=mysql-bin

binlog_format=row

relay-log-recovery=1

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address= "192.168.43.143:33060"

loose-group_replication_group_seeds= "192.168.43.143:33060,192.168.43.144:33060,192.168.43.145:33060"

loose-group_replication_bootstrap_group= off

192.168.43.144的/etc/my.cnf

[mysqld]

basedir=/usr/local/mysql/

datadir=/database/mysql/data/3306

port=3306

socket=/tmp/mysql.sock

server_id=144

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=mysql-bin

binlog_format=row


relay-log-recovery=1

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address= "192.168.43.144:33060"

loose-group_replication_group_seeds= "192.168.43.143:33060,192.168.43.144:33060,192.168.43.145:3306"

loose-group_replication_bootstrap_group= off

192.168.43.145的/etc/my.cnf
[mysqld]

basedir=/usr/local/mysql/

datadir=/database/mysql/data/3306

port=3306

socket=/tmp/mysql.sock

server_id=145

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=mysql-bin

binlog_format=row

relay-log-recovery=1

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address= "192.168.43.145:33060"

loose-group_replication_group_seeds= "192.168.43.143:33060,192.168.43.144:33060,192.168.43.145:3306"

loose-group_replication_bootstrap_group= off


在這裡有一些技術細節要說明一下:

    上面的三個配置檔案省略了所有不必要的配置項、但是看起來還是有點多、這些都是mgr環境要求的。

    server_id 每個例項都要不要樣

    loose-group_replication_group_name:為mgr高可用組起一個名字,這個名字一定要是uuid格式的。

    loose-group_replication_local_address:mgr各例項之前都是要進行通訊的、這個配置項設定的就是本例項所監聽的ip:埠

    loose-group_replication_group_seeds:各mgr例項所監聽的ip:埠資訊


三個環境初始化mysql(注意,此處mysql的root使用者密碼會被設定為空值):
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/database/mysql/data/3306/ --user=mysql --initialize-insecure

三個環境將mysql加入系統服務
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld

chkconfig mysqld on

修改環境變數:
echo 'PATH=/usr/local/mysql/bin/:$PATH' >>/etc/profile

啟動mysql服務:
service mysqld start

停止mysql服務:
service mysqld stop

4.配置MGR

  4.1 建立mgr所需的使用者(第一個節點)
  set sql_log_bin=0;

    create user mgruser@'%' identified by 'mtls@352';

    grant replication slave,replication client on *.* to mgruser@'%';

    create user mgruser@'127.0.0.1' identified by 'mtls@352';

    grant replication slave,replication client on *.* to mgruser@'127.0.0.1';

    create user mgruser@'localhost' identified by 'mtls@352';

    grant replication slave,replication client on *.* to mgruser@'localhost';

set sql_log_bin=1;

 

 4.2 配置複製所使用的使用者
    change master to

    master_user='mgruser',

    master_password='123456'

    for channel 'group_replication_recovery';
  

4.3 安裝MGR外掛     install plugin group_replication soname 'group_replication.so';

  


4.4.  初始化一個複製組
    set global group_replication_bootstrap_group=on;

start group_replication;

set global group_replication_bootstrap_group=off;

   

4.5. 配置MGR的第二個節點
set sql_log_bin=0;

    create user mgruser@'%' identified by '123456';

    grant replication slave,replication client on *.* to mgruser@'%';

    create user mgruser@'127.0.0.1' identified by '123456';

    grant replication slave,replication client on *.* to mgruser@'127.0.0.1';

    create user mgruser@'localhost' identified by '123456';

    grant replication slave,replication client on *.* to mgruser@'localhost';

set sql_log_bin=1;

 change master to

    master_user='mgruser',

    master_password='123456'

    for channel 'group_replication_recovery';

   

install plugin group_replication soname 'group_replication.so'; start group_replication;


使用以上指令碼依次處理剩餘節點。

驗證:

至此,配置完成

mgr中所有的結點都屬於一個邏輯上的組、這個組就像是QQ群一樣、是由群主建起來的、有了這個上組之後、其它的結點就可以加入到這個組中來了。


搭建中的注意項:

1.       安裝虛擬機器作業系統時,因hostname安裝時未能設定好,修改了hostname, 重啟了作業系統之後,group_replication不能正常啟動
mysql> start group_replication;

set global group_replication_bootstrap_group=off;

ERROR 3094 (HY000): The START GROUP_REPLICATION command failed as the applier module failed to start.
 

在引數檔案/etc/my.cnf中加入了relay-log-recovery=1之後,才正常啟動複製

2. 安裝mysql服務前,最好先設定好hostname與/etc/hosts

本案例中/etc/hosts的內容為:

192.168.43.143 mgrhost01

192.168.43.144 mgrhost02

192.168.43.145 mgrhost03

3. select * from performance_schema.replication_group_members ; 這個SQL查詢的列的member_state欄位應都為state才是正常的


參考: http://www.cnblogs.com/JiangLe/p/6727281.html
      https://haofly.net/mysql-master-slave/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-2159443/,如需轉載,請註明出處,否則將追究法律責任。

相關文章