云上TIDB集群高可用负载均衡解决方案
云上TIDB集群高可用负载均衡解决方案
背景: 为了充分保证tidb集群的高可用性,程序连接数据库的时候可以"随机去建立连接,流量会分散打到多台负载均衡器上" 。 这样既高可用性,又能分担流量负载。
传统的解决方案是使用"LVS(NGINX)+keepAlive" , 当负载均衡器数量达到3台及其以上时候, 就会需要超过3台的KeepAlive配置,配置难度大,也复杂。
解决方案:
1. 使用云DNS内网域名解析,将提供访问的域名解析到多台负载均衡器(Nginx)的ip上(对TTL时间进行优化,越小越好)。
2. 负载均衡Nginx TCP Stream 配置4层负载到TIDB节点主机。
3. 在每台负载均衡Nginx主机上对nginx进行检测,当检测nginx挂掉了,自行启动nginx。
架构图:
配置:
1、 三台Nginx负载主机的配置如下:
/usr/local/nginx/conf/nginx.conf 配置如下, 在nginx.conf配置文件中stream模块与http模块是平级的。 部分配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ... stream { upstream tidb { least_conn; server 10.8.11.160:4000 max_fails=5 fail_timeout=90s; server 10.8.11.211:4000 max_fails=5 fail_timeout=90s; server 10.8.11.209:4000 max_fails=5 fail_timeout=90s; server 10.8.11.235:4000 max_fails=5 fail_timeout=90s; server 10.8.11.246:4000 max_fails=5 fail_timeout=90s; } server { listen 8765 so_keepalive=on; proxy_connect_timeout 60s; proxy_timeout 2d; proxy_pass tidb; tcp_nodelay on; } } http { ... } |
2、云DNS内网域名解析配置
以华为云为例
华为云 “云解析服务DNS” 内网域名解析,解析TTL时间改成1秒
3、负载测试
测试连接性:
可以在多个客户端上,使用域名加端口来连接数据库,观察3台nginx主机上的TCP网络连接情况,可以看到数据库连接会随机分散打到不同的nginx主机上,实现了流量的负载分担,且同时保证了TIDB集群的高可用性。