Doris数据库负载均衡:基于Docker的HAProxy部署指南

1 5~7 分钟

首先上官网文档
负载均衡 - Apache Doris

官网提供了几种方式:nginx,HAproxy,PROXYSQL等。对于我们生产环境而言,同时需要mysql协议和http(stream load)两种方式的负载均衡,那么毫无疑问选择HAproxy最佳,在支持两种方式的情况下支持故障检测和切换,还有一个简单的监控面板可以查看。

由于生产环境全内网+centos7,基本上主流的二进制包都不再支持这个系统了,遂考虑使用docker部署,一开始直接使用doris官方提供的haproxy.conf,发现跑不起来,研究后发现HAproxy的裸金属服务器配置和docker配置是完全不一样的,网上也没搜到相应的docker配置,这里贴出来能正常使用的配置与大家分享。

我这里使用的是haproxy:3.2.7镜像:

docker run -d \
  --name doris-proxy \
  --restart=always \
  -v /opt/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
  --net=host \
  haproxy:3.2.7


global
    # 最大连接数
    maxconn     10000
    # 文件句柄数
    ulimit-n    65536

defaults
    log     global
    mode    http
    option  dontlognull
    retries 3
    option  redispatch
    timeout connect 5000ms
    timeout client  600000ms
    timeout server  600000ms


# 1. MySQL 协议 (TCP 模式) - 端口 9030

frontend fe_doris_mysql_9030
    # 监听 9030 端口
    bind *:9030
    mode tcp
    # 默认的后端服务器池
    default_backend be_doris_mysql_9030

backend be_doris_mysql_9030
    mode tcp
    balance leastconn
    
    option tcp-check

    # !!! 请将这里的 IP 替换为真实 FE IP !!!
    server fe_node_1 34.191.49.1:9030 check inter 2s rise 2 fall 3
    server fe_node_2 34.191.49.2:9030 check inter 2s rise 2 fall 3
    server fe_node_3 34.191.49.3:9030 check inter 2s rise 2 fall 3
# 2. Stream Load (HTTP 模式) - 端口 8030
frontend fe_doris_http_8030
    # 监听 8030 端口 (供 Flink/Stream Load 使用)
    bind *:8030
    mode http
    default_backend be_doris_http_8030

backend be_doris_http_8030
    mode http
    # HTTP 模式使用轮询即可
    balance roundrobin

    # HTTP 健康检查
    option httpchk GET /
    http-check expect status 200

    # !!! 请将这里的 IP 替换为真实 FE IP !!!
    server fe_node_1 34.191.49.1:8030 check inter 2s rise 2 fall 3
    server fe_node_2 34.191.49.2:8030 check inter 2s rise 2 fall 3
    server fe_node_3 34.191.49.3:8030 check inter 2s rise 2 fall 3

# 3. HAProxy 统计监控页面
listen stats
    bind *:19000
    mode http
    stats enable
    stats uri /haproxy_stats
    # !!! 请修改为强密码 !!!
    stats auth admin:123456
    stats refresh 5s