haproxy在ubuntu系统安装

sudo apt-get install haproxy

haproxy在cenos系统安装

yum install -y haproxy

配置:

sudo vi /etc/haproxy/haproxy.cfg

HAProxy配置中分五大部分:

global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置

defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用

frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理

backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块

listen:frontend和backend的组合体

下面举例如下:

当前有一个需求,即将端口为8081所有请求路由转发到80端口

global
       #不做任何修改

defaults
         #不做任何修改

listen listen_name
     # 定义一个名为status的部分,可以在listen指令指定的区域中定义匹配规则和后端服务器ip,
     #相当于需要在其中配置frontend,backend的功能。一般做tcp转发比较合适,不用太多的规则
     #匹配。
     bind 0.0.0.0:8081
     # 定义监听的套接字
     mode http
     # 定义为HTTP模式
     log global
     # 继承global中log的定义

# 继承global中log的定义
     stats refresh 30s
     # stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s
     stats uri /admin?stats
     # 设置统计页面的uri为/admin?stats
     stats realm Private lands
     # 设置统计页面认证时的提示内容
     stats auth admin:admin
     # 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
     stats hide-version
     # 隐藏统计页面上的haproxy版本信息

frontend lvs2-lvs3
    bind *:8081
    acl is_lvs2 hdr_end(host) -i 8081
    #使用hdr_end指令取request header中的host,如果host后缀部分匹配lvs2.test.net:8080,则匹配请求,
    #然后把请求打到对应use_backend指定的后端server上
    #用于测试request header中的host前缀部分是否匹配到lvs3.test.net:8080
    use_backend lvs2 if is_lvs2

backend lvs2
#定义后端server
    balance     roundrobin
    #采用轮询的负载均衡方法,网后端server转发请求
    server      free172 127.0.0.1:80 weight 10
                                                          

服务重启:

service haproxy restart

service haproxy stop

service haproxy start 

service haproxy reload

我的理解:

 frontend部分相当于进行规则匹配,use_backend lvs2是对于匹配上的条件下,进入对应的后处理逻辑backend部分。