NFS高可用部署

这篇具有很好参考价值的文章主要介绍了NFS高可用部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NFS高可用目的

部署NFS双机热备高可用环境,用作K8S容器集群的远程存储,实现K8S数据持久化。

NFS高可用思路

NFS + Keepalived 实现高可用,防止单点故障。
Rsync+Inotify 实现主备间共享数据进行同步

技术要求

  • 两个NFS节点机器的配置要一致
  • keepalived监控nfs进程,master的nfs主进程宕掉无法启动时由slave的nfs接管继续工作。
  • k8s数据备份到slave,同时master和slave数据用rsync+inotify实时同步,保证数据完整性。
  • 生产环境下,最好给NFS共享目录单独挂载一块硬盘或单独的磁盘分区。

环境准备

### 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
###关闭selinux
setenforce 0    ##临时关闭
vi /etc/selinux/config   ##永久关闭

NFS高可用部署

一、安装部署NFS服务(Master和Slave两机器同样操作)
1)安装nfs
yum -y install nfs-utils
2)创建nfs共享目录
  mkdir /data/k8s_storage

3)编辑export文件,运行k8s的node节点挂载nfs共享目录
  vim /etc/exports
  /data/k8s_storage 10.90.12.0/24(rw,sync,no_root_squash)

4)配置生效
   exportfs -r

5)查看生效
   exportfs

6)启动rpcbind、nfs服务
  systemctl enable rpcbind --now
  systemctl enable nfs --now

7)查看 RPC 服务的注册状况
   rpcinfo -p localhost

8)showmount测试
Master节点测试
  showmount -e masterIP


Slave节点测试
  showmount -e SlaveIP
二、安装部署keepalived(Master和Slave两机器同样操作)
1)安装keepalived
   yum -y install keepalived

2)Master节点的keepalived.conf配置(设置keepalived为非抢占模式,如果设置成抢占模式会在不断的切换主备时容易造成NFS数据丢失。)
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
# >/etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
    router_id nfs
}
vrrp_script chk_nfs {
    script "/etc/keepalived/nfs_check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 61
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
        chk_nfs
    }
    virtual_ipaddress {
        10.90.12.30/24
    }
}

3)Slave节点的keepalived.conf配置
global_defs {
    router_id nfs
}
vrrp_script chk_nfs {
    script "/etc/keepalived/nfs_check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 61
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
        chk_nfs
    }
    virtual_ipaddress {
        10.90.12.30/24
    }
}

4)编辑nfs_check.sh监控脚本
# vi /etc/keepalived/nfs_check.sh
#!/bin/bash

for i in `seq 14`;do

  counter=`ps -aux | grep '\[nfsd\]' | wc -l`
  KEEP = `ps -ef | grep keepalived | wc -l`
  if [ $counter -eq 0 ];then

    sudo systemctl restart nfs

  fi

  sleep 2

  counter=`ps -aux | grep '\[nfsd\]' | wc -l`

  if [ $counter -eq 0 ];then

    systemctl stop keepalived.service

  else

      if [ $KEEP -eq 0 ]; then

         systemctl start keepalived

      fi

  fi

  sleep 2

done

设置脚本执行权限
# chmod 755 /etc/keepalived/nfs_check.sh

5)启动keepalived服务
# systemctl enable keepalived.service --now

查看服务进程是否启动
# ps -ef|grep keepalived


三、安装部署Rsync+Inofity(Master和Slave两机器都要操作)

1)安装rsync和inotify
  # yum -y install rsync inotify-tools

2)Master节点机器配置rsyncd.conf
# cp /etc/rsyncd.conf /etc/rsyncd.conf_bak
# >/etc/rsyncd.conf
# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
port = 873
hosts allow = 10.90.12.0/24
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3

[master_nfs]
path = /data/k8s_storage
comment = master_nfs
ignore errors
read only = no
list = no
auth users = nfs
secrets file = /opt/rsync_salve.pass

编辑密码和用户文件(格式为"用户名:密码")
# vim /opt/rsync_salve.pass
nfs:nfs123

编辑同步密码
该文件内容只需要填写从服务器的密码,例如这里从服务器配的用户名密码都是nfs:nfs123,则主服务器同步密码写nfs123一个就可以了
vi /opt/rsync.pass
设置文件执行权限
# chmod 600 /opt/rsync_salve.pass
# chmod 600 /opt/rsync.pass

启动服务
# systemctl enable rsyncd --now

