ProxySQL从实例宕机注意
--2022-05-25 春雷
1、问题
ProxySQL的配置:
【mysql_servers 配置】:
组1 主IP 权重1
组2 从IP1 权重1
组2 从IP2 权重1
组2为读组,组1位写组
【mysql_query_rules配置】:
mysql_query_rules表的match_digest: ^SELECT ,destination_hostgroup: 2
即:select开头的查询SQL,都会转到group 2
【现象】:
此时,如果此时2个从库均宕掉,会导致访问报错,即ProxySQL不会访问存活的主实例。
测试版本:ProxySQL版本2.0.13,ProxySQL2.3.2
下面对此情况进行测试:
2、测试
【mysql_servers配置】:

【模拟正常查询访问】:
for i in {1..1000};do mysql -ulcl_wr -pxxx -h中间件IP -P6666 -e "select * from lcl.test where id=2";sleep 2;done
【模拟所有从库宕掉】:
关闭从实例
【查看访问情况】:
关闭从实例前,可以正常访问
关闭2个从实例后,访问报错
【如图】:

3、解决方案
方案:将主实例添加至组2,并调整权重,减少访问主库
主实例权重:9999999
从实例权重:9999999
主从权重:1
【手动修改如下】:
insert into mysql_servers values (2,'10.1.1.1',6666,0,'ONLINE',1,0,5000,3,0,5000,'master_slave');
update mysql_servers set weight=9999999 where hostname='10.2.2.2';
update mysql_servers set weight=9999999 where hostname='10.3.3.3';
update mysql_servers set weight=9999999 where hostname='10.1.1.1' and hostgroup_id=1;
load mysql servers to runtime;
【最终如下】:

【访问情况】:
手动更改ProxySQL得mysql_servers配置:添加主实例到group 2后,可以正常访问,且都连接存活的主实例
开启从实例,正常访问

【查看中间件日志】

4、结论
为防止ProxySQL在所有从实例宕掉无法查询数据库的问题,需要将主实例添加至当前mysql_servers的组2 ,改权重为1,其他权重为 9999999,可以解决此问题。




