连上node1节点,创建用于复制的用户。我这里创建的用户为repl,密码为P@ssword1!。
create user repl@'192.168.100.%' identified by 'P@ssword1!'; grant replication slave on *.* to repl@'192.168.100.%';在node1上配置恢复通道。
change master to master_user='repl', master_password='P@ssword1!' for channel 'group_replication_recovery';安装组复制插件。
install plugin group_replication soname 'group_replication.so';引导、启动组复制功能。
set @@global.group_replication_bootstrap_group=on; start group_replication; set @@global.group_replication_bootstrap_group=off;查看node1是否ONLINE。
select * from performance_schema.replication_group_members\G4.添加node2、node3到复制组中
先启动node2和node3的mysql服务:
systemctl start mysqld再在node2和node3上指定恢复通道,从Donor处恢复数据。
change master to master_user='repl', master_password='P@ssword1!' for channel 'group_replication_recovery';最后,在node2和node3上安装组复制插件,并启动组复制功能即可。
install plugin group_replication soname 'group_replication.so'; start group_replication;在任意一个节点上查看node1、node2、node3是否都是ONLINE。
select * from performance_schema.replication_group_members\G *************************** 1. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: a5165443-6aec-11e8-a8f6-000c29827955 MEMBER_HOST: node1.longshuai.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE *************************** 2. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: ba505889-6aec-11e8-a864-000c29b0bec4 MEMBER_HOST: node2.longshuai.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE *************************** 3. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: bf12fe97-6aec-11e8-a909-000c29e55287 MEMBER_HOST: node3.longshuai.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE至此,node1、node2、node3组成的3节点单主模型的组复制配置完成。下面配置ProxySQL。
1.4 配置ProxySQL根据前文的分析,ProxySQL代理单主模型组复制时,如果想让ProxySQL来自动调整节点所属读、写组,需要开启read_only监控,并在mysql_group_replication_hostgroups表中插入一条记录。
假设4种组的hostgroup_id为:
写组 -->hg=10
备写组 -->hg=20
读组 -->hg=30
离线组 -->hg=40
安装ProxySQL的过程略。以下是配置ProxySQL的过程。
1.连上ProxySQL的Admin管理接口
mysql -uadmin -padmin -h127.0.0.1 -P6032 --prompt 'Admin> '2.向 mysql_servers 表中添加后端节点node1、node2和node3
delete from mysql_servers; insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.100.22',3306), (10,'192.168.100.23',3306), (10,'192.168.100.24',3306); load mysql servers to runtime; save mysql servers to disk;查看3个节点是否都是ONLINE
admin> select hostgroup_id,hostname,port,status,weight from mysql_servers; +--------------+----------------+------+--------+--------+ | hostgroup_id | hostname | port | status | weight | +--------------+----------------+------+--------+--------+ | 10 | 192.168.100.22 | 3306 | ONLINE | 1 | | 10 | 192.168.100.23 | 3306 | ONLINE | 1 | | 10 | 192.168.100.24 | 3306 | ONLINE | 1 | +--------------+----------------+------+--------+--------+3.监控后端节点
首先,在node1上创建ProxySQL用于监控的用户。注意,这里监控用户的权限和ProxySQL代理普通mysql实例不一样,ProxySQL代理组复制时,是从MGR的系统视图sys.gr_member_routing_candidate_status中获取监控指标,所以授予监控用户对该视图的查询权限,因为无需从show slave status中获取Seconds_Behind_Master,所以无需replication client权限。
# 在node1上执行: mysql> create user monitor@'192.168.100.%' identified by 'P@ssword1!'; mysql> grant select on sys.* to monitor@'192.168.100.%';然后回到ProxySQL上配置监控。
set mysql-monitor_username='monitor'; set mysql-monitor_password='P@ssword1!'; load mysql variables to runtime; save mysql variables to disk;4.创建系统视图sys.gr_member_routing_candidate_status
在node1节点上,创建系统视图sys.gr_member_routing_candidate_status,该视图将为ProxySQL提供组复制相关的监控状态指标。
如果前面下载了addition_to_sys.sql脚本,执行如下语句导入MySQL即可。
mysql -uroot -pP@ssword1! < addition_to_sys.sql