正确设置负载均衡器可以让您的 Web 服务器顺利处理高流量,而不是崩溃。
什么是负载均衡?
负载平衡是将工作负载分配到多个服务器的过程。 这就像在公司的白班和夜班工人之间分配工作量。 负载平衡克服了单点故障,提高了服务器的可靠性。
一个 example 没有负载平衡的服务器的外观如下所示。
在这个 example,如果web服务器宕机,用户的web请求就无法实时访问。 此外,如果多个用户同时请求同一个网页,那么通过单个 Web 服务器为用户的 Web 请求提供服务可能是一个缓慢的过程。 因此,负载平衡器用于增强服务器的性能、提供备份和防止故障。
在本教程中,我们将使用 Nginx、HAProxy 和 Keepalived 为 Web 服务器设置负载均衡器。
一个 example 带有负载平衡器的服务器的外观如下所示。
那么,什么是 Nginx、Haproxy 和 Keepalived?
Nginx
Nginx,发音为 Engine-x 是一个开源 Web 服务器。 它不仅仅是一个 Web 服务器,它还可以作为反向代理服务器、邮件代理服务器、负载平衡器、轻量级文件服务器和 HTTP 缓存运行。 Nginx 已被用于许多流行的网站,如 BitBucket、WordPress、 Pinterest、Quora 和 GoDaddy。
HAProxy
HAProxy 代表高可用性代理。 它是一个开源负载均衡器,为基于 TCP 和 HTTP 的应用程序提供负载均衡、高可用性和代理解决方案。 它最适合将工作负载分布在多台服务器上,以提高服务器的性能和可靠性。
Haproxy 的功能是将最终用户的 Web 请求转发到可用的 Web 服务器之一。 它可以使用各种负载平衡算法,例如 循环赛, 最少的连接 等等
保活
如果 HAProxy 负载均衡器出现故障怎么办?
保活 是一个同时支持负载均衡和高可用性的开源程序。 它基本上是一个路由软件,提供两种类型的负载均衡:
- 第 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 地址作为 example. 这些可以根据您的系统进行更改。 不要认为这些是静态 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
允许默认情况下被 CentOS 防火墙阻止的 nginx 中的 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 服务器:
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 服务器状态:https://SERVER_DOMAIN_NAME 或 Local_IP_Address。 这里的例子:
https://10.13.211.169
或者在终端, curl 本地 IP 地址。 这里的例子:
curl 10.13.211.169
您将获得如下输出:

第 2 步:使用 HAProxy 设置负载均衡器
在其他两个系统上,使用以下命令安装 HAProxy:
yum -y update
yum -y install haproxy
HAProxy 配置文件位于 /etc/haproxy。 使用 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 的服务:https://load balancer’s IP Address/haproxy?stats。 此处使用的示例:
https://10.13.211.194/haproxy?stats
或在终端中,使用命令 $ curl LoadBalancer_IP_Address
curl 10.13.211.194
curl 10.13.211.194
curl 两次,你会看到不同的输出 curl 命令。 这是因为响应来自不同的 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 {
linuxhandbook.com
[email protected]
}
notification_email_from [email protected]
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
根据系统假设编辑配置文件。 注意主备配置。 Save 文件并启动并启用 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 爱好者和开源活动家。