14.6.1 负载均衡策略与算法配置
本节聚焦 ProxySQL 在负载均衡中的策略与算法配置,结合 hostgroup 与调度算法实现连接与查询的均衡分配,并给出可执行示例、验证、排错与练习。
原理草图(调度与路由)#
负载均衡算法与适用场景#
- random:随机选择后端,适用于后端性能差异不大、请求分布均匀。
- round-robin:轮询分发,适合后端性能相近、稳定性要求高。
- least-connections:优先选择连接数最少后端,适用于连接时长不均、并发波动大。
- weighted:结合权重与算法分配,适用于异构硬件、灰度流量控制。
关键配置表与字段说明#
mysql_servers:后端节点与 hostgroup 定义hostgroup_id:后端组编号weight:权重,数值越大分配流量越多status:ONLINE/OFFLINE_SOFT/OFFLINE_HARDmax_connections:单后端连接上限mysql_query_rules:基于规则路由到不同 hostgroupmysql_replication_hostgroups:读写分离关系(若启用)
安装与连接(本节示例的前置)#
# 安装(以 Debian/Ubuntu 为例)
sudo apt-get update
sudo apt-get install -y proxysql
# 连接 ProxySQL 管理端口(默认 6032)
mysql -u admin -padmin -h 127.0.0.1 -P 6032
命令说明
- -u admin -padmin:默认管理用户与密码
- -P 6032:管理端口
- 连接后进入 ProxySQL 管理 SQL 控制台
配置示例:权重 + 算法 + 规则#
目标:读组 10 内两台后端权重 2:1,写组 20 为单主;读请求走读组,写请求走写组。
-- 1) 配置后端
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,max_connections,status)
VALUES
(10,'192.168.10.11',3306,200,2000,'ONLINE'),
(10,'192.168.10.12',3306,100,2000,'ONLINE'),
(20,'192.168.10.13',3306,1000,2000,'ONLINE');
-- 2) 设置读写路由规则(示例:SELECT 走读组,其他走写组)
INSERT INTO mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply)
VALUES
(100,1,'^SELECT',10,1),
(200,1,'.*',20,1);
-- 3) 应用与持久化
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
命令说明
- LOAD ... TO RUNTIME:立即生效
- SAVE ... TO DISK:持久化到磁盘配置
观察与验证#
-- 查看连接池分布与权重效果
SELECT hostgroup, srv_host, srv_port, ConnUsed, ConnFree, Status
FROM stats_mysql_connection_pool
ORDER BY hostgroup, srv_host;
预期效果
- 读组 10 内 192.168.10.11 的连接数约为 192.168.10.12 的 2 倍(非严格比例,视请求形态而定)。
故障排错清单(常见与处理)#
-- 1) 后端被标记为离线
SELECT hostgroup_id,hostname,status,comment
FROM mysql_servers;
-- 2) 路由规则未生效
SELECT rule_id,active,match_pattern,destination_hostgroup
FROM mysql_query_rules;
-- 3) 运行时与磁盘配置不一致
SELECT * FROM runtime_mysql_servers;
SELECT * FROM disk.mysql_servers;
排错思路
- status=OFFLINE_SOFT/HARD:检查后端 MySQL 可用性与健康检查
- rule_id 未生效:确认 active=1 且 LOAD ... TO RUNTIME 已执行
- 运行时/磁盘不一致:执行 SAVE 与 LOAD 保持一致
练习#
- 将读组权重从 2:1 调整为 3:1,并观察连接池变化。
- 将
least-connections适配场景写入说明,并在高并发压测下对比round-robin。 - 模拟读组其中一台 MySQL 下线(
OFFLINE_SOFT),验证读流量是否自动转移。