如何在CentOS 7中将HAProxy设置为Nginx的负载平衡器

时间:2020-02-23 14:38:14  来源:igfitidea点击:

HAProxy由Willy Tarreau用C语言编写,也称为高可用性代理,它是一种快速,轻量级的HTTP负载平衡器和代理服务器。
它具有较低的CPU使用率,并且内存占用较小。
流行的(例如StackOverflow,Twitter,Github和Tumblr)使用负载平衡器仅举几例。

在本教程中,我们将向您展示如何在CentOS 7上将HAProxy设置为Nginx Web服务器的负载平衡器。
该负载平衡器将位于2个Nginx Web服务器的前面,并公平地向服务器分发HTTP请求。

HAProxy平衡算法

这是负载均衡器在分配工作负载时用于选择Web服务器的算法。

1. Roundrobin

这是最简单的算法。
基本上,每个新连接都将由下一个Web服务器处理。
例如,如果您有4个后端服务器,则每个服务器将连续处理请求。
当到达列表中的最后一个Web服务器时,负载平衡器将从第一个Web服务器的顶部重新开始。

2. Lastconn

其中连接数量最少的服务器将处理一个新请求。
当请求的负载和时间相差很大时,这会派上用场。

入门

首先,请执行飞行前检查列表,并确保您具备以下条件。

  1. CentOS 7服务器
HostnameServer IP address
load-balancer173.82.168.96
web-server-1173.82.2.236
web-server-2173.82.94.57
  1. SSH访问所有服务器

步骤1:在负载均衡器中配置/etc/hosts文件

使用SSH登录到负载均衡器,并添加Nginx Web服务器的IP地址和主机名,如图所示。

vim /etc/hosts

173.82.2.236    web-server-1

173.82.94.57    web-server-2

保存并退出vim文本编辑器。

接下来,登录到每个Web服务器(web-server-1和web-server-2)并编辑/etc/hosts文件以指向负载均衡器。

173.82.168.96   load-balancer

保存并退出文本编辑器。

步骤2:在负载平衡器服务器上安装和配置HAProxy

HAProxy存储库可在CentOS存储库上使用。
要安装和设置HAProxy,首先,登录并更新系统存储库。

yum update -y

接下来,使用以下命令安装HAProxy:

yum -y install haproxy

示例输出

安装成功并完成后,请转到haproxy目录。

cd /etc/haproxy

通过将文件" haproxy.cfg"重命名为" haproxy.cfg.bak"来备份文件

mv haproxy.cfg  haproxy.cfg.bak

接下来,创建一个新的HAproxy配置文件。

vim haproxy.cfg
#--------------------------------------------------------------------
# Global settings
#--------------------------------------------------------------------
global
  log         127.0.0.1 local2     #Log configuration

  chroot      /var/lib/haproxy
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  user        haproxy             #Haproxy running under user and group "haproxy"
  group       haproxy
  daemon

  # turn on stats unix socket
  stats socket /var/lib/haproxy/stats

#--------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#--------------------------------------------------------------------
defaults
  mode                    http
  log                     global
  option                  httplog
  option                  dontlognull
  option http-server-close
  option forwardfor       except 127.0.0.0/8
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000

#--------------------------------------------------------------------
#HAProxy Monitoring Config
#--------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
  mode http
  option forwardfor
  option httpclose
  stats enable
  stats show-legends
  stats refresh 5s
  stats uri /stats                             #URL for HAProxy monitoring
  stats realm Haproxy\ Statistics
  stats auth Password123: Password123            #User and Password for login to the monitoring dashboard
  stats admin if TRUE
  default_backend app-main                    #This is optionally for monitoring backend

#--------------------------------------------------------------------
# FrontEnd Configuration
#--------------------------------------------------------------------
frontend main
  bind *:80
  option http-server-close
  option forwardfor
  default_backend app-main

#--------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#--------------------------------------------------------------------
backend app-main
  balance roundrobin                                     #Balance algorithm
  option httpchk HEAD/HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
  server web-server-1 173.82.2.236:80 check                 #Nginx1
  server web-server-2 173.82.94.57:80 check                 #Nginx2

记下最后两行中指定的Web服务器,如输出所示。

保存并退出文本编辑器。

接下来,我们将配置rsyslog守护程序以记录HAProxy统计信息。

编辑rsyslog.conf文件以启用rsyslog使用的UDP端口514。

vim /etc/rsyslog.conf

要允许通过端口154的UDP连接,请取消注释以下几行。

$ModLoad imudp
$UDPServerRun 514

保存并退出文本编辑器。

接下来,为syslog创建一个新的HAProxy配置文件。

vim  /etc/rsyslog.d/haproxy.conf

粘贴以下配置

local2.=info     /var/log/haproxy-access.log    #For Access Log
local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer

保存并退出文本编辑器。

继续并重新启动rsyslog。

systemctl restart rsyslog

接下来,启动并启用Haproxy以在启动时启动。

systemctl start haproxy
systemctl enable haproxy

要确认HaProxy已启动并正在运行,请执行以下操作:

systemctl status haproxy

下一步,我们将Nginx安装到我们的Web服务器上。

步骤3:安装和配置Nginx

剩下的唯一关键步骤是在每台Web服务器上安装Nginx。

但首先,如图所示安装EPEL存储库

yum install epel-release

接下来,安装Nginx

yum install nginx -y

在两个服务器上都安装了Nginx的情况下,我们将修改每个Nginx Web服务器中的index.html文件,以便在使用HAproxy负载均衡器进行仿真时在每个服务器之间建立区别。

移至html目录,如下所示:

cd /usr/share/nginx/html/

备份index.html文件

mv index.html index.html.bak

接下来,创建一个新的index.html文件并粘贴一些示例内容。

对于Web服务器1

echo "web-server-1. Hey ! This is your first web server" > index.html

对于Web Server 2

echo "web-server-2. Hey ! This is your second web server" > index.html

接下来,在两个Web服务器中启动Nginx并确认服务是否正在运行

systemctl start  nginx
systemctl status nginx

测试负载平衡

要验证一切正常,请重复运行以下命令。

curl 173.82.168.96

您的输出应与此类似。

正如您可以敏锐地观察到的那样,每当随后在curl命令上运行该命令时,输出将在第一Web服务器内容和第二Web服务器内容" Perfect!"之间交替显示。

现在,让我们尝试使用网络浏览器进行测试。

https://负载平衡器IP地址

这将在两个Web服务器(在本例中为Web-server-2)上显示内容。

现在,尝试刷新一次或者两次,输出将指向另一个Web服务器,在本例中为Web-server-1。

这证实了我们的负载均衡器能够在我们的Web服务器之间公平地分配HTTP请求。

要收集有关负载均衡器浏览器的更多统计信息,请访问以下URL

https://load-balancer-IP:8080/stats

使用Password123作为用户名,并使用我们在haproxy.cfg配置文件中定义的密码。