我们有一个服务的多个实例。此外,我们有多个服务共享同一个数据库。
目前,我们正在管理每个服务实例中的连接池。但是,我们看到了一些问题,因为创建了太多的空闲非活动连接,并且后端数据库限制了太多的空闲非活动连接。
我们正在考虑使用nginx/haproxy来管理数据库连接池。
我查看了haproxy/nginx文档,但没有找到任何与我正在尝试完成的内容相关的内容。
有没有人尝试过使用haproxy/nginx实现类似的解决方案。如果是这样,你能在这方面帮我吗?
发布于 2019-08-27 15:13:52
您可以将haproxy用作tcp负载均衡器(而不是传统的http)。
frontend incoming
maxconn 25000
mode tcp
bind 10.0.0.100:3306
default_backend backend-mysql负载均衡器有一个后端,例如backend-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是您在这里使用的主数据库。其他是故障转移。第2个节点执行自动故障切换(备份)。第三台服务器,db3 a手动服务器(默认禁用)。相反,如果您的数据库管理系统能够以主-主模式提供服务,则可以将其更改为循环调度情况(db1-db3)。
现在您可以在客户端/ haproxy之间管理您的池(maxconn的前端定义)。您还可以管理haproxy和数据库之间的池(例如,在后端部分使用maxconn256/ 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。
https://stackoverflow.com/questions/57629946
复制相似问题