MySQL架构-MGR+ProxySQL部署

系统环境:

  • centos 7.2.1511
  • mysql 5.7.24-27
  • proxysql 2.0.1

MGR(mysql group replication) 属于MySQL 官方的一个高可用架构。MGR安装不需要提前做主从复制。
ProxySQL是一种高性能,高可用性的协议感知代理,适用于MySQL和分支(如Percona Server和MariaDB)。


搭建部署MGR集群:

所有数据库节点需要绑定HOST主机:

cat >>/etc/hosts<<EOF
172.17.0.56   mysql-note-01
172.17.0.57   mysql-note-02
172.17.0.58   mysql-note-03
EOF

修改my.cnf配置文件:

  • server_id 范围为:1~9

添加相关MGR插件信息:

binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="3db33b36-0e51-409f-a61d-c99756e90155"
loose-group_replication_start_on_boot=off
#MGR本机IP地址
loose-group_replication_local_address= "172.17.0.56:23306"
#MGR白名单地址信息
loose-group_replication_ip_whitelist = "172.17.0.56,172.17.0.57,172.17.0.58"
#MGR集群所包含的节点信息
loose-group_replication_group_seeds= "172.17.0.56:23306,172.17.0.57:23306,172.17.0.58:23306"
loose-group_replication_bootstrap_group= off

以上配置信息是单主模式,如果想要使用多主模式需要额外添加以下信息即可

loose-group_replication_single_primary_mode=off
loose-group_replication_enforce_update_everywhere_checks=on

第一个节点配置:

SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'172.17.0.%' IDENTIFIED BY '123123';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user',
MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SET GLOBAL group_replication_bootstrap_group=ON;
start group_replication;

其它节点配置:

SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'172.17.0.%' IDENTIFIED BY '123123';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user',
MASTER_PASSWORD='123123' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
reset master;
start group_replication;
  • 查看是否MGR集群节点信息
SELECT * FROM performance_schema.replication_group_members;

配置ProxySQL读写分离:

在proxysql节点中添加主机:

INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'172.17.0.56',3306);
INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'172.17.0.57',3306);
INSERT INTO mysql_servers (hostgroup_id,hostname,port) values (2,'172.17.0.58',3306);

在proxysql配置mysql_group_replication_hostgroups表:

INSERT INTO mysql_group_replication_hostgroups (
    writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,
    offline_hostgroup,active,max_writers,writer_is_also_reader,
    max_transactions_behind) values (2,4,3,1,1,1,0,100);

mysql_group_replication_hostgroups说明:

字段名 描述
writer_hostgroup 包含作者的所有成员的主机组的id
backup_writer_hostgroup 在多主模式下运行有多个写入节点,如果这些节点的数量大于max_writers,则额外节点位于该备份写入组中
reader_hostgroup 包含read_only中所有成员的主机组的id
offline_hostgroup 包含主机不在线或不属于该组的主机组的ID
active 启用后,ProxySQL将监视组并根据相应的主机组移动服务器
max_writers 如果是多主模式下的组,则限制写入程序主机组中的节点数量
writer_is_also_reader 布尔值,0或1,启用时,写入程序主机组中的节点也将属于读取器主机组
max_transactions_behind 如果该值大于0,则它定义节点在应用组中的事务时可能滞后的程度

保存修改配置并生效:

SAVE  MYSQL SERVERS TO DISK ;
LOAD MYSQL SERVERS TO RUNTIME ;

在MGR数据库节点中下载SQL脚本并导入:

wget https://down.niknk.com/MYSQL/addition_to_sys.sql
mysql -uroot -proot -S /data/mysql_3306_core/run/mysql_3306_core.sock < addition_to_sys.sql

在MGR数据库节点中创建监控账户:

GRANT SELECT on sys.* to 'monitor'@'172.17.0.%' identified by 'monitor';
FLUSH PRIVILEGES ;

查看导入的视图信息:

SELECT * FROM sys.gr_member_routing_candidate_status;

在proxysql节点中查看MGR中的节点信息状态:

SELECT hostgroup_id,hostname,status FROM runtime_mysql_servers ;

在proxysql节点中配置读写分离规则:

INSERT INTO  mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
VALUES (1,1,'^SELECT.*FOR UPDATE$',2,1),(2,1,'^SELECT',3,1);

保存添加的规则并生效:

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

MGR查询相关:

查看MGR主节点所在位置:

SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME= 'group_replication_primary_member';

查看MGR节点是否存活

SELECT member_state FROM performance_schema.replication_group_members
WHERE member_id=@@server_uuid ;
SELECT * FROM performance_schema.global_variables
WHERE variable_name in ('read_only','super_read_only');

查看主从延迟

SELECT RECEIVED_TRANSACTION_SET FROM performance_schema.replication_connection_status
WHERE Channel_name = 'group_replication_applier' ;
SELECT @@global.gtid_executed;

相关网站:

MySQL Group Replication ProxySQL中的本机支持
ProxySQL代理MySQL组复制

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注