Nginx高可用之如何在Linux中使用KeepAlived设置高可用性


原文地址:Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

众所周知,NGINX是一款高度评价的Web服务器,也可以用作反向代理,负载平衡器和HTTP缓存。在本文中,我们将演示如何在Linux中使用keepalived设置高可用性(HA)NGINX Web服务器。

Keepalived在VRRP(虚拟路由器冗余协议)上工作,该协议允许一个静态IP在两个Linux系统之间进行故障转移。

以下是我对NGINX HA的实验详细信息:

  • 节点1 – 192.168.1.130 – nginx1.example.com –最低CentOS 8 / RHEL 8
  • 节点2 – 192.168.1.140 – nginx2.example.com –最低CentOS 8 / RHEL 8
  • 虚拟IP(VIP)– 192.168.1.150
  • sudo用户pkumar
  • 防火墙陷入困境
  • SELinux运行

让我们跳到安装和配置步骤,

步骤1)从命令行安装NGINX Web服务器

NGINX软件包在默认的CentOS 8 / RHEL 8存储库中可用,因此在两个节点上都在dnf命令下运行以安装Nginx Web服务器

$ sudo dnf install -y nginx

对于CentOS 7 / RHEL 7

NGINX软件包在默认的CentOS 7 / RHEL 7存储库中不可用,因此要首先安装它,我们必须启用epel存储库。在两个节点上运行以下命令

$ sudo yum install epel-release -y
$ sudo yum install -y nginx

对于Ubuntu / Debian

对于基于Debian的Linux发行版,nginx Web服务器软件包可在默认软件包存储库中找到,因此要安装nginx,请运行

$ sudo apt update
$ sudo apt install -y nginx

步骤2)为两个节点配置Custom index.html文件

让我们为两个节点创建自定义index.html文件,以便在通过虚拟ip访问时,我们可以轻松地确定哪个服务器在为网站提供服务。

对于节点1,运行以下echo命令,

[pkumar@nginx1 ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html

对于节点2,运行

[pkumar@nginx2 ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html

步骤3)在防火墙中允许NGINX端口并启动其服务

如果启用了防火墙并且在两个节点上都运行防火墙,则通过执行以下命令来允许端口80:

对于CentOS / RHEL系统

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd –reload

对于Ubuntu / Debian系统

$ sudo ufw allow 'Nginx HTTP'

通过在两个节点上的命令命令下运行,启动并启用nginx服务,

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

通过从外部运行以下curl命令 来测试两个节点的NGINX Web服务器,

$ curl http://192.168.1.130
<h1>This is NGINX Web Server from Node 1</h1>
$ curl http://192.168.1.140
<h1>This is NGINX Web Server from Node 2</h1>

完美的是,上面命令的输出确认nginx正在运行并且可以从外部使用系统的IP地址进行访问。

步骤4)安装和配置Keepalived

对于CentOS / RHEL系统,keepalived软件包及其依赖项在默认的软件包存储库中可用,因此其安装非常简单,只需在两个节点上都在命令下面运行即可。

$ sudo dnf install -y keepalived // CentOS 8/ RHEL 8
$ sudo yum install -y keepalived // CentOS 7 / RHEL 7

对于Ubuntu / Debian系统,

$ apt install -y keepalived

一旦安装了keepalived,就可以通过编辑其配置文件' /etc/keepalived/keepalived.conf '对其进行配置。我们将节点1保留为主节点,将节点2保留为备用节点。

备份配置文件,

[pkumar@nginx1 ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org

用以下内容替换keepalived.conf的内容:

[pkumar@nginx1 ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf
[pkumar@nginx1 ~]$ sudo vi /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 enp0s3
 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.150/24
 }
 track_script {
 check_nginx
 }
 authentication {
 auth_type AH
 auth_pass secret
 }
}

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

现在创建一个包含以下内容的脚本,该脚本将检查nginx服务是否正在运行。Keepalived将始终检查check_nginx.sh脚本的输出,如果它发现nginx服务已停止或正在响应,则它将在备份节点上移动虚拟IP地址。

[pkumar@nginx1 ~]$ sudo vi /bin/check_nginx.sh
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
 exit 1
fi

保存并关闭文件,并使用chmod命令设置所需的权限,

[pkumar@nginx1 ~]$ sudo chmod 755 /bin/check_nginx.sh

现在,使用以下scp命令将keepalived.conf和check_nginx.sh文件从节点1复制到节点2 。

[pkumar@nginx1 ~]$ scp /etc/keepalived/keepalived.conf root@192.168.1.140:/etc/keepalived/
[pkumar@nginx1 ~]$ scp /bin/check_nginx.sh root@192.168.1.140:/bin/

复制文件后,然后登录到节点2,并在keepalived.conf文件中进行几处更改。将状态从MASTER更改为BACKUP并通过将其设置为100降低优先级。进行更改后,节点2上的keepalived.conf如下所示,

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

如果OS防火墙正在运行,则通过运行以下命令允许VRRP,

–在两个节点上执行这些命令

对于CentOS / RHEL系统

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
$ sudo firewall-cmd --reload

对于Ubuntu / Debian系统

通过在主节点(节点1)上执行以下命令来允许VRRP运行

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'

从备份/从节点(节点2)

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'
$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'

现在,通过在两个节点的systemctl命令下运行,最终启动keepalived服务,

$ sudo systemctl start keepalived
$ sudo systemctl enable keepalived

通过运行以下命令验证keepalived服务:

$ sudo systemctl status keepalived

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

完美,现在在主节点上验证VIP(虚拟IP地址)状态,在本例中VIP为192.168.1.130

$ ip add show

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

以上输出确认VIP已在其enp0s3接口的主节点上配置。因此,让我们在下一步中进行keepalived和nginx测试。

步骤5)Keepalived和NGINX测试

要执行测试,请尝试使用虚拟IP(192.168.1.150)访问Nginx Web服务器,当前它应该向我们显示节点1 nginx页面。

打开wen浏览器,然后输入“ http://192.168.1.150 ”,然后按Enter键,

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

现在尝试停止节点1上的NGINX服务,并查看虚拟IP是否已从节点1切换到节点2,然后尝试使用VIP(192.168.1.150)访问nginx网页,这一次它将向我们显示节点2的nginx页面。

[pkumar@nginx1 ~]$ sudo systemctl stop nginx
[pkumar@nginx1 ~]$ ip add show

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

登录到节点2并运行ip命令以查看虚拟IP地址,

[pkumar@nginx2 ~]$ ip add show

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

现在,让我们尝试使用虚拟IP访问网页,

Nginx高可用之如何在Linux中使用KeepAlived设置高可用性

很好,上面证实了我们已经通过keepalived成功设置了高度可用的NGINX Web服务器。以上就是本文的全部内容,请分享您的反馈,评论和建议。

评论

登录后评论

服务器优惠活动

Top