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

返回ProxySQL系列文章:

 

1.ProxySQL+组复制前言

在以前的ProxySQL版本中,要支持MySQL组复制(MGR,MySQL Group Replication)需要借助第三方脚本对组复制做健康检查并自动调整配置,但是从ProxySQL v1.4.0开始,已原生支持MySQL组复制的代理,在main库中也已提供mysql_group_replication_hostgroups表来控制组复制集群中的读、写组。

Admin> show tables ; +--------------------------------------------+ | tables | +--------------------------------------------+ | global_variables | | mysql_collations | | mysql_group_replication_hostgroups | | mysql_query_rules | ... | runtime_mysql_group_replication_hostgroups | ... | scheduler | +--------------------------------------------+ admin> show tables from monitor; +------------------------------------+ | tables | +------------------------------------+ | mysql_server_connect_log | | mysql_server_group_replication_log | | mysql_server_ping_log | | mysql_server_read_only_log | | mysql_server_replication_lag_log | +------------------------------------+

尽管已原生支持MGR,但仍然需要在MGR节点中创建一张额外的系统视图sys.gr_member_routing_candidate_status为ProxySQL提供监控指标。创建该视图的脚本addition_to_sys.zip我已上传。在后文需要创建该系统视图的地方,我会将这个脚本的内容贴出来。

本文先解释mysql_group_replication_hostgroups表中各字段的意义,然后按照实验环境做好各种组的分配。最后根据实验环境快速搭建单主模型的组复制环境,以及ProxySQL代理单主模型组复制的配置步骤。因为本文描述了ProxySQL代理单主、多主MGR的情形,所以搭建ProxySQL代理多主MGR也是没有任何问题的。

本文实验环境:

roles IP_address
proxysql   192.168.100.21  
node1   192.168.100.22  
node2   192.168.100.23  
node3   192.168.100.24  

1.1 mysql_group_replication_hostgroups表

该表的定义语句:

Admin> show create table mysql_group_replication_hostgroups\G *************************** 1. row *************************** table: mysql_group_replication_hostgroups Create Table: CREATE TABLE mysql_group_replication_hostgroups ( writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY, backup_writer_hostgroup INT CHECK (backup_writer_hostgroup>=0 AND backup_writer_hostgroup<>writer_hostgroup) NOT NULL, reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND backup_writer_hostgroup<>reader_hostgroup AND reader_hostgroup>0), offline_hostgroup INT NOT NULL CHECK (offline_hostgroup<>writer_hostgroup AND offline_hostgroup<>reader_hostgroup AND backup_writer_hostgroup<>offline_hostgroup AND offline_hostgroup>=0), active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1, max_writers INT NOT NULL CHECK (max_writers >= 0) DEFAULT 1, writer_is_also_reader INT CHECK (writer_is_also_reader IN (0,1)) NOT NULL DEFAULT 0, max_transactions_behind INT CHECK (max_transactions_behind>=0) NOT NULL DEFAULT 0, comment VARCHAR, UNIQUE (reader_hostgroup), UNIQUE (offline_hostgroup), UNIQUE (backup_writer_hostgroup))

各字段的意义如下:

writer_hostgroup:默认的写组。后端read_only=0的节点会自动分配到这个组中。

backup_writer_hostgroup:如果后端MySQL集群有多个节点可写并设置了max_writes字段的值,ProxySQL将会把其余的所有节点(超出max_writes)都放进备写组backup_writer_hostgroup中作为备份节点。

reader_hostgroup:负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1的节点会自动分配到这个组中。

offline_hostgroup:当ProxySQL监控并决定了某节点为OFFLINE后,会将其放进组offline_hostgroup中。

active:当启用后,ProxySQL会监控该主机组,并在不同组之间合理地移动节点。

max_writers:该字段的值决定写组writer_hostgroup中最大允许的节点数量,超出该数量的但允许写的节点都会放进备份组backup_writer_hostgroup中。

writer_is_also_reader:决定一个节点升级为写节点(放进writer_hostgroup)后是否仍然保留在reader_hostgroup组中提供读服务。

max_transactions_behind:当某节点延后于写节点时,为了防止读取到过期数据,ProxySQL可能会自动避开该节点。该字段决定最多延后写节点多少个事务(具体延后的事务数量可以从MySQL的sys.gr_member_routing_candidate_status表中的transaction_behind字段获取),延后的事务数量超出该值时,ProxySQL就会自动避开这个节点。

comment:该字段用于说明、注释,可随便定义。

需要注意的是,writer_hostgroup是主键字段,reader_hostgroup、offline_hostgroup、backup_writer_hostgroup具有唯一性,它们的值都是INT数值。

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

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