在CentOS 8上如何为Nginx设置HAProxy负载均衡器
HAProxy是一个开源的,强大的,高性能的,可靠的,安全的,广泛使用的高可用TCP/HTTP负载均衡器,代理服务器。
为了确保最大限度地提高web应用程序的可用性、可伸缩性和高性能,现在常见的做法是实现引入冗余的技术,如服务器集群和负载平衡。
例如,设置一个服务器集群,所有服务器都运行相同的应用程序,然后在它们前面部署负载均衡器来分配流量。
拓扑图
在CentOS 8上搭建nginx 服务器
在3台后端服务器上执行下列操作
安装nginx
# dnf install Nginx
启动nginx服务,并设置开机启动
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
设置防火墙,开放80(http)和443(https)端口
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
测试nginx
使用浏览器分别打开3个web服务器地址, 可以看到nginx的欢迎页面
http://10.9.75.201
http://10.9.75.202
http://10.9.75.203
创建测试html文件
分别在3台nginx服务器上创建index.html文件:
#### nginx服务器 websrv1 # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv1"> /usr/share/nginx/html/index.html #### nginx服务器 websrv2 # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv2"> /usr/share/nginx/html/index.html #### nginx服务器 websrv3 # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv3"> /usr/share/nginx/html/index.html
在CentOS 上安装并配置HAProxy
安装HAProxy 软件包
# dnf install haproxy
启动HAProxy 服务,并设置开机启动
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy
配置HAProxy
配置文件:/etc/haproxy/haproxy.cfg
- global settings – 设置处理端的参数
- defaults – 设置默认的参数(包括前后端)
- frontend – 描述一组接受客户端连接的监听套接字。
- Backend – 配置后端服务器信息
配置HAProxy的日志
在CentOS中,默认使用全局Syslog服务器,指向localhost (127.0.0.1),日志消息级别为 local2
我们需要告诉rsyslog服务器如何接收和处理HAProxy日志消息。
打开rsyslog配置文件 /etc/rsyslog.conf,
或者在 /etc/rsyslog.d下创建一个新文件, 例如 /etc/rsyslog.d/haproxy.conf。
收集在UDP端口514的日志:
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
同时指定日志存放位置
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
重启rsyslog,使配置生效
配置 HAProxy 的前后端
回到HAProxy配置文件 /etc/haproxy/haproxy.cfg,看是如何配置前端和后端代理的。
listen 部分
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
- bind *:9000设置绑定端口
- stats enable设置启用统计信息页面 ,可以通过
http://服务器ip:9000/stats
访问 - stats auth设置访问页面时的认证信息
frontend 部分
frontend FT bind *:80 mode http acl http ssl_fc,not http-request set-header X-Forwarded-Protocol http if http default_backend bk_web_servers
- FT名字任意取
- acl即访问控制列表,用于根据从请求的内容做出决策。http ssl_fc,not表示如果不是通过SSL发出的请求,则认为是纯HTTP。
- http-request set-header用于添加HTTP头到请求中。 这里的设置是告诉nginx,最初的请求是通过HTTP传输的。
- default_backend或者 use_backend指令用于定义后端服务器, 如果不指定,那么会报 “503 Service Unavailable error” 错误。
backend 部分
在后端配置部分,定义了HAProxy如何选择后端服务器来处理请求。
- bk_web_servers要对应前端部分的 default_backend设置。
- cookie指令支持基于cookie的持久性,它指示HAProxy向客户机发送一个名为SERVERID的cookie,并将其与给出初始响应的服务器的ID相关联。
- server指令用于上游服务器, 格式为
sever_name server_IP:port options
。 - 选项check,是让HAProxy持续检查服务器的可用性并在stats页面上报告。
backend bk_web_servers mode http balance roundrobin option httpchk HEAD / cookie SERVERUID insert indirect nocache server websrv1 10.9.75.201:80 cookie websrv1 check server websrv2 10.9.75.202:80 cookie websrv2 check server websrv3 10.9.75.203:80 cookie websrv3 check
其他
将默认的其他frontend 和backend 部分注释掉。
重启HAProxy ,使设置生效
# systemctl restart haproxy
设置防火墙
开放http,https,9000端口。 9000端口用于访问统计页面。
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent –add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
测试HAProxy设置
到域名管理中,做域名解析,这里我们在客户端临时解析:
- 编辑文件 C:\Windows\System32\drivers\etc\hosts
添加下面两行
10.9.75.123 www.mytheitroad.tech 10.9.75.123 mytheitroad.tech
使用浏览器打开
http://mytheitroad.tech
。 每次刷新,应该能看到不同的内容,这是因为由不同的服务器提供服务,从而实现了负载均衡。查看统计页面
http://mytheitroad.tech:9000/stats