Haproxy combined with FTP cluster for load balancing

时间:2022-07-22
本文章向大家介绍Haproxy combined with FTP cluster for load balancing,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Haproxy介绍

Haproxy具有以下功能:

  • 第4层(TCP)和第7层(HTTP)负载均衡
  • URL重写
  • 限速
  • GZIP压缩
  • 代理协议支持
  • 健康检查
  • 多线程

Haproxy主要支持以下算法:

  • rr轮询算法,用于短连接
  • lc最少连接数算法,用于长连接
  • source源地址算法,用于SSL集群或者终端服务器集群,直接根据客户端的源IP地址来选择对应服务器
  • uri算法,用于HTTP缓存
  • hdr算法,根据指定的HTTP HEADER内容来选择对应服务器
  • first算法,用于短生命周期的虚拟机

安装与配置

目前的最新稳定版是1.9,后面使用的均是此版本

导入仓库源并下载 sudo add-apt-repository ppa:vbernat/haproxy-1.9 sudo apt-get update sudo apt install haproxy haproxy -v

配置介绍

分为两大部分

  • global配置段,用于设定全局配置参数
  • proxy配置段
    • defaults,用于为其他配置段提供默认参数
    • frontend,用于定义一系列监听的地址和端口信息,用于客户端与之建立连接
    • backend,用于后端服务器,代理会将对应客户端的请求转发至服务器
    • listen,通过关联frontend和backend,定义了一个完整的代理,通常只对TCP流量有用

配置参考

$ cat /etc/haproxy/haproxy.cfg 
global
        log 127.0.0.1   local0   #日志输出配置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1   local1 notice   #定义haproxy的日志级别,[error warnning notice info debug]
        chroot /var/lib/haproxy   
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon  #以后台形式运行

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode    tcp    #有三种[tcp http health],其中health只会返回ok
        option  tcplog   #日志类别
        option  dontlognull   #不记录健康检查日志信息
        retries 2  #两次连接失败认为是服务器不可用
        timeout connect 5000   #连接超时
        timeout client  50000  #客户端超时时间
        timeout server  50000  #服务端超时时间
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend ftp-server
        bind *:21
        default_backend ftp-server-pool

frontend ftp-server-244
        bind *:20001-20500
        default_backend ftp-port-range-244

frontend ftp-server-245
        bind *:20501-30000
        default_backend ftp-port-range-245

frontend ftp-server-246
        bind *:30001-30500
        default_backend ftp-port-range-246

backend ftp-server-pool
        balance roundrobin
        server ftp-port-range-244 10.1.1.244 check port 21 inter 10s rise 1 fall 2  
        server ftp-port-range-245 10.1.1.245 check port 21 inter 10s rise 1 fall 2
        server ftp-port-range-246 10.1.1.246 check port 21 inter 10s rise 1 fall 2
#check inter 10s 是检测心跳频率
#rise 2 是两次正确认为服务器可用
#fall 2 两次失败认为服务器不可用
backend ftp-port-range-244
        server ftp-port-range-244 10.1.1.244 check port 21 inter 10s rise 1 fall 2

backend ftp-port-range-245
        server ftp-port-range-245 10.1.1.245 check port 21 inter 10s rise 1 fall 2

backend ftp-port-range-246
        server ftp-port-range-246 10.1.1.246 check port 21 inter 10s rise 1 fall 2

启动测试

启动之前先检查配置文件是否正确
$ haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid
启动
$ sudo systemctl restart haproxy

FTP集群部署

参考之前的博客:

ubuntu下部署FTP服务器

centos7下搭建ftp服务器