MySQL中间件之ProxySQL(15):ProxySQL代理MySQL组复制 (3)

连上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\G

4.添加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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzdgy.html