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_lvs2backend 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部分。