在CentOS 8上如何为Nginx设置HAProxy负载均衡器

时间:2019-04-29 03:17:22  来源:igfitidea点击:

HAProxy是一个开源的,强大的,高性能的,可靠的,安全的,广泛使用的高可用TCP/HTTP负载均衡器,代理服务器。

为了确保最大限度地提高web应用程序的可用性、可伸缩性和高性能,现在常见的做法是实现引入冗余的技术,如服务器集群和负载平衡。
例如,设置一个服务器集群,所有服务器都运行相同的应用程序,然后在它们前面部署负载均衡器来分配流量。

拓扑图

haproxy

在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

  1. global settings – 设置处理端的参数
  2. defaults – 设置默认的参数(包括前后端)
  3. frontend – 描述一组接受客户端连接的监听套接字。
  4. 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
  1. FT名字任意取
  2. acl即访问控制列表,用于根据从请求的内容做出决策。http ssl_fc,not表示如果不是通过SSL发出的请求,则认为是纯HTTP。
  3. http-request set-header用于添加HTTP头到请求中。 这里的设置是告诉nginx,最初的请求是通过HTTP传输的。
  4. default_backend或者 use_backend指令用于定义后端服务器, 如果不指定,那么会报 “503 Service Unavailable error” 错误。

backend 部分

在后端配置部分,定义了HAProxy如何选择后端服务器来处理请求。

  1. bk_web_servers要对应前端部分的 default_backend设置。
  2. cookie指令支持基于cookie的持久性,它指示HAProxy向客户机发送一个名为SERVERID的cookie,并将其与给出初始响应的服务器的ID相关联。
  3. server指令用于上游服务器, 格式为 sever_name server_IP:port options
  4. 选项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设置

到域名管理中,做域名解析,这里我们在客户端临时解析:

  1. 编辑文件 C:\Windows\System32\drivers\etc\hosts
    添加下面两行
10.9.75.123  www.mytheitroad.tech
10.9.75.123  mytheitroad.tech
  1. 使用浏览器打开 http://mytheitroad.tech。 每次刷新,应该能看到不同的内容,这是因为由不同的服务器提供服务,从而实现了负载均衡。

  2. 查看统计页面 http://mytheitroad.tech:9000/stats