MySQL中间件之ProxySQL(6):管理后端节点

1.配置后端节点前的说明

为了让ProxySQL能够找到后端的MySQL节点,需要将后端的MySQL Server加入到ProxySQL中。ProxySQL的一切配置行为都是在修改main库中的对应的表,所以添加节点到ProxySQL中实际上也是通过修改相关表来实现的。

管理后端节点有几个过程:

将后端MySQL Server的主从复制结构配置好。

将后端MySQL Server节点加入到ProxySQL中。相关的表为mysql_servers。

监控后端节点。相关的表是全局变量表global_vairbles,相关的变量为mysql-monitor_开头的变量。

配置读、写组。相关的表为mysql_replication_hostgroups。

配置MySQL用户,用于发送SQL语句。相关的表为mysql_users。

几个注意点:

(1).ProxySQL是通过监控后端节点的read_only值来自动调整节点所属组的,例如read_only=1的节点会移动到读组,read_only=0的节点会移动到写组。所以,在配置读、写组之前,需要先监控后端节点。

(2).对于传统的主从复制,默认的read_only=0,所以在第一步中,各slave节点的配置文件中需要加上read_only=1。对于组复制、Galera,因为会自动强制设置非写节点的read_only=1,所以无需额外配置该属性。

(3).ProxySQL支持传统主从复制结构(即异步、半同步、gtid复制)的后端,读、写组相关的表是mysql_replication_hostgroups。还支持MySQL组复制结构的后端,相关的表是mysql_group_replication_hostgroups,还支持Galera(如percona XtraDB cluster)结构的后端,不过ProxySQL是通过scheduler调度proxysql_galera_checker.sh脚本来支持Galera的,而且目前还没有mysql_galera_hostgroups(ProxySQL 2.0才新增该表)。

本文暂时只解释mysql_servers和mysql_replication_hostgroups,组复制相关的表在在后面介绍"ProxySQL+组复制"的文章中再介绍。

完成了上面的过程后,节点就一切正常了,然后就可以去配置ProxySQL的路由规则、查询缓存、SQL语句重写等功能。这些在后面的文章会详细介绍。

在开始本文下面的配置之前,请确保已经明白如何使用Admin管理接口,以及ProxySQL的多层配置系统。

2.添加新节点:mysql_servers表

假如后端有3个节点,使用的是传统的异步复制(1 master, 2 slave)。这3个节点的IP地址为:

192.168.100.22 192.168.100.23 192.168.100.24

要加入3个后端MySQL节点,只需向mysql_servers表插入3行对应的记录即可。以下是使用了一大堆默认值的insert语句:

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.100.22',3306); insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.100.23',3306); insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.100.24',3306); load mysql servers to runtime; save mysql servers to disk;

上面的insert语句表示将后端MySQL节点192.168.100.xx:3306加入到hostgroup_id=10的组中。

其实mysql_servers表有很多字段,很多字段都有默认值,正如上面的insert语句,除了3个字段,其它使用的全是字段的默认值。

以下是mysql_servers表的字段属性。

| 字段 | 数据类型 | 允许null | 默认值 | |---------------------|----------|-----------|--------| | hostgroup_id (pk) | int | not null | 0 | | hostname (pk) | varchar | not null | 无 | | port (pk) | int | not null | 3306 | | status | varchar | not null | online | | weight | int | not null | 1 | | compression | int | not null | 0 | | max_connections | int | not null | 1000 | | max_replication_lag | int | not null | 0 | | use_ssl | int | not null | 0 | | max_latency_ms | int | not null | 0 | | comment | varchar | not null | '' |

可见,新添加一个节点时,唯一必须指定的字段就是hostname值。如果不指定hostgroup_id,那么节点将自动加入到hostgroup_id=0的组中。

各字段的意义如下:

hostgroup_id:该后端MySQL实例所在的主机组。注意,同一MySQL节点可属于多个主机组。

hostname,port:后端MySQL监听的地址和端口。就是默认3306端口的意义

status

ONLINE:该后端MySQL节点完全正常。

SHUNNED:该后端MySQL节点将暂时被ProxySQL自动避开(忽略),原因可能是一个较短时间内发生了大量连接错误,也可能是该slave与master的数据延迟太大(replication lag)。

OFFLINE_SOFT:当某后端MySQL被设置为 OFFLINE_SOFT 时,ProxySQL将不会向它发送新的请求,但该节点正在执行的事务会继续执行,直到所有事务执行完毕后会进入非激活状态。也就是说,和该后端的连接会保持到事务执行完毕。这可以实现后端节点的graceful停止、重启。

OFFLINE_HARD:当某后端MySQL被设置为 OFFLINE_HARD 时,ProxySQL将不会向它发送新的请求,该节点正在执行的事务也会立即中断。也就是直接将该后端杀掉。等价于删除该节点,或临时将其移除出组(例如出于维护的目的)。

weight:节点在组中的权重值越高,ProxySQL会发送越多请求给它们。

compression:如果该字段的值设置为大于0,ProxySQL和该后端新建的连接中,ProxySQL将会先压缩数据再传输。

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

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