暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ProxySQL从实例宕机注意

雷雷DBA 2022-05-25
670

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,可以解决此问题。  


文章转载自雷雷DBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论