haproxy简介

官网

Haproxy是一款开源、高效、可靠的反向代理软件,可以代理TCP、HTTP,它主要功能用来提供负载均衡。它特别适用于高并发的场景。 和Nginx比起来,优势在于它支持更多负载均衡算法。

核心功能: 1)负载均衡 2)健康检查 3)会话保持 4)ssl 5)http重定向 6)监控与统计

关键特性: 1)性能强 采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。单个HAProxy进程的处理能力可突破10万请求/秒

2)稳定 HAProxy的大部分工作都是在操作系统内核完成的,所以只要Linux操作系统稳定,它就很稳定。按照作者的说法,HAProxy在13年间从未出现过一个会导致其崩溃的BUG,HAProxy一旦成功启动,除非操作系统或硬件故障,否则就不会崩溃。

安装Haproxy

直接yum/dnf安装即可,版本偏低,如果想要最新版本,需要到官方下载源码,编译安装

yum install -y haproxy

配置负载均衡

将默认配置文件拷贝一份 cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.default

  • 案例:http负载均衡 vi /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend main
    bind *:80
    default_backend             app

backend app
    balance     roundrobin  ##负载均衡算法 rr
    server  app1 192.168.156.106:80 check  cookie 1 weight 5 check inter 2000 rise 1 fall 1
    server  app2 192.168.156.107:80 check  cookie 1 weight 5 check inter 2000 rise 1 fall 1

配置状态页,增加配置

listen status_page  ##这一行是顶格的
    bind 192.168.222.128:8888   ##可以监听一个额外的端口,这样更加安全
    stats enable
    stats uri /haproxy-status
    stats auth    admin:aminglinux.com
  • 案例:haproxy实现动静分离

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend main
    bind *:80
    ##判断url是否以/static, /images, /javascript, /stylesheets开头
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    ##判断url是否以.jpg .gif .png .css .js结尾
    acl url_static       path_end       -i .jpg .gif .png .css .js
    ##判断域名是否包含img, att, video
    acl host_static hdr_beg(host) -i img. att. video.


    ##如果url_static或者host_static为true则走static
    use_backend static          if url_static or host_static

    ##默认走app
    default_backend             app

backend static
    balance     roundrobin
    server      static 127.0.0.1:8080 check


backend app
    balance     roundrobin
    server  app1 192.168.156.106:80 check
    server  app2 192.168.156.107:80 check
  • 案例:haproxy实现tcp负载均衡

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend main
    bind *:2222
    default_backend            app

backend app
    balance     roundrobin
    server  app1 192.168.156.106:22 check
    server  app2 192.168.156.107:22 check