keepalived+nginx+nfs搭建高可用

使用keepalived+nginx+nfs搭建高可用:就是主从节点安装完keepalived+nginx后,nfs服务器创建一个NGINX的欢迎页面,然后再暴露出去,让主从节点访问的NGINX的欢迎页面是由nfs服务器提供的。
使用RedHat/CentOS Stream9系列的Linux系统进行部署搭建操作。

IP地址主机名软件节点
192.168.194.128masterkeepalived+nginx+nfs-utils主节点
192.168.194.131backupkeepalived+nginx+nfs-utils从节点
192.168.194.130nfsnsf-utils暴露共享文件节点
这里的三个IP地址需要改为自己实际的IP地址

0 系统必要设置

# 1. 设置主机名
[root@localhost ~]# hostnamectl set-hostname master && bash

[root@localhost ~]# hostnamectl set-hostname backup && bash

[root@localhost ~]# hostnamectl set-hostname nfs && bash

# 2. 修改IP地址
[root@master ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.194.128/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 con nection.autoconnect yes
[root@master ~]# nmcli c up ens160

[root@backup ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.194.131/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@backup ~]# nmcli c up ens160

[root@nfs ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.194.130/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@nfs ~]# nmcli c up ens160


# 3. 关闭selinux
[root@master ~]# getenforce 
Enforcing
[root@master ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config 
[root@master ~]# getenforce 
Enforcing
[root@master ~]# setenforce 0
[root@master ~]# getenforce 
Permissive


[root@backup ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config 
[root@backup ~]# setenforce 0


# 4. 关闭防火墙
[root@master ~]# systemctl disable --now firewalld.service 
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".

[root@backup ~]# systemctl disable --now firewalld.service 
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".

以上的所有操作这三台虚拟机都需要执行。

1 搭建

步骤:

  • 第0步,先搭建主从keepalived+nginx节点;
  • 第1步,在nfs上搭建nfs-utils并暴露要共享的目录;
  • 第2步,在主从节点上进行nfs配置

这第0步可以参考第一点keepalived+nginx的搭建,和这个一模一样,接着才是搭建在三台服务器上搭建nfs

第一步:

在 nfs-server(192.168.194.130) 上配置 NFS 服务

安装 nfs-utils

dnf install -y nfs-utils

创建共享目录

mkdir -p /var/nfs/nginx-html

放入测试网页(Nginx 欢迎页)

echo "<h1>Welcome from NFS Shared Storage! </h1>" | sudo tee /var/nfs/nginx-html/index.html

设置权限(关键!)

chown -R nobody:nobody /var/nfs/nginx-html
chmod -R 755 /var/nfs/nginx-html

配置 /etc/exports
允许主从 Nginx 节点访问:

vim /etc/exports 
# 内容如下:
/var/nfs/nginx-html 192.168.194.128(rw,sync,no_subtree_check) 192.168.194.131(rw,sync,no_subtree_check)
# 192.168.194.128和192.168.194.131是主从节点

启动 NFS 服务

systemctl start nfs-server
exportfs -rav   # 重新加载 exports

防火墙放行(如果启用 firewalld)

firewall-cmd --permanent --add-service={nfs,mountd,rpc-bind}
firewall-cmd --reload

到此,NFS 服务器配置完成!

第二步:

在 nginx-master(192.168.194.128) 和 nginx-backup(192.168.194.131) 上挂载 NFS
在 两台 Nginx 机器上都要执行以下操作

安装 nfs-utils(客户端支持)

dnf install -y nfs-utils

测试是否能访问 NFS 共享

showmount -e 192.168.194.130

你应该看到:

Export list for 192.168.194.130:
/var/nfs/nginx-html 192.168.194.128,192.168.194.131

挂载到 Nginx 默认根目录(注意:先备份原内容)

mv /usr/share/nginx/html /usr/share/nginx/html.bak   # 备份
mkdir -p /usr/share/nginx/html						 # 创建新的目录来挂载

挂载 NFS:

mount -t nfs 192.168.194.130:/var/nfs/nginx-html /usr/share/nginx/html

第三步:

验证整个架构
本地测试(在任意 Nginx 节点)

curl localhost
应返回:<h1>Welcome from NFS Shared Storage! </h1>

通过 Keepalived VIP 访问 Web 页面
假设你的 VIP 是 192.168.194.100:

curl 192.168.194.100
# 输出结果
<h1>Welcome from NFS Shared Storage! </h1>

如果这两个命令的输出结果都是一样的话就说明搭建成功了

更多推荐