【问题标题】:Manage Database Connection Pool via Nginx/Haproxy通过 Nginx/Haproxy 管理数据库连接池
【发布时间】:2019-08-23 16:23:03
【问题描述】:

我们有多个服务实例。此外,我们有多个服务共享同一个数据库。

目前,我们正在管理每个服务实例中的连接池。 但是,我们看到了一些问题,因为创建了太多的空闲非活动连接,并且后端数据库限制了太多的空闲非活动连接。

我们正在考虑使用 nginx/haproxy 来管理数据库连接池。

我查看了 haproxy/nginx 文档,但没有找到与我想要完成的任务相关的任何内容。

有没有人尝试过实施类似的解决方案 uisng haproxy/nginx。如果可以,请您帮我解决一下。

【问题讨论】:

    标签: nginx connection-pooling oracle12c haproxy


    【解决方案1】:

    您可以将 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 手动一台(默认禁用)。相反,如果您的数据库管理系统能够以主-主模式提供服务,您可以将其更改为循环模式 (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

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多