ZBLOG

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

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


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

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

关键配置步骤:

  • 启用健康检查

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

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

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

2. 读写分离规则调整

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

修改查询规则

-- 检查现有规则
SELECT * FROM mysql_query_rules;

-- 添加或修改规则:若备节点不可用,则将读请求路由到主库
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply) 
VALUES (
  100, 
  1, 
   '^SELECT.*FOR UPDATE',    -- OLTP写操作仍走主库
  20,                       -- hostgroup_id=20(主库)
  1
), (
  101,
  1,
   '^SELECT',               -- 普通读操作默认走备库
  10,                      -- hostgroup_id=10(备库)
  1
), (
  102,
  1,
   '^SELECT',               -- Fallback规则:若无可用备库则路由到主库
  20,                      -- hostgroup_id=20(主库)
  0                        -- apply=0表示仅在前面的规则不匹配时生效
);

-- (可选)设置规则的延迟生效条件,例如当备节点存活数<1时启用fallback
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实现高可用:

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

4. ProxySQL Cluster模式

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

LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;

验证与调试

  • 查看节点状态

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?