我们有多个服务实例。另外,我们有多个服务共享同一个数据库。
当前,我们正在管理每个服务实例中的连接池。 但是,我们看到了一些问题,因为创建了太多的空闲非活动连接,并且后端数据库限制了太多的空闲非活动连接。
我们正在考虑使用nginx / haproxy来管理数据库连接池。
我查看了haproxy / nginx文档,但没有找到与我要完成的工作有关的任何事情。
有人尝试过使用haproxy / nginx实现类似的解决方案。如果可以的话,请您帮我。
答案 0 :(得分:0)
您可以将haproxy用作tcp负载平衡器(而不是传统的http)。
frontend incoming
maxconn 25000
mode tcp
bind 10.0.0.100:3306
default_backend backend-mysql
负载均衡器有一个后端,例如后端MySQL。这个后端有3个节点
backend backend-mysql
mode tcp
balance leastconn
option httpchk
server db1 10.0.0.31:3306 check port 9100 inter 12000 rise 3 fall 3 maxconn 256
server db2 10.0.0.32:3306 check port 9100 inter 12000 rise 3 fall 3 maxconn 256 backup
server db3 10.0.0.33:3306 check port 9100 inter 12000 rise 3 fall 3 maxconn 256 disabled
您现在可以将您的服务/客户端指向10.0.0.100。第一个db1是您在此处使用的主数据库。其他是故障转移。第二个节点是自动故障转移(备份)。第三台服务器db3是一台手动服务器(默认禁用)。相反,如果您的数据库管理系统能够以master-master模式提供服务,则可以将其更改为循环情况(db1-db3)。
现在,您可以管理客户端/ haproxy(maxconn的前端定义)之间的池。而且,您可以管理haproxy和数据库之间的池(例如,在后端部分使用maxconn 256 / https://cbonte.github.io/haproxy-dconv/configuration-1.6.html#3.2-maxconn)。
要获取haproxy的故障转移,可以使用vrrp / keepalived。 (都共享一个主IP地址。如果一台服务器出现故障,例如lb1,另一台lb 2接管了主ip),https://github.com/acassen/keepalived。