14.6.2 组内权重与流量分配规则
在ProxySQL的负载均衡体系中,组内权重与流量分配决定了各后端实例的请求占比与吞吐压力。本节给出原理草图、可执行配置示例、验证命令、排错方法与练习。
原理草图:权重影响连接分配
权重概念与作用
- 同一hostgroup_id内通过weight控制连接分配比例,权重越高流量占比越大。
- weight=0节点不承载流量,但仍参与健康检查。
- 权重影响连接初始分配与重分配,是热点控制与容量规划的关键参数。
安装/环境准备示例(已安装可跳过)
# Debian/Ubuntu
sudo apt update
sudo apt install -y proxysql mysql-client
# RHEL/CentOS
sudo yum install -y proxysql mysql
预期效果:proxysql --version可输出版本信息。
权重配置与生效流程(完整可执行示例)
目标:在hostgroup 10中设置三台后端权重为6/3/1,并让一台处于weight=0仅健康检查。
-- 连接到ProxySQL管理端口
mysql -u admin -padmin -h 127.0.0.1 -P6032
-- 插入/更新后端(示例:10组4节点)
DELETE FROM mysql_servers WHERE hostgroup_id=10;
INSERT INTO mysql_servers(hostgroup_id, hostname, port, weight, max_connections)
VALUES
(10,'10.0.0.11',3306,6,200),
(10,'10.0.0.12',3306,3,150),
(10,'10.0.0.13',3306,1,100),
(10,'10.0.0.14',3306,0, 50);
-- 生效与持久化
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
关键命令解释
- mysql_servers.weight:权重比例,决定连接分配占比。
- max_connections:单节点连接上限,避免高权重节点被无限压榨。
- LOAD ... TO RUNTIME:立即生效。
- SAVE ... TO DISK:重启后保留配置。
流量分配验证示例(统计连接分布)
-- 查看运行态后端状态与权重
SELECT hostgroup_id, hostname, port, weight, status
FROM runtime_mysql_servers
WHERE hostgroup_id=10;
-- 查看连接使用情况(近似观察权重效果)
SELECT hostgroup, srv_host, srv_port, ConnUsed, ConnFree, Queries
FROM stats_mysql_connection_pool
WHERE hostgroup=10;
预期效果:ConnUsed与Queries大致呈现6:3:1趋势,weight=0节点ConnUsed=0。
流量分配规则要点
- 连接分配受权重影响,但会话保持与连接复用会导致短期偏差。
- 长连接场景需要配合连接超时与连接池策略,避免长期“锁定”到某节点。
- 读写分离场景中读组按权重分配,写组通常固定主库。
常见策略示例
- 异构硬件:高性能节点设置较高权重,如6/3/1。
- 延迟控制:延迟较高从库降低权重或临时设为0。
- 渐进扩容:新节点先设低权重(1),观察稳定后逐步提升。
排错与诊断
-- 1) 权重不生效:检查是否加载到运行态
SELECT * FROM runtime_mysql_servers WHERE hostgroup_id=10;
-- 2) 连接不均衡:检查是否存在长连接或连接复用
SELECT hostgroup, srv_host, ConnUsed, ConnFree
FROM stats_mysql_connection_pool WHERE hostgroup=10;
-- 3) 节点不接流量:检查状态是否ONLINE
SELECT hostgroup_id, hostname, port, status
FROM runtime_mysql_servers WHERE hostgroup_id=10;
常见原因:
- 忘记执行LOAD MYSQL SERVERS TO RUNTIME。
- 节点状态为OFFLINE_SOFT/HARD导致不接流量。
- 长连接导致权重效果短期不明显。
练习
1. 在hostgroup 10中将10.0.0.13权重从1调整为4,观察stats_mysql_connection_pool变化。
2. 将10.0.0.12设为weight=0并验证其ConnUsed=0。
3. 制定“扩容方案”:新增节点10.0.0.15,起始权重1,记录1小时内的Queries变化并给出调整建议。