【负载均衡】Haproxy的安装与配置教程
HAProxy是一款高可用、负载均衡代理,支持TCP(第四层)和HTTP(第七层),四层和七层网络负载均衡的区别:前者效率更高,后者功能更强。因为四层负载均衡调度器是通过分析IP层及TCP/UDP层来实现负载均衡,代表软件有LVS、F5。而工作在第七层的调度器除了支持四层负载均衡以外,还分析应用层的信息。这样一来不但可以根据VIP加端口来判断负载均衡方式之外,还可根据URL、客户端浏览器等更多条件来决定负载均衡的方式,功能更多,代表软件有Nginx、Haproxy。需要注意的是HAproxy的高可用和Keepalived的高可用有区别,它并不实现VIP自动漂移,而是能够对后端服务器进行探测,并自动下线故障节点。相对LVS配置也更简单,只需要保障负载均衡和后端服务器网络可用。
一、安装Haproxy
1、首先将两台后端服务器部署好Web服务,Apache、Nginx都可以。为了实验可以将两台服务器分别放上不同页面(在生产中后端服务器数据是需要一致的),然后启动服务。过程如下(后端服务器都需要做以下操作):yum install httpd -y
echo web1 > /var/www/html/index.html
systemctl start httpd.service
2、Haproxy可以通过YUM实现快速安装,也可以编译安装,编译过程:make TARGET=linux2628 PREFIX=/usr/local/haproxy #TARGET所指定的是系统内核版本,通过uname -r可以查看,然后在README文件可查询每个内核对应所用到的选项
make install PREFIX=/usr/local/haproxy
3、如果是YUM安装的话配置文件会自动生成在/etc/haproxy/haproxy.cfg。如果是编译安装的就可以通过复制安装包的模板文件做修改,并且为haproxy创建一个系统用户。Haproxy的日志在/var/log/message里。useradd -r haproxy
cp ./examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy
cp ./examples/option-http_proxy.cfg /usr/local/haproxy/haproxy.cfg
二、Haproxy配置文件详解
Haproxy配置文件根据功能和用途分为了5个部分,有些部分并不是必须配置的,下面列出一些基本配置选项:
(1)global部分:设置全局参数,通常是和系统相关的配置
(2)default部分:默认参数配置。该配置内容会被frontend、backend、listen集成,也就是说这些选项也可以在其他部分中单独配置
(3)frontend部分:设置接收用户请求的前端节点信息,有点类似配置nginx的upstream,frontend根据ACL规则指定要使用的后端服务器
(4)backend部分:设置后端服务器,也就是real server
(5)listen部分:这是为了兼容老版本而保留的部分,老版本中没有划分frontend和backend,都是配置在listen里
下面是haproxy.cnf常用配置选项说明:global
log 127.0.0.1 local0 #全局日志配置,Haproxy通过rsyslog将日志发到指定日志服务器,这里传给了本机
maxconn 20000 #设置每个haproxy进程的并发连接数
nbproc 4 #设置Haproxy启动时的进程数,默认为1,不能超过CPU核数
uid 200 #运行Haproxy的uid和gid
gid 200
daemon #Haproxy后台运行
pidfile /usr/local/haproxy/haproxy.pid
defaults
mode http #运行模式,分tcp(四层)或者http(七层)两种模式,默认是tcp模式
timeout connect 10s #成功连接到一台服务器的最长等待时间,不写单位的话默认是毫秒
timeout client 1m #客户端发送数据最长等待时间
timeout server 1m #服务端回应客户端数据发送的最长时间
timeout check 10s #设置每次对后端服务器检测超时的时间
retries 3 #Haproxy连接后端服务器失败的次数,达到该次数后将标记该后端服务器为不可用并踢出集群
frontend webserver #定义前端节点的名字
bind *:80 #Haproxy服务所监听的IP与端口
option httplog #Haproxy默认不记录http日志,通过这个配值启用详细日志
option dontlognull #日志中不记录上级负载均衡器发送的用于检测的心跳数据包
option forwardfor except 127.0.0.0/8 #让后端服务器能获得客户端真实IP
log global #使用全局日志的配置
default_backend webserver #Haproxy默认引用的后端服务器组
backend webserver #定义后端服务器组,可以定义多组
mode http
balance roundrobin #定义负载均衡调度算法,还有static-rr、source、uri等多种算法
option redispatch #在节点请求失败发生切换时保持cookie
option httpchk GET /index.html #检查后端节点页面状态码是否为200,如果异常就不再将请求送给该服务器,除了GET外还可以使用HEAD
server server1 192.168.1.100:80 weight 5 check inter 2000 rise 2 fall 3
server server2 192.168.1.110:80 weight 5 check inter 2000 rise 2 fall 3
#weight代表权重,默认为1,最大为256,0不参与负载
#check代表开启健康检查
#inter代表健康检查的时间间隔
#rise代表健康检查通过了多少次认为该服务器可用,fall则相反
listen admin_stats #Haproxy状态监控页面配置
bind 0.0.0.0:9188
mode http
log 127.0.0.1 local 0 err
stats refresh 30s #监控页面自动刷新时间
stats uri /status #监控页面的地址
stats auth admin:admin123 #登录监控页面的账号密码
stats hide-version #隐藏版本号
stats admin if TRUE #可在监控页面上手动启动或关闭后端服务器
三、Haproxy简单配置示例,通过该Haproxy实现后端两台节点轮询:global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8 #记录客户端真实IP
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s #haproxy连接后端服务器超时时间
timeout client 10m #客户端和haproxy的非活动超时时间
timeout server 10m #haproxy和后端服务器的非活动超时时间
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend test
bind *:80
default_backend test
backend test
balance roundrobin
server app1 192.168.145.180:80 weight 1 check inter 2000 fall 3 rise 3
server app2 192.168.145.190:80 weight 1 check inter 2000 fall 3 rise 3
listen mysqlserver #名称随意写
bind 0.0.0.0:3306
balance roundrobin
server server1 192.168.145.180:3306 weight 1
server server2 192.168.145.190:3306 weight 1
listen admin_stats #配置状态监控页面
bind 0.0.0.0:8000
mode http
stats refresh 30s
stats uri /status
stats auth admin:admin123
stats hide-version
stats admin if TRUE
启动Haproxy服务后通过浏览器去访问Haproxy配置的服务器IP地址和端口(比如Haproxy服务器的公网IP或者VIP),如果能正常请求到后端服务器的服务则代表配置成功
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy.conf
四、Haproxy日志配置 vim /etc/rsyslog.conf #Haproxy默认是把日志输出到/var/log/message中,不太方便查阅,所以配置文件中有配置rsyslog
$ModLoad imudp
$UDPServerRun 514
local2.* /var/log/haproxy.log
#重启服务后查看514端口是否运行,并且是否生成了日志文件
systemctl restart rsyslog.service
五、Haproxy状态监控
Haproxy自身有提供一个状态监控页面,通过该页面可以看到后端节点的状态,如果宕掉的话会变为红色,不同颜色的含义在页面上也有说明。如图:
评论