Centos7 配置HAproxy负载均衡

243 阅读1分钟

最近在项目中需要部署高可用的EMQX集群,这里我们部署 HAproxy 做 EMQX 的负载均衡器,特此记录便于日后查阅。

1、Docker部署

  $ docker run -d -p 8999:8999  -p 5678:5678 -p 8001:8001 --name haproxy -v /haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:2.1.7

2、编译安装

首先安装HAproxy所以来的编译环境,命令如下:

$ yum install -y openssl openssl-devel systemd-devel.x86_64
$ yum install apr-util apr-util-devel apr apr-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel gcc cmake gcc-c++ -y

注:本文使用的HAproxy版本为2.1.7,其他版本传送门: HAproxy其它版本下载地址

然后下载源码 -> 解压 -> 编译,命令如下:

$ wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.1.7.tar.gz/sha512/d3338f128042f40e2969094a614eb840b1bf7409efa4f85aed7f45411af8532d2f2371436902e7b987b661580f9c21439fc027a65bb2d352cb86711a26545adb/haproxy-2.1.7.tar.gz
$ tar -zxvf haproxy-2.1.7.tar.gz
$ cd /root/haproxy-2.1.7
$ make TARGET=linux-glibc   USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy

配置HAproxy开机自启动服务,命令如下:

  $ vim /usr/lib/systemd/system/haproxy.service

haproxy.service 服务文件,内容如下:

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

配置文件 /etc/haproxy/haproxy.cfg 需自行配置,不自动生成,命令如下:

$ mkdir /etc/haproxy
$ cp /haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg

修改默认的 haproxy.cfg 配置文件(以EMQX负载均衡修改为例),命令如下:

  $ vim /etc/haproxy/haproxy.cfg

修改后内容如下:

global
    log 127.0.0.1   local0 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     10000   # See also: ulimit -n
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats.sock mode 600 level admin
    stats timeout 2m
defaults
    mode    tcp
    log     global
    option  dontlognull
    option  redispatch
    timeout http-request      10s
    retries                   3
    timeout queue             45s
    timeout connect           10s
    timeout client            1m
    timeout server            1m
    timeout http-keep-alive   10s
    timeout check             10s
    maxconn                   10000
listen stats
    mode http
    bind 0.0.0.0:8089
    stats enable
    stats uri     /admin?stats
    stats realm   Haproxy\ Statistics
    stats auth    admin:admin
    stats admin if TRUE

listen emqx
    bind *:80
    mode tcp
    maxconn 50000
    timeout client 600s
    default_backend emqx_cluster
backend emqx_cluster
    mode tcp
    balance source
    timeout server 50s
    timeout check 5000
    server emqx1 172.18.123.138:1883 check inter 10000 fall 2 rise 5 weight 1
    server emqx2 172.18.123.139:1883 check inter 10000 fall 2 rise 5 weight 1

frontend emqtt-admin-front
    bind *:8088
    default_backend emqtt-admin-backend
backend emqtt-admin-backend
    balance roundrobin
    server emqx1 172.18.123.138:18083 check
    server emqx2 172.18.123.139:18083 check

注:其中 172.18.123.138:1883 为 EMQX 的内网通信端口,172.18.123.138:18083 为 EMQX 的内网控制台访问端口,如果需要外网访问EMQX控制台,则需要添加路由器端口映射规则,将EMQX控制台的内网端口映射到外网端口即可(阿里云服务器则需要配置安全组策略将端口放行)。

配置文件修改完成启动,命令如下:

$ systemctl daemon-reload
$ systemctl enable haproxy
$ systemctl start haproxy

到此HAproxy负载均衡配置完成。