如何使用 HAProxy、Nginx 和 Keepalived 在 Linux 中设置负载均衡器
使用负载均衡器和高可用性将服务器配置为处理高流量。本教程向您展示如何使用 HAProxy 作为负载均衡器、Keepalived 作为高可用性以及用于 Web 服务器的 Nginx 来实现工作负载均衡器配置。
正确设置负载均衡器可以让您的 Web 服务器顺利处理高流量而不是崩溃。
什么是负载均衡?
负载平衡是将工作负载分配到多个服务器的过程。这就像在公司中分配白班和夜班工人的工作量一样。负载平衡克服了单点故障,从而提高了服务器的可靠性。
下面显示了没有负载平衡的服务器的示例。
在这个例子中,如果Web服务器宕机,用户的Web请求就无法实时访问。此外,如果多个用户同时请求同一网页,则通过单个 Web 服务器处理用户的 Web 请求可能会是一个缓慢的过程。因此,负载均衡器用于增强服务器的性能、提供备份并防止故障。
在本教程中,我们将使用 Nginx、HAProxy 和 Keepalived 为 Web 服务器设置负载均衡器。
具有负载均衡器的服务器的示例如下所示。
那么,Nginx、Haproxy 和 Keepalived 是什么?
nginx
Nginx,发音为 Engine-x,是一个开源 Web 服务器。它不仅仅是一个 Web 服务器,还可以用作反向代理服务器、邮件代理服务器、负载平衡器、轻量级文件服务器和 HTTP 缓存。 Nginx 已被用于许多流行网站,如 BitBucket、WordPress、Pinterest、Quora 和 GoDaddy。
HA代理
HAProxy 代表高可用性代理。它是一个开源负载均衡器,为基于 TCP 和 HTTP 的应用程序提供负载均衡、高可用性和代理解决方案。它最适合在多个服务器之间分配工作负载,以提高服务器的性能和可靠性。
Haproxy 的功能是将最终用户的 Web 请求转发到可用的 Web 服务器之一。它可以使用各种负载平衡算法,如循环、最少连接等。
保活
如果 HAProxy 负载均衡器出现故障怎么办?
Keepalived 是一个开源程序,同时支持负载均衡和高可用性。它基本上是一个路由软件,并提供两种类型的负载平衡:
第 4 层(传输层)
第7层(应用层)
Keepalived 可以执行以下功能:
健康检查(服务器是否启动)
实施 VRRP(虚拟冗余路由协议)来处理负载平衡故障转移
Keepalived使用VIP(虚拟IP地址)作为浮动IP,浮动在Master负载均衡器和Backup负载均衡器之间,用于在它们之间进行切换。如果主负载均衡器出现故障,则使用备用负载均衡器转发 Web 请求。
让我们模拟如何维护 Web 服务器的高可用性和负载平衡。
使用 Nginx、HAProxy 和 Keepalived 在 Linux 中设置负载均衡器
这是一个测试实验室实验,意味着它只是一个帮助您入门的测试设置。如果您在真实服务器上实现它,您可能需要进行一些调整。使用本教程作为学习材料,而不是盲目地按照它进行自己的设置。
我在本教程中使用了 CentOS Linux 发行版。您可以使用其他 Linux 发行版,但我不能保证所有命令(尤其是安装命令)是否适用于其他发行版。
负载均衡器设置要求
4 个已安装 CentOS 的系统(对于本教程来说,最小安装就足够了)
2 CentOS需要设置nginx
2 CentOS 设置 HAProxy 和 Keepalived
在本教程中,我们以以下 IP 地址为例。这些可以根据您的系统进行更改。不要以为这些是静态IP。
网络服务器:
10.13.211.169
10.13.211.158
负载均衡器:
10.13.211.194
10.13.211.120
虚拟IP:
10.13.211.10
您可以在 Linux 命令行中轻松获取 IP 地址。
第 1 步:使用 Nginx 设置 Web 服务器
在这一部分中,我们将使用两个 CentOS 系统作为 Web 服务器。我们需要先在它们上安装 Nginx。
为此,添加一个包含 nginx 的存储库,然后从那里安装它:
yum install epel-release
yum install nginx
安装nginx后,启动Nginx服务:
systemctl start nginx
使 nginx 服务在每次启动后都启用:
systemctl enable nginx
检查nginx服务状态:
systemctl status nginx
允许 nginx 中默认被 CentOS 防火墙阻止的 Web 流量。
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload
在第二个 CentOS Web 服务器上也重复上述步骤。
现在请注意接下来的步骤。
nginx 的 Web 文件位于 /usr/share/nginx/html
更改 index.html 文件的内容只是为了识别 Web 服务器。
对于第一个 Web 服务器:
echo “this is first webserver” > /usr/share/nginx/html/index.html
对于第二个 Web 服务器:
echo “this is second webserver” > /usr/share/nginx/html/index.html
注意:如果您使用虚拟机,最好在一个系统上安装和配置 Nginx,然后克隆该系统。之后,您可以在第二个系统上重新配置。节省时间和错误。
现在,通过在浏览器中访问以下 URL 来确认 Web 服务器状态:http://SERVER_DOMAIN_NAME 或 Local_IP_Address。这里的例子:
http://10.13.211.169
或者在终端中,curl Local_IP_Address。这里的例子:
curl 10.13.211.169
您将得到如下输出:
第 2 步:使用 HAProxy 设置负载均衡器
在另外两个系统上,使用以下命令安装 HAProxy:
yum -y update
yum -y install haproxy
HAProxy 配置文件位于 /etc/haproxy.conf。使用cd命令进入目录并在编辑之前备份文件。
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac
创建一个新的 haproxy.cfg 文件并使用您喜欢的任何编辑器打开该文件。
touch haproxy.cfg
vim haproxy.cfg
现在,将以下行粘贴到文件中:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#frontend
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check # ip_address_of_2nd_centos_webserver
现在,启用并启动 HAProxy 服务。
systemctl enable haproxy
systemctl start haproxy
检查HAProxy的状态:
systemctl status haproxy
在浏览器中输入 url 来确认 haproxy 的服务:http://负载均衡器的 IP 地址/haproxy?stats。这里使用的例子:
http://10.13.211.194/haproxy?stats
或者在终端中使用命令 $curl LoadBalancer_IP_Address
curl 10.13.211.194
curl 10.13.211.194
卷曲两次,您将看到卷曲命令的不同输出。这是因为对于负载均衡器上的请求,响应来自不同的 Web 服务器(一次一个)。
输出如下所示:
第 3 步:使用 Keepalived 设置高可用性
Keepalived 必须安装到两个 HAProxy 负载均衡器 CentOS 系统(我们刚刚在上面配置)。一个充当主负载均衡器(主负载均衡器),另一个充当备份负载均衡器。
在两个系统上,运行以下命令:
yum install -y keepalived
Keepalived的配置文件位于/etc/keepalived/keepalived.conf
。备份原始 keepalived.conf 文件,并在新的 keepalived.conf 文件中使用以下配置。
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
将以下行粘贴到配置文件中(不要忘记更改电子邮件地址):
global_defs {
notification_email {
linux教程
[email
}
notification_email_from [email
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0 #put your interface name here. [to see interface name: $ ip a ]
virtual_router_id 51
priority 101 # 101 for master. 100 for backup. [priority of master> priority of backup]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #password
}
virtual_ipaddress {
10.13.211.10 # use the virtual ip address.
}
}
注意:虚拟 IP 可以是网络内的任何实时 IP。接近负载均衡器的 IP 地址范围。这里,负载均衡器的IP是:10.13.211.194和10.13.211.120,VIP是10.13.211.10
根据系统假设编辑配置文件。注意主备配置。保存文件并启动并启用 Keepalived 进程:
systemctl start keepalived
systemctl enable keepalived
查看Keepalived的状态:
systemctl status keepalived
注意:如果您在虚拟机上,最好在一个系统上安装并配置 Haproxy 和 Keepalived,然后克隆该系统。之后,您可以在第二个系统上重新配置。节省时间和错误。
现在要检查高可用性负载均衡器的状态,请转到终端并点击:
$ while true; do ; curl 10.13.211.10 ; sleep 1; done;
按ctrl+c
停止终端运行。
输出将如下所示:
如果您对安装和配置文件感到不舒服,请从我的 GitHub 存储库下载脚本并运行它们。
我希望本教程可以帮助您在 Linux 中设置具有高可用性的负载均衡器。当然,这是一个简单的设置,但它确实提供了有关负载平衡和处理高可用性的想法。
如果您有疑问或建议,请在下面留言。
作者:Rishi Raj Gautam 是一位 Linux 爱好者和开源活动家。