You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ProxySQL中Galera节点初始hostgroup分配对负载均衡的影响及最佳实践

ProxySQL + Galera 节点初始分配问题解答

背景说明

我们拥有三个Galera节点:172.17.0.2、172.17.0.3、172.17.0.4,对应的主机组配置如下:

  • writer_hostgroup=0(写入节点组)
  • reader_hostgroup=1(读取节点组)
  • backup_writer_hostgroup=2(备用写入节点组)
  • offline_hostgroup=4(离线节点组)

计划配置mysql_galera_hostgroups,核心参数设置:

  • max_writers=1(仅保留1个活跃写入节点)
  • writer_is_also_reader=1(所有节点均可承接读请求)
  • 所有服务器默认weight=1

在配置mysql_galera_hostgroups前,需将节点添加到mysql_servers表并分配初始hostgroup_id,现有三种分配方案:

  1. 全部节点初始设为写入节点(hostgroup=0)
  2. 两个节点设为写入节点,一个设为读取节点(两个hostgroup=0,一个hostgroup=1)
  3. 全部节点初始设为读取节点(hostgroup=1)

问题1:mysql_servers中的初始节点分配是否会影响ProxySQL正确管理写入、备份及读节点?全部设为writer_hostgroup、全部设为reader_hostgroup或混合分配是否存在差异?是否仅当writer_is_also_reader=0时初始配置才起作用?

解答

  • 初始分配仅在ProxySQL完成Galera节点状态检测前有短期影响,不会干扰ProxySQL基于Galera规则的长期自动管理。一旦ProxySQL识别出集群状态(如节点的wsrep_ready、wsrep_local_state状态),就会按照mysql_galera_hostgroups的配置参数自动调整节点所属的主机组,完全覆盖初始分配。
  • 三种初始分配方式的差异仅体现在启动初期的临时状态:
    • 全部设为写入组:启动后所有节点暂时接收写请求,直到ProxySQL选出1个主写节点,其余节点自动调整为读节点/备用写入节点。
    • 全部设为读节点:启动后所有节点暂时只处理读请求,直到ProxySQL完成状态探测并将选中的主写节点移入写入组。
    • 混合分配:同样只是启动阶段的临时状态,最终会被ProxySQL的Galera管理逻辑覆盖。
  • 并非仅当writer_is_also_reader=0时初始配置才起作用。无论该参数设置为何,初始分配都只是启动初期的过渡状态,ProxySQL完成状态探测后就会按照预设规则重新分配主机组。

问题2:若mysql_servers中两个节点在writer_hostgroup,一个在reader_hostgroup,同时mysql_galera_hostgroups设置max_writers=1,ProxySQL是否会忽略初始hostgroup分配,随机选择一个节点作为写入节点(即初始在reader_hostgroup的节点可能成为写入节点,初始在writer_hostgroup的节点转为读节点)?

解答

  • 是的,ProxySQL会完全忽略初始的hostgroup分配,仅基于Galera节点的健康状态和权重选择主写节点。
  • 只要初始在reader_hostgroup的节点处于正常Galera状态(wsrep_ready=ON、wsrep_local_state=4),就有同等概率被选为写入节点(因为所有节点weight=1);原本在writer_hostgroup的节点如果未被选中为主写节点,会被自动调整为读节点(因writer_is_also_reader=1),同时进入backup_writer_hostgroup作为备用写入节点,继续承接读请求。
  • 节点被选中的优先级由weight决定,和初始分配的hostgroup无关联。

问题3:为避免故障转移或路由问题,mysql_servers中节点的初始分配有何最佳实践?

解答

  • 优先推荐将所有节点初始分配到reader_hostgroup:
    • 避免启动初期多节点同时接收写请求的情况——如果初始设为写入组,在ProxySQL完成状态检测前,可能出现多节点处理写操作,引发Galera集群短暂的写入冲突(虽然后续会同步,但可能导致写入异常)。
    • 保证启动初期读请求可以正常分流到所有节点,不会出现读路由空白。
  • 若有明确的偏好主节点,可将该节点初始设为writer_hostgroup,其余设为reader_hostgroup:
    • 这种方式能让偏好节点在启动初期优先承接写请求,后续ProxySQL会根据Galera状态自动调整,既符合启动阶段的预期,也不影响长期的自动管理。
  • 统一设置节点的weight参数:虽然初始分配会被覆盖,但weight会影响ProxySQL选择主写节点和分配读请求的优先级,需根据负载需求合理配置。
  • 避免长期使用混合分配方案:混合分配只是临时过渡状态,没有长期价值,反而可能在启动初期造成路由规则混乱。

内容的提问来源于stack exchange,提问作者PeraMika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:32:03