HAproxy 负载均衡
实现一种事件驱动,单一进程模型,此模型支持非常大的并发连接数.基于TCP和HTTP的应用程序代理.
>部署haprooxy服务器
yum -y install haproxy //装包
vim /etc/haproxy/haproxy.cfg //修改配置文件
global
log 127.0.0.1 local2 ##[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ##haproxy的pid存放路径
maxconn 4000 ##最大连接数,默认4000
user haproxy
group haproxy
daemon ##创建1个进程进入deamon模式运行
defaults
mode http ##默认的模式mode { tcp|http|health }
option dontlognull ##不记录健康检查的日志信息
option httpclose ##每次请求完毕后主动关闭http通道
option httplog ##日志类别http日志格式
option forwardfor ##后端服务器可以从Http Header中获得客户端ip
option redispatch ##serverid服务器挂掉后强制定向到其他健康服务器
timeout connect 10000 #如果backend没有指定,默认为10s
timeout client 300000 ##客户端连接超时
timeout server 300000 ##服务器连接超时
maxconn 3000 ##最大连接数
retries 3 ##3次连接失败就认为服务不可用,也可以通过后面设置
#############################################
>访问监控页面
listen stats 0.0.0.0:1080 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #进入管理解面查看状态信息
stats auth admin:admin #统计页面用户名和密码设置
#################################
>动静分离解析
frontend web *:80 # *表示haproxy监听所有地址,监听的端口为80
# 定义访问控制,表示以url以.css .js .html .php结尾的分别调度到哪台服务器上访问
acl url_static path_end -i .css .js .html
acl url_dynamic path_end -i .php
# usr_backend表示使用backend服务,if表示如果满足url_static这个条件就调度到这台服务器上
use_backend static if url_static
default_backend dynamic
backend static # 定义调用后端的静态页面的服务器上
server node1 192.168.27.18:80 check inter 3000 rise 2 fall 2 maxconn 5000
backend dynamic # 定义调用后端的动态页面的服务器上
server node2 192.168.27.19:80 check inter 3000 rise 2 fall 2 maxconn 5000
######################################
systemctl restart haproxy //重启服务
systemctl enable haproxy //开机自启
配置文件5个区域
- global:配置全局参数
- default:用于配置所有frontend和backend的默认属性
- frontend:用于配置前端服务(Haproxy自身提供的服务)
- backend:用于配置后端服务(实例组)
- listen:fronten+backend的组合配置,简单的配置方法
global域的关键配置
- daemon:指定Haproxy以后台模式运行,通常都使用该配置
- user:指定Haproxy进程所属用户
- group:指定Haproxy进程所属用户组
- log [address] [device] [maxlevel] [minlevel]:日志输出配置,log 127.0.0.1 local0 info warning ,即向本机rsyslog或syslog的local0输出info到warning级别的日志.其中[minlevel]可省略.Haproxy日志有8个级别,从高到低依次为:emerg/alert/crit/err/warning/notice/info/debug
- pidfile:指定记录Haproxy进程号的绝对路径.
- maxconn:Haproxy进程同时处理的连接数,连接数达到顶值后,停止接受连接请求!
frontend域的关键配置
- acl [name] [criterion] [flags] [operator] [value]:定义一条acl策略.如acl url_ms1 path_beg -i /ms1/ 定义名为url_ms1的ACL,该ACL请求以uri/ms1/开头(忽略大小写)时为TRUE
- bind [ip]:[port]:frontend服务监听的端口
- default_backend [name]:fronfend对应的默认backend
backend域的关键配置
- balance []:负载均衡的算法
- cookie:在backend server间启用基于cookie的会话保持策略,最常用的insert方式如:cookie HA_STICKY insert indirect nocache ,指Haproxy将在响应中插入名为HA_STICKY的cookie,其值对应server定义中的指定的值
- server [name] [ip]:[iport] [params]:定义backend中一个后端的server,[params]用于指定这个server的参数,常用有: -
- -
- -check:指定此参数时,HAProxy将会对此server执行健康检查,检查方法在option httpchk中配置。同时还可以在check后指定inter, rise, fall三个参数,分别代表健康检查的周期、连续几次成功认为server UP,连续几次失败认为server DOWN,默认值是inter 2000ms rise 2 fall 3
-
- cookie [value]:用于配合基于cookie的会话保持,如cookie ms1.srv1代表交由此server处理的请求会在响应中写入值为ms1.srv1的cookie(具体的cookie名则在backend域中的cookie设置中指定)
-
- maxconn:指HAProxy最多同时向此server发起的连接数,当连接数到达maxconn后,向此server发起的新连接会进入等待队列。默认为0,即无限
-
- maxqueue:等待队列的长度,当队列已满后,后续请求将会发至此backend下的其他server,默认为0,即无限
-
- weight:server的权重,0-256,权重越大,分给这个server的请求就越多。weight为0的server将不会被分配任何新的连接。所有server默认weight为1
listen域
- frontend和backend的组合,
官方配置文档
keepalived实现Haproxy高可用
原理:两台Haproxy的主机分别运行一个Keepalived的实例,一旦Master主服务器宕机,Back服务器立马接管请求.