HaProxy 监听 MySQL 和 HTTP

HaProxy 监听 MySQL 和 HTTP

我意识到如果数据库服务器是外部的且是独立的,那么使用 HAPROXY 来处理数据库和服务器会更好,但是是否有可能让 2 台服务器相互复制数据库和文件并由 1 台 haproxy 服务器进行负载平衡?在监听两者的同时,让我的 haproxy 文件工作时遇到了一些麻烦,到目前为止,情况如下:

     global
         log 127.0.0.1 local0 notice
         maxconn 2000
         user haproxy
         group haproxy

     defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        timeout connect  5000
        timeout client  10000
        timeout server  10000

    listen servers 0.0.0.0:80
        mode http
        stats enable
        balance roundrobin
        option httpclose
        option forwardfor
        server server-1 1.1.1.1:80 check
        server server-2 2.2.2.2:80 check


    listen mysql-cluster
        bind 127.0.0.1:3306
        mode tcp
        option mysql-check user haproxy_check
        balance roundrobin
        server mysql-1 1.1.1.1:3306 check
        server mysql-2 2.2.2.2:3306 check

答案1

是的,您可以使用 HAProxy 来平衡 MySQL TCP 连接,但它不像 HTTP 连接那么简单。

  • 您需要一个更好的状态检查器。类似于 xinetd 下的脚本,它将检查数据库是否正常工作,如果不起作用则返回 http 代码 200 或 503。如果没有它,HAProxy 将只能检测端口是否打开。
  • Roundrobin 平衡将连接分散到两台服务器之间。最好使用源哈希来将会话保持在同一台服务器上。
  • 您将需要主主复制,但这是一个灾难,总有发生的地方。也许,使用主从复制和主动备份 haproxy 后端会更好。
  • 主-主将与 Galera 复制很好地配合。也许这是一条可行的路。
  • 您可能还想使用 Pacemaker 或 Keepalived 而不是 HAProxy 来建立 HA 启用主从 MySQL 设置。
  • 你也可以看看 MySQL 代理

无论如何,这并不容易,需要做很多工作才能做好。MySQL 可能非常古怪。

相关内容