3)Slave节点机器配置rsyncd.conf
就把master主机/etc/rsyncd.conf配置文件里的[master_nfs]改成[slave_nfs]
其他都一样,密码文件也设为一样

4)手动验证下Master节点NFS数据同步到Slave节点
在Master节点的NFS共享目录下创建测试数据
# mkdir /data/k8s_storage/test
# touch /data/k8s_storage/{a,b}

手动同步Master节点的NFS共享目录数据到Slave节点的NFS共享目录下
# rsync -avzp --delete /data/k8s_storage/ nfs@slaveIP::slave_nfs --password-file=/opt/rsync.pass

到Slave节点查看是否同步
# ls /data/k8s_storage/

上面rsync同步命令说明:文章来源地址https://www.toymoban.com/news/detail-536667.html

  • /data/k8s_storage/ 是同步的NFS共享目录
  • nfs@slaveIP::slave_nfs
    • nfs 是Slave节点服务器的/opt/rsync_salve.pass文件中配置的用户名
    • slaveIP为Slave节点服务ip
    • slave_nfs 为Slave服务器的rsyncd.conf中配置的同步模块名
    • –password-file=/opt/rsync.pass 是Master节点同步到Slave节点使用的密码文件,文件中配置的是Slave节点服务器的/opt/rsync.pass文件中配置的密码

四、设置Rsync+Inotify自动同步

1. 配置Inotify自动同步
1) 编写自动同步脚本
# vi /usr/local/nfs_rsync/rsync_inotify.sh
#!/bin/bash
host=slaveIP  #修改为slave真实IP
src=/data/k8s_storage/
des=slave_nfs
password=/opt/rsync.pass
user=nfs
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

2) 配置systemctl管理自动同步脚本
   - 编写systemctl启动脚本
     # vi /usr/local/nfs_rsync/rsync_inotify_start.sh
	 #!/bin/bash
     nohub=/usr/bin/nohup
     nohup sh /usr/local/nfs_rsync/rsync_inotify.sh >> /var/log/rsynch.log 2>&1 &
   - 编写systemctl停止脚本
     # vi /usr/local/nfs_rsync/rsync_inotify_stop.sh
	 #!/bin/bash
     for i in `ps -ef | grep rsync_inotify.sh | awk '{print $2}'`

     do

       kill -9 $i

	 done
    - 编写systemctl管理程序
	  #vi /usr/lib/systemd/system/nfs_rsync.service
	  [Unit]
      Description=rsync_inotify service
      Documentation=This is a Minio Service.

      [Service]
      Type=forking
      TimeoutStartSec=10
      WorkingDirectory=/usr/local/nfs_rsync
      User=root
      Group=root
      Restart=on-failure
      RestartSec=15s
      ExecStart=/usr/local/nfs_rsync/rsync_inotify_start.sh
      ExecStop=/usr/local/nfs_rsync/rsync_inotify_stop.sh

      [Install]
      WantedBy=multi-user.target

3) slave节点自动同步脚本(其他配置与上面保持一致)
# vi /usr/local/nfs_rsync/rsync_inotify.sh
#!/bin/bash
host=MsterIP   #修改为master真实IP
src=/data/k8s_storage/
des=master_nfs
password=/opt/rsync.pass
user=nfs
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

4) 启动Inotify程序
systemctl enable nfs_rsync.service --now
2. 配置keepalived VIP监控(master与slave同样配置)
1)编写VIP监控脚本
# vi /usr/local/vip_monitor/vip_monitor.sh
#!/bin/bash
while :

do

  VIP_NUM=`ip addr|grep 10.90.12.30|wc -l`
  RSYNC_INOTIRY_NUM=`ps -ef|grep /usr/bin/inotifywait|grep -v grep|wc -l`

  if  [ ${VIP_NUM} == 0 ];then

      echo "VIP不在当前NFS节点服务器上" > /tmp/1.log
      if [ ${RSYNC_INOTIRY_NUM} != 0 ];then

          systemctl stop nfs_rsync.service

      fi

  else

      echo "VIP在当前NFS节点服务器上" >/dev/null 2>&1
      systemctl start nfs_rsync.service

  fi

  sleep 20

done

