Tidb集群中haproxy配置如何根据集群资源进行负载均衡

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本

centos7+

  • TiDB 版本

3+

  • 磁盘型号

  • 集群节点分布

tidb 12

pd 5

tikv 27

  • 数据量 & region 数量 & 副本数
  • 问题描述(我做了什么)

按照官方的最佳实践进行的haproxy配置

目前的配置是根据最少连接数进行优先连接.

如果我想实现根据节点资源进行负载;

比如某个节点的[cpu,内存,网络]占用快到的80%了,我先把这个节点踢出负载列表,等待恢复到20%或者我设定的 阈值时再把这个节点恢复到负载列表中.

这样的话该怎么配置呢?

我提这个的问题是因为现在的集群,经常会出现负载不匀的情况;

我现在12个db的负载经常不均匀,导致某几个节点经常被捅死严重的能到机器宕机.

  • 关键词

haproxy

我自己有个这样想法;

我看到源码中和文档中,tidb已经预留了很多监控接口,能查看到节点的各种状态数据;

那我是不是可以在负载前去查下这些接口,并判断是否符合阈值,再进行负载呢?

你好, 1、HAproxy 原生支持的 balance 里面没有给予具体节点负载进行动态负载均衡的算法。具体的负载算法可以查看这里: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#4-balance 建议如果当前基于连接数的均衡算法不能满足的话。可以调整其他算法试一下。比如加权轮询。 2、如果要实现基于 TiDB 的具体监控数据进行节点上下线的话。需要自己开发,欢迎后面进行分享。

谢谢老哥,已经先使用调节权重的方式,解决某个单点负载高,导致打到这个节点上的计算成为慢查询的现象了.

关于根据tidb节点资源进行负载,我是这样想的,不知道思路对不对.

参考10080端口,我在端口中加入一个GET /statusCheck,返回根据[规则]计算后的当前节点资源状态.

结合haproxy中的option httpchk GET /statusCheck 配置,在代理的时候进行对tidb节点进行健康检查.

以此实现根据资源状态进行负载.

规则,可以根据读配置文件,或者读tidb中的某个表来实现动态修改.