ZBLOG

proxySQL配置了读写分离,如果备节点挂了,如何自动将读请求路由到主库中

在 ProxySQL 中配置读写分离后,若备节点(Replica)挂了,可以通过以下机制自动将读请求路由到主库(Primary),确保服务可用性:


1. 健康检查与自动故障转移

ProxySQL 会定期对后端节点进行健康检查(通过 mysql_servers 表配置)。如果备节点不可用,ProxySQL 会自动将其标记为 OFFLINE_HARD 并从读组中移除。

关键配置步骤:

  • 启用健康检查

    1. UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-monitor_enabled';
  • 设置监控频率(例如每3秒检查一次):

    1. UPDATE global_variables SET variable_value='3000' WHERE variable_name='mysql-monitor_connect_interval';
  • 定义监控用户(需在主备库创建):

    1. UPDATE global_variables SET variable_value='monitor_user' WHERE variable_name='mysql-monitor_username';
    2. UPDATE global_variables SET variable_value='monitor_password' WHERE variable_name='mysql-monitor_password';

2. 读写分离规则调整

默认情况下,ProxySQL 的读组(如 hostgroup_id=10)只包含备节点。当备节点宕机时,需确保读流量可以 fallback 到主库(如 hostgroup_id=20)。

修改查询规则

  1. -- 检查现有规则
  2. SELECT * FROM mysql_query_rules;
  3. -- 添加或修改规则:若备节点不可用,则将读请求路由到主库
  4. INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply)
  5. VALUES (
  6. 100,
  7. 1,
  8. '^SELECT.*FOR UPDATE', -- OLTP写操作仍走主库
  9. 20, -- hostgroup_id=20(主库)
  10. 1
  11. ), (
  12. 101,
  13. 1,
  14. '^SELECT', -- 普通读操作默认走备库
  15. 10, -- hostgroup_id=10(备库)
  16. 1
  17. ), (
  18. 102,
  19. 1,
  20. '^SELECT', -- Fallback规则:若无可用备库则路由到主库
  21. 20, -- hostgroup_id=20(主库)
  22. 0 -- apply=0表示仅在前面的规则不匹配时生效
  23. );
  24. -- (可选)设置规则的延迟生效条件,例如当备节点存活数<1时启用fallback
  25. UPDATE mysql_query_rules SET comment="fallback_to_primary_if_no_replica" WHERE rule_id=102;

3. Galera/Group Replication支持

如果使用集群架构(如MySQL Group Replication或Galera),可配置 writer_hostgroupbackup_writer_hostgroup实现高可用:

  1. UPDATE mysql_group_replication_hostgroups
  2. SET writer_hostgroup=20, backup_writer_hostgroup=30, reader_hostgroup=10;

4. ProxySQL Cluster模式

在多实例ProxySQL集群中,同步配置以确保所有节点感知后端状态变化:

  1. LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;
  2. LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;

验证与调试

  • 查看节点状态

    1. SELECT hostname, status FROM runtime_mysql_servers;
  • 监控日志

    1. tail -f /var/lib/proxysql/proxysql.log | grep "monitor"

通过以上配置,当备节点宕机时,ProxySQL会自动将读请求路由到主库。恢复后可手动或自动重新加入读组。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23530

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?