如何为共享 Web 流量设置 HAproxy 负载均衡服务器
本文旨在准备网站的高可用性。那些希望其网站对客户或用户始终可用的人也可以使用它,并使用高可用性服务器并在其服务器之间共享。它是一个免费的开源应用程序,用作 TCP/HTTP 负载均衡器,它将 Web 流量分发到多台服务器,并提高 Web 服务器的性能和可靠性。
安装
假设负载均衡器 HA 代理服务器 IP 地址为 http://192.167.57.150
HAproxy 服务器详细信息
操作系统:Centos 6.7,IP 地址:192.168.57.150
WebServer1
操作系统:Centos 6.7,IP 地址:192.168.57.147
WebServer2
操作系统:Centos 6.7,IP 地址:192.168.57.148
我们需要在两台 Web 服务器(即 192.168.57.151 和 192.168.57.152)上安装 Apache。
# yum install http*
安装后,请从 Web 浏览器访问 Apache http://your-server-ip-address
安装 HAProxy 服务器
# yum install haproxy openssl-devel
打开主机文件并在所有 3 台服务器(HAproxy 负载均衡器、webserver1、webserver2)中添加以下行
192.168.87.150 haproxy.demo.com haproxy 192.168.87.151 webserv1.demo.com haproxy 192.168.87.152 webserv2.demo.com haproxy # vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.87.150 haserver.cgi.com haserver 192.168.87.151 ha2.cgi.com ha2 192.168.87.152 ha1.cgi.com ha1
现在,您需要启用 HAproxy 日志以识别未来调试的问题
# vi /etc/haproxy/haproxy.cfg
添加以下行以启用日志记录
log 127.0.0.1 local Needed to enable the UDp SYSLOG reception in /etc/rsyslog.conf # vi /etc/rsyslog.conf #### MODULES #### $ModLoad imuxsock # provides support for local system logging (e.g. Via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) #$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP SYSLOG reception #$ModLoad imtcp #$InputTCPServerRun 514
现在在 /etc/rsyslog.d/ 文件夹中创建一个 haproxy.conf 以创建日志文件
# vi /etc/rsyslog.d/haproxy.conf
添加以下行以创建文件
local.* /var/log/haproxy.log
重新启动 rsyslog 服务以更新我们所做的更改
# service rsyslog restart
配置 HAproxy 全局设置
we needed to setup the glogal setting in /etc/haproxy/haproxy.cfg # vi /etc/haproxy/haproxy.cfg #--------------------------------------------------------------------- # 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
在发生故障的情况下,我们必须提供两台 Web 服务器作为前端和后端服务器的详细信息。
frontend LB bind 192.168.87.150:80 reqadd X-Forwarded-Proto: http default_backend LB backend LB 192.168.87.150:80 mode http stats enable stats hide-version stats uri /stats stats realm Haproxy Statistics stats auth haproxy:redhat # Credentials for HAProxy Statistic report page. balance roundrobin # Load balancing will work in round-robin process. option httpchk option httpclose option forwardfor cookie LB insert server ha2 192.168.87.151:80 cookie ha1 check # backend server. server ha1 192.168.87.152:80 cookie ha2 check # backend server.
我们需要重新启动服务并使更改生效。
# service haproxy restart
要自动启动服务,请使用以下命令
# chkconfig haproxy on
检查自动启动 -
# chkconfig --list haproxy
服务重新启动后,我们就可以在 http://192.168.87.150:/stats 上访问负载均衡器。
为了测试 HAproxy 负载均衡器,我们必须在两台 Web 服务器中创建一个包含以下代码的 index.html 文件。
在 webserver1 中创建一个包含以下代码的 index.html 文件。
<html> <head> <title>HAProxy Test Page</title> </head> <body> <!-- Main content --> <h1>My HAProxy Test Page Server 1 </h1> </body> </html>
在 webserver2 中创建一个包含以下代码的 index.html 文件。
<html> <head> <title>HAProxy Test Page</title> </head> <body> <!-- Main content --> <h1>My HAProxy Test Page Server 2 </h1> </body> </html>
现在访问 **haproxy** 服务器 IP http://192.168.57.150
默认情况下,您可以看到 webserver 1 的页面
Webserver1
现在,通过转到 webserver 1 并停止 HTTPd 服务器来测试负载均衡
# service httpd stop
然后,访问 **haproxy** 服务器 IP,http://192.168.57.150
现在,您将自动看到 webserver2 的网页
Webserver2
要进行验证,您可以访问 HAproxy 负载均衡器统计信息页面 http://192.168.87.150/stats
HAproxy
结论
配置后,即使其中一台服务器关闭或不可用,您也应该能够无中断地访问您的网站。同样,我们也可以为 Apache 设置 HAproxy。您还可以观察到,通过配置上述内容,Webserver1 在 HAproxy 负载均衡器统计信息页面中不可访问或已关闭。您还可以根据需要添加任意数量的服务器。