如何在CentOS 8上使用KeepAlived设置高可用性NGINX

如何在CentOS 8上使用KeepAlived设置高可用性NGINX

Nginx是免费和开源的,并且是世界上最受欢迎的Web服务器之一。它也可以用作反向代理,负载平衡器和HTTP缓存。高可用性允许应用程序在发生故障时将工作重新路由到另一个系统。有多种技术可用于建立高可用性系统。

Keepalived是一个系统守护程序,可在发生故障时连续监视服务或系统的高可用性。 如果一个节点出现故障,则第二个节点将提供资源。

本教程显示了如何在CentOS 8上使用KeepAlived来设置高可用性的Nginx Web服务器。

先决条件

  • 两台运行CentOS的服务器8。 一个用于主节点,另一个用于备用节点。
  • 服务器具有root密码。

在两个节点上安装Nginx

首先,您需要在两个节点上都安装Nginx软件包。您可以使用以下命令进行安装:

dnf install nginx -y

在两个节点上都安装了Nginx之后,请启动Nginx服务,以便可以在系统重新引导时启动它。

systemctl start nginxsystemctl enable nginx

完成后,您可以继续下一步。

在两个节点上创建一个Index.html文件

接下来,您需要在两个节点上创建一个自定义index.html文件,以标识每个节点。

在第一个节点上,使用以下命令创建index.html文件。

echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

在第二个节点上,使用以下命令创建index.html文件。

echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html

完成后,保存文件并关闭它。

安装和配置Keepalived

接下来,您需要在两个节点上安装Keepalived。默认情况下,Keepalived软件包在CentOS 8默认存储库中可用。您可以通过运行以下命令来安装它。

dnf install keepalived -y

在两个节点上都安装了keepalived软件包后,您需要在两个节点上编辑keepalived缺省配置文件。

在第一个节点上,编辑keepalived.conf文件。

nano /etc/keepalived/keepalived.conf

删除默认内容并添加以下内容:

global_defs {
  # Keepalived process identifier
  router_id nginx
}

# Script to check whether Nginx is running or not
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
  state MASTER
  interface eth0
  virtual_router_id 151
  priority 110

  # The virtual ip address shared between the two NGINX Web Server which will float
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

完成后,保存文件并关闭它。

在第二个节点上编辑keepalived.conf文件。

nano /etc/keepalived/keepalived.conf

删除默认内容并添加以下内容:

global_defs {
  # Keepalived process identifier
  router_id nginx
}

# Script to check whether Nginx is running or not
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
  state BACKUP
  interface eth0
  virtual_router_id 151
  priority 100

  # The virtual ip address shared between the two NGINX Web Server which will float
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

保存并关闭文件后,您需要编写脚本以查看Nginx服务是否正在运行。可以使用以下命令创建它:

笔记:在上述配置文件中,我将MASTER替换为BACKUP,将110替换为100。

nano /bin/check_nginx.sh

添加以下行:广告

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

保存并关闭文件,并使用以下命令设置适当的权限:

chmod 755 /bin/check_nginx.sh

最后,启动keepalived服务,以便可以使用以下命令在系统重新启动时启动它:

systemctl start keepalivedsystemctl enable keepalived

您还可以使用以下命令检查keepalived服务的状态:

systemctl status keepalived

您应该获得以下输出:

? keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
  Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 3142 (keepalived)
    Tasks: 2 (limit: 12524)
   Memory: 2.1M
   CGroup: /system.slice/keepalived.service
           ??3142 /usr/sbin/keepalived -D
           ??3143 /usr/sbin/keepalived -D

Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10

您还可以使用以下命令检查主节点的虚拟IP地址的状态:

ip add show

以下输出显示虚拟IP地址192.168.1.10。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever

完成后,您可以继续下一步。

在两个节点上配置防火墙

接下来,您需要在两个节点上都允许端口80和VRRP。您可以使用以下命令运行它:

firewall-cmd --permanent --add-service=httpfirewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent

然后重新加载firewalld以应用更改。

firewall-cmd –reload

检查keepalive

此时,已安装并配置了Nginx和Keepalived。 现在该测试Nginx高可用性是否有效。

打开网络浏览器并访问URL http:// your-virtual-ip..显示下一页。

现在,在主节点上停止Nginx服务,并测试虚拟IP是否可以从节点1切换到节点2。

在主节点上,使用以下命令停止Nginx服务:

systemctl stop nginx

然后登录到Node2并使用以下命令验证虚拟IP。

ip add show

以下输出显示了虚拟IP。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever

然后使用该URL访问Nginx Web服务器 http:// your-virtual-ip.. 进入“ Node2”页面。

Nginx在节点2上

结论

恭喜!您已经使用Keepalived成功设置了高可用性的Nginx服务器。我们希望您有足够的知识来在生产环境中设置高可用性的Nginx服务器。

Sidebar