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

HAProxy或高可用性代理是一个开源的TCP和HTTP负载平衡器和代理服务器软件。在本教程中,我将指导您

HAProxy或高可用性代理是一个开源的TCP和HTTP负载平衡器和代理服务器软件。 HAProxy已由C编写,它支持SSL,压缩,保持活动,自定义日志格式和标题重写。 HAProxy是一款快速轻便的代理服务器和负载平衡器,具有较小的内存占用和低CPU占用率。 它被大型网站(如Github,StackOverflow,Reddit,Tumblr,Twitter等)使用。 它已经成为过去几年中最受欢迎的软件负载均衡器和代理服务器。

在本教程中,我将引导您通过HAProxy安装和配置3台服务器,一个负载平衡器和两个Nginx Web服务器。 我们将在单个服务器上安装HAProxy,然后在其他服务器上安装Nginx Web服务器。 HAProxy作为Nginx Web服务器的负载均衡器。

基本概念与HAProxy

第4层和第7层

HAProxy可以以两种模式运行:TCP模式第4层和HTTP模式层7.在第4层TCP模式下,HAProxy将RAW TCP数据包从客户端转发到应用程序服务器。 在第7层HTTP模式下,HAProxy在转发到应用服务器之前解析HTTP头。 在本教程中,我们将使用Nginx作为仅支持第7层HTTP模式的Web服务器。

平衡算法

这是HAProxy在进行负载平衡时选择服务器的算法。 提供以下模式:

Roundrobin

这是最简单的平衡算法。 对于每个新的连接,它将由下一个后端服务器处理。 如果到达列表中的最后一个后端服务器,它将从后端列表的顶部重新开始。

Lastconn

新连接将由具有最少连接数量的后台服务器处理。 当请求的时间和负载变化很大时,这很有用。

资源

这是针对粘性会话,客户端IP将被散列以确定从该IP接收到最后一个请求的后端服务器。 因此,IP A将始终由后端1处理,IP B将始终由banckend2处理,不会中断会话

还有其他算法 - 有关详细信息,请查看官方HAProxy站点。

先决条件

  • 3 CentOS 7

负载平衡器
192.168.1.102

nginx1
192.168.1.104

nginx2
192.168.1.105

  • 所有3台服务器的根权限。

第1步 - 配置/ etc / hosts文件

登录到负载平衡器服务器并编辑/ etc / hosts文件。

ssh loadbalancer@192.168.1.102
sudo su

vi /etc/hosts

添加nginx1和nginx2主机名:

192.168.1.104    nginx1.loadbalancer.me     nginx1
192.168.1.105    nginx2.loadbalancer.me     nginx2

保存文件并退出编辑器。

接下来,编辑Nginx服务器(nginx1和nginx2)上的hosts文件:

ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105

在hosts文件中编辑并添加负载均衡器的新行:

vi /etc/host

在每个nginx服务器上添加loadbalancer主机名:

192.168.1.102    loadbalancer

在nginx1和nginx2服务器上执行此操作。

第2步 - 安装和配置HAProxy

HAProxy在CentOS 7存储库中可用,登录到负载平衡器服务器并更新软件包列表:

ssh loadbalancer@192.168.1.104
yum -y update

现在使用这个yum命令安装HAProxy:

yum -y install haproxy

安装完成后,转到“/ etc / haproxy /”目录并备份原始配置文件:

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig

接下来,使用vi编辑器添加一个新的HAProxy配置文件“haproxy.cfg”文件:

vi 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 howtoing:howtoing            #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 roundrobin 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 nginx1 192.168.1.104:80 check                 #Nginx1
    server nginx2 192.168.1.105:80 check                 #Nginx2

保存配置文件并退出。

接下来,配置hsroxy的rsyslog。

我们将配置rsyslog守护程序来记录HAProxy统计信息。 编辑rsyslog.conf文件以启用rsyslog使用UDP端口514。

vi /etc/rsyslog.conf

取消注释此行以启用UDP连接:

$ModLoad imudp
$UDPServerRun 514

如果要使用特定IP,可以添加如下所示的新行:

$UDPServerAddress 127.0.0.1

保存文件并退出。

然后为rsyslog创建新的haproxy配置文件:

cd /etc/rsyslog.d/
vi 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,然后启动haproxy:

systemctl restart rsyslog
systemctl start haproxy

在启动时添加haproxy开始:

systemctl enable haproxy

第3步 - 安装和配置Nginx

在本节中,我们将从nelx1和nginx2服务器上的epel库中安装Nginx。

登录服务器:

ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105

使用下面的yum命令安装epel仓库:

yum -y install epel-release

现在你可以安装Nginx:

yum -y install nginx

Nginx已安装。 转到Web目录并更改索引文件,以便我们可以看到两台服务器中提供了哪些html文件:

cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html     #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html     #For nginx2 server

接下来,添加Nginx在启动时启动,然后启动它:

systemctl enable nginx
systemctl start nginx

确保您在nginx1和nginx2服务器上执行此步骤。

第4步 - 测试

通过访问负载平衡器IP: 192.168.1.102从浏览器测试

Nginx处理的请求1

Nginx 2处理的请求

用curl命令测试:

curl 192.168.1.102

测试HAProxy

测试登录到使用用户名和密码“howtoing”在端口8080上运行的HAProxy Web监控:

http://192.168.1.102:8080/stats

HAProxy Statstics

HAProxy正在成功工作,充当我们两个Nginx Web服务器的负载均衡器。

结论

HAProxy或High Availability代理是一种开源软件,为基于TCP的服务提供高可用性,它作为HTTP负载平衡器和代理服务器运行。 该软件用C编写,支持SSL,保持活动和压缩。 HAProxy是每个需要负载平衡器和代理服务器的人的正确选择,该服务器快速轻便,占用空间小,CPU使用率低。 Haproxy可以在第4层TCP模式和第7层HTTP模式下运行。 Nginx只支持HAProxy的第7层HTTP模式。 如果要使用第4层TCP模式,可以使用其他Web服务器,如apache。 在CentOS 7上,HAProxy在默认存储库中可用。 它很容易安装和配置。