在 Linux 中使用 HAProxy、Nginx 和 Keepalived 进行负载平衡

正确设置负载平衡器可以让您的 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。

代理

代理 代表高可用性代理。 它是一个开源负载均衡器,可为基于 TCP 和 HTTP 的应用程序提供负载均衡、高可用性和代理解决方案。 它最适合跨多台服务器分配工作负载,以提高服务器的性能和可靠性。

Haproxy 的功能是将来自最终用户的 Web 请求转发到可用的 Web 服务器之一。 它可以使用各种负载平衡算法,如 循环赛, 最少连接 等等。

保活

如果 HAProxy 负载均衡器出现故障怎么办?

保活 是一个开源程序,支持负载平衡和高可用性。 它基本上是一个路由软件,并提供两种类型的负载均衡:

  • 第 4 层(传输层)
  • 第七层(应用层)

Keepalived 可以执行以下功能:

Keepalived 使用 VIP (虚拟 IP 地址) 作为浮动 IP,在 Master 负载均衡器和 Backup 负载均衡器之间浮动并用于在它们之间切换。 如果主负载均衡器出现故障,则使用备用负载均衡器转发 Web 请求。

让我们开始模拟怎样为 Web 服务器维护高可用性和负载平衡。

使用 Nginx、HAProxy 和 Keepalived 在 Linux 中设置负载均衡器

在 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

允许 nginx 中的 Web 流量默认被 CentOS 防火墙阻止。

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 Local_IP_Address。 这里的例子:

curl 10.13.211.169

您将获得如下输出:

在 Linux 中使用 HAProxy、Nginx 和 Keepalived 进行负载平衡 1

第 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://负载均衡器的 IP 地址/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 服务器(一次一个),用于您在负载均衡器上的请求。

输出将如下所示:

CentOS 中的 HAProxy

第 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 停止终端运行。

输出将如下所示:

CentOS Linux 中的 Keepalived

如果您在安装和配置文件时感到不舒服, 从我的 GitHub 存储库下载脚本 并简单地运行它们。

我希望本教程可以帮助您在 Linux 中设置具有高可用性的负载均衡器。 当然,这是一个简单的设置,但它绝对提供了有关负载平衡和处理高可用性的想法。

如果您有任何问题或建议,请在下方留言。

相关阅读:

Posted in: LinuxTags: ,