如何使用 HAProxy、Nginx 和 Keepalived 在 Linux 中设置负载均衡器如何使用 HAProxy、Nginx 和 Keepalived 在 Linux 中设置负载均衡器如何使用 HAProxy、Nginx 和 Keepalived 在 Linux 中设置负载均衡器如何使用 HAProxy、Nginx 和 Keepalived 在 Linux 中设置负载均衡器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 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 爱好者和开源活动家。

©2015-2025 艾丽卡 support@alaica.com