OneProxy :: 中间件从入门到精通系列之六,如何调整Slave节点的流量权重?

OneProxy是一款高效的数据库访问中间件(软件下载),具备连接池故障切换读写分离分库分表SQL防火墙SQL监控等多项实用功能;使用C语言开发,超过200个并发客户端时,可以做到基本无损转发;可以省去客户端应用的开发和配置工作量,让你迅速构建强大的数据库系统来支持业务的高速发展。

在前面的五篇中,分别讲了如下内容:

如果没有看过的,请先按顺序看一下这四篇,以便于更好地理解OneProxy的配置。虽然从技术上可以快速透明地搭建起一套读写分离集群了,但读写分离在业务前面因为主从复制存在时延而变得并不完全透明,这一点需要特别注意。

在一主多备的情况下,不同的备库在软硬件(如CPU型号、Core的数量、操作系统版本等)、以及网络等方面也会有差异,有必要不同的节点给于不同的权重比例。这个问题涉及到非常复杂的负载均衡(Load Balance)算法,但没有一种是绝对公平的,比如最多连接数算法将查询引导到有最多空闲连接的节点上,考虑到不同的SQL执行的成本是不一样的,也并不是公平的;又比如根据后端的Load值来分配流量,将SQL引导到负载最轻的节点,则忽略了网络的因素。

在默认情况下,OneProxy认为的有的Slave节点都是同一配置,即处理能力是相同的,所以采用了一种依次轮询的方法来保证相对公平,这个算法,有不少用户反馈了不同的Slave机器在CPU核数、内存、IO设备等方面的差异,强烈要求我们增加权重调节功能,这是一个非常合理的需求。

在OneProxy中可以在启动文件(参考第一篇第二篇)中指定某节点的能力系数(简称power,值的范围为1-5,数值越大表示能力越强),如下所示:

......
# format host:port@group_name:power
proxy-slave-addresses.1 = 127.0.0.1:3306@server1:1
proxy-slave-addresses.1 = 127.0.0.1:3307@server1:2
proxy-slave-addresses.1 = 127.0.0.1:3308@server1:1
......

在上述配置中,3307端口会随受50%的流量,3306和3308端口各承担25%。但如果3306节点不可用,则3307端口会承担66%的流量,而3308则承担34%的流量。这个权重值(或称Power值)不能自动调节,默认值都为1,即大家都是对等的。比如机器的CPU数最小为4核,最大为12核,则4核机器的能力值为1,8核机器的能力值为2,而12核机器的能力值为3。也可以在运行时通过管理端口动态调整,命令如下所示:

set power '127.0.0.1:3306' 2
set power '127.0.0.1:3307' 1
set power '127.0.0.1:3308' 2

我们也在研究如何能够自动调整流量权重,此功能为企业版本特有,如需要使用此功能,则需要你支付一定的商业费用。如果你有更好的建议,可以发邮件告诉我们。