2) 配置systemctl管理VIP监控脚本
  - 编写systemctl启动脚本
    # vi /usr/local/vip_monitor/vip_monitor_start.sh
    #!/bin/bash
    nohub=/usr/bin/nohup
    nohup sh /usr/local/vip_monitor/vip_monitor.sh >> /var/log/vip_monitor.log 2>&1 &
  - 编写systemctl停止脚本
    # vi /usr/local/vip_monitor/vip_monitor_stop.sh
    #!/bin/bash
    ps -ef | grep vip_monitor.sh | grep -v "grep" | awk '{print $2}' | xargs kill -9
  - 编写systemctl管理程序
    # vi /usr/lib/systemd/system/vip_monitor.service
	[Unit]
    Description=rsync_inotify service
    Documentation=This is a Minio Service.

    [Service]
    Type=forking
    TimeoutStartSec=10
    WorkingDirectory=/usr/local/vip_monitor
    User=root
    Group=root
    Restart=on-failure
    RestartSec=15s
    ExecStart=/usr/local/vip_monitor/vip_monitor_start.sh
    ExecStop=/usr/local/vip_monitor/vip_monitor_stop.sh

    [Install]
    WantedBy=multi-user.target

3) 启动Inotify程序
systemctl enable vip_monitor.service --now

到了这里,关于NFS高可用部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes pv-pvc-nfs-service综合实验

    目录 实验:pv-pvc-nfs-service综合实验 实验环境 实验描述 实验拓扑图:  实验步骤: 1、修改nfs服务器的主机名: 2、搭建nfs服务器:(131条消息) 搭建NFS服务器_搭建nfs存储_Claylpf的博客-CSDN博客 3、测试k8s上所有节点服务器是否可以挂载到NFS服务器上去 4、在master机器上创建pv使用

    2024年02月16日
    浏览(22)
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

    它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网): Kubernetes DevOps 系统 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具 基于 Istio 的微

    2024年02月09日
    浏览(17)
  • 【Linux】怎么看nfs服务是否已经启动与安装nfs服务

    可以执行以下命令来检查nfs服务是否已经启动: 如果nfs服务已经启动,你会看到如下输出: 如果nfs服务没有启动,则会看到如下输出: 在这个输出中,如果 Active 状态为 active (exited) ,则表示nfs服务已经启动;如果 Active 状态为 inactive (dead) ,则表示nfs服务没有启动。 结果:

    2024年02月04日
    浏览(17)
  • 部署YUM仓库及NFS共享存储

    引言: 学习YUM 软件仓库,可以完成安装、卸载、自动升级 rpm 软件包等任务,能够自动 查找并解决 rpm 包之间的依赖关系,而无须管理员逐个、手工地去安装每个 rpm 包,使管理员在维护大量 Linux 服务器时更加轻松自如。特别是在拥有大量 Linux 主机的本地网络中, 构建一台

    2024年01月18日
    浏览(19)
  • Linux - 进阶 NFS 服务器 NFS文件权限与共享目录权限主次问题

            #    NFS 的权限本身没有用户密码和账户验证登录过程               ( 你可以回忆下,我们前面访问远程共享目录的时候,是没有输入账户,密码啥的,是没                 有这个步骤的)              所以客户端登录到服务器后,会把客户端的

    2024年02月04日
    浏览(25)
  • Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

    目录 volume 卷 官方文档:卷 | Kubernetes 一、emptyDir(临时卷) 二、hostPath卷 type字段参数  hostPath 实验: 三、第3方提供的存储卷(百度云、阿里云、亚马逊云、谷歌云等) 四、local卷 五、NFS卷 参考文档:https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs 六、SAN卷 七、NA

    2024年02月16日
    浏览(19)
  • docker搭建NFS服务器(超简单)

    docker 安装 NFS服务端与客户端 一:服务端: 1.下载镜像到本地。 地址:https://www.aliyundrive.com/s/LUQ4A4yuZcY 2.启动镜像 解压镜像 docker load docker-nfs-server.tar 启动成功如图所示: 备注:docker启动成功,意味着将系统 /home/docker/nfs01 下的文件挂载到了 docker内部nfs目录下。 如图所示(

    2024年02月09日
    浏览(28)
  • NFS服务器简介、在Linux上搭建NFS服务器和客户端,Linux上使用auto(autofs)进行NFS客户端自动挂载和卸载详解

    目录 一.NFS服务器简介 1.含义简介: 2.工作原理简介: 3.RPC服务与NFS服务配合使用 二.NFS配置文件参数命令介绍 1.主配置文件/etc/exports 2.日志文件/var/lib/nfs/ 3.showmount命令 三.主配置文件/etc/exports挂载写法 1.配置nfs服务端和客户端 2.windows客户端挂载测试 3.权限介绍 (1)rw/ro,服

    2024年02月04日
    浏览(29)
  • Linux 安装 NFS 服务

           NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一

    2024年02月05日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包