NFS 高可用方案(NFS+keepalived+Sersync)

2023-11-08

NFS 高可用方案(NFS+keepalived+Sersync)

1. 简述

1.1 介绍

本方案 NFS 的高可用方案,应用服务器为 Client ,两台文件服务器分别Master和 Slave,使用 keepalived 生成一个虚拟 IP,使用 Sersync 进行 Master 与 Slave 之间文件相互同步,确保高可用。

ng)]

2.安装前准备

服务器信息:

角色 系统版本 ip
虚拟 ip(Vip) 192.168.50.143
Client centos 7.5 192.168.51.246
Master centos 7.5 192.168.50.8
Slave centos 7.5 192.168.50.71

服务器环境准备:

在 Master 和 Slave 上创建共享目录

mkdir /data

在 Client 上创建挂载目录

mkdir /qiyuesuodata

关闭 Client 、Master 和 Slave 服务器上的防火墙

# 关闭防火墙
systemctl stop firewalld
# 关闭开机自启
systemctl disable firewalld

3. 安装 NFS 并配置

在 Client 、Master 和 Slave 服务器上安装 NFS 服务

yum -y install nfs-utils rpcbind

配置 NFS 共享目录

在 Master 上执行

# 其中/data 为共享的目录,192.168.51.246 为 Client ip,如有多个私有云服务集群可用空格分隔
# 如 echo '/data 192.168.51.246(rw,sync,all_squash) 192.168.51.247(rw,sync,all_squash)' >> /etc/exports
 echo '/data 192.168.51.246(rw,sync,all_squash)' >> /etc/exports
# 开启服务
 systemctl start rpcbind && systemctl start nfs
# 设置开机自启
 systemctl enable rpcbind && systemctl enable nfs
# 出现:Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.即成功

在 Slave 上执行

# 其中/data 为共享的目录,192.168.51.246 为 Client ip,如有多个私有云服务集群可用空格分隔
# 如 echo '/data 192.168.51.246(rw,sync,all_squash) 192.168.51.247(rw,sync,all_squash)' >> /etc/exports
 echo '/data 192.168.51.246(rw,sync,all_squash)' >> /etc/exports
# 开启服务
 systemctl start rpcbind && systemctl start nfs
# 设置开机自启
 systemctl enable rpcbind && systemctl enable nfs
# # 出现:Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.即成功

测试挂载是否成功

在 Client 上执行挂载测试

# 测试 Master 
# 其中 ip 为 Master 的 ip,/data为 Master 共享的目录,/qiyuesuodata 为需要挂载至 Client 的目录
 mount -t nfs 192.168.50.8:/data /qiyuesuodata
# 检查 
df -Th 
# 出现  192.168.50.8:/data      nfs4       29G  7.6G   22G  27% /qiyuesuodata 即为成功
# 去除挂载
umount /qiyuesuodata

# 测试 Slave
# 其中 ip 为 Master 的 ip,/data为 Master 共享的目录,/qiyuesuodata 为需要挂载至 Client 的目录
 mount -t nfs 192.168.50.71:/data /qiyuesuodata
# 检查 
df -Th 
# 出现  192.168.50.71:/data      nfs4       29G  7.6G   22G  27% /qiyuesuodata 即为成功
# 去除挂载
umount /qiyuesuodata

4. 配置文件同步

在 Slave 进行同步 Master 数据
# 安装 rsync
yum -y install rsync.x86_64
# 修改 /etc/rsyncd.conf 如下,其中 hosts allow 填写 master ip
uid = nfsnobody
gid = nfsnobody
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /data
auth users = qiyuesuo
secrets file = /etc/rsync_salve.pass
hosts allow = 192.168.50.8

# 生成认证文件
echo 'qiyuesuo:qiyuesuo123' > /etc/rsync_salve.pass
chmod 600 /etc/rsync_salve.pass
# 修改 文件夹权限
chown -R nfsnobody:nfsnobody /data/
# 启动服务
 rsync --daemon --config=/etc/rsyncd.conf 

在 Master 上测试

yum -y install rsync.x86_64
chown -R nfsnobody:nfsnobody /data/
echo "qiyuesuo123" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
#创建测试文件,测试推送
cd /data/
echo "This is test file" > file.txt
rsync -arv /data/ qiyuesuo@192.168.50.71::data --password-file=/etc/rsync.pass
#在 slave 上测试
ls /data 
# 出现 file.txt 即可

在 Master 上配置自动同步

 cd /usr/local/
 wget https://dl.qiyuesuo.com/private/nfs/sersync2.5.4_64bit_binary_stable_final.tar.gz
 tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
 mv GNU-Linux-x86/ sersync
 cd sersync/
 # 修改配置文件
sed -ri 's#<delete start="true"/>#<delete start="false"/>#g' confxml.xml
sed -ri '24s#<localpath watch="/opt/tongbu">#<localpath watch="/data">#g' confxml.xml
sed -ri '25s#<remote ip="127.0.0.1" name="tongbu1"/>#<remote ip="192.168.50.71" name="data"/>#g' confxml.xml
sed -ri '30s#<commonParams params="-artuz"/>#<commonParams params="-az"/>#g' confxml.xml
sed -ri '31s#<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>#<auth start="true" users="qiyuesuo" passwordfile="/etc/rsync.pass"/>#g' confxml.xml
sed -ri '33s#<timeout start="false" time="100"/><!-- timeout=100 -->#<timeout start="true" time="100"/><!-- timeout=100 -->#g' confxml.xml
#启动Sersync
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

测试

# 在 master 中的/data 目录创建文件
touch test
# 查看 salve 中的 /data 是否有该文件

以上就做完了 salve 同步 master 的文件,但是当 master 宕机后恢复,master 无法同步 salve 文件,所以要配置 master 同步 salve 文件

在 Master 进行同步 slave 数据
# 修改 /etc/rsyncd.conf 如下,其中 hosts allow 填写 slave ip
uid = nfsnobody
gid = nfsnobody
port = 873
pid file = /var/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
max connections = 200
read only = false
list = false
fake super = yes
ignore errors
[data]
path = /data
auth users = qiyuesuo
secrets file = /etc/rsync_master.pass
hosts allow = 192.168.50.71


# 生成认证文件
echo 'qiyuesuo:qiyuesuo123' > /etc/rsync_master.pass
chmod 600 /etc/rsync_master.pass
# 修改 文件夹权限
chown -R nfsnobody:nfsnobody /data/
# 启动服务
 rsync --daemon --config=/etc/rsyncd.conf 

在 Slave 上测试

chown -R nfsnobody:nfsnobody /data/
echo "qiyuesuo123" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
#创建测试文件,测试推送
cd /data/
echo "This is test file" > file.2.txt
rsync -arv /data/ qiyuesuo@192.168.50.8::data --password-file=/etc/rsync.pass
#在 slave 上测试
ls /data 
# 出现 file.2.txt 即可

在 Slave 上配置自动同步

 cd /usr/local/
 wget https://dl.qiyuesuo.com/private/nfs/sersync2.5.4_64bit_binary_stable_final.tar.gz
 tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
 mv GNU-Linux-x86/ sersync
 cd sersync/
 # 修改配置文件
sed -ri 's#<delete start="true"/>#<delete start="false"/>#g' confxml.xml
sed -ri '24s#<localpath watch="/opt/tongbu">#<localpath watch="/data">#g' confxml.xml
sed -ri '25s#<remote ip="127.0.0.1" name="tongbu1"/>#<remote ip="192.168.50.8" name="data"/>#g' confxml.xml
sed -ri '30s#<commonParams params="-artuz"/>#<commonParams params="-az"/>#g' confxml.xml
sed -ri '31s#<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>#<auth start="true" users="qiyuesuo" passwordfile="/etc/rsync.pass"/>#g' confxml.xml
sed -ri '33s#<timeout start="false" time="100"/><!-- timeout=100 -->#<timeout start="true" time="100"/><!-- timeout=100 -->#g' confxml.xml
#启动Sersync
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

至此我们已经做好了主从相互同步的操作

##5. 安装 Keepalived

在 Master 上执行

yum -y install keepalived.x86_64
# 修改 /etc/keepalived/keepalived.conf
# 其中 enp0s3 为绑定网卡名称,可以使用 ip addr 命令查看
# 其中 192.168.50.143  为虚拟 ip ,注意不要和其它 ip 冲突
! Configuration File for keepalived

global_defs {
   router_id NFS-Master
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiyuesuo123
    }
    virtual_ipaddress {
        192.168.50.143  
    }
}
# 启动服务
systemctl start  keepalived.service && systemctl enable keepalived.service

在 Slave 上执行

yum -y install keepalived.x86_64
# 修改 /etc/keepalived/keepalived.conf
# 其中 enp0s3 为绑定网卡名称,可以使用 ip addr 命令查看
# 其中 192.168.50.143  为虚拟 ip ,注意不要和其它 ip 冲突
! Configuration File for keepalived

global_defs {
   router_id NFS-Slave
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiyuesuo123
    }
    virtual_ipaddress {
        192.168.50.143  
    }
}
# 启动服务
systemctl start  keepalived.service && systemctl enable keepalived.service

查看虚拟IP是否存在

在 Master 上执行:

ip a | grep  192.168.50.143
# 出现
# inet 192.168.50.143/32 scope global enp0s3
# 即成功

VIP挂载测试

在 Client 上通过 vip 挂载测试

mount -t nfs 192.168.50.143:/data /qiyuesuodata
# 如/qiyuesuodata目录中有共享目录中文件则说明挂载成功
umount /qiyuesuodata/

模拟机器Down机,测试虚拟IP地址是否会漂移

# 在 Master 上关闭 keepalived
systemctl stop keepalived.service
# 执行ip a | grep  192.168.50.143会无输出则关闭成功
# 在 Slave 上查看
ip a | grep  192.168.50.143
# 出现
# inet 192.168.50.143/32 scope global enp0s3
# 即成功

则说明 ip 漂移成功

设置 keepalived 脚本

因为 ip 的漂移是根据 keepalived 的存活来判断的,所以在 nfs 宕机之后需要手动停止 keepalived 服务来进行ip 的切换,这里在 Master 上编写一个定时任务来检测 nfs 服务是否宕机

cd /usr/local/sbin
# 生成文件check_nfs.sh
#!/bin/sh
# 每秒执行一次
step=1 #间隔的秒数,不能大于60 
for (( i = 0; i < 60; i=(i+step) )); do 
  ###检查nfs可用性:进程和是否能够挂载
  /sbin/service nfs status &>/dev/null
  if [ $? -ne 0 ];then
    ###如果服务状态不正常,先尝试重启服务
    /sbin/service nfs restart
    /sbin/service nfs status &>/dev/null
    if [ $? -ne 0 ];then
       # 如服务仍不正常,停止 keepalived
       systemctl stop keepalived.service
    fi
  fi
  sleep $step 
done 

加入定时任务

chmod 777 /usr/local/sbin/check_nfs.sh
crontab -e
# 输入定时任务
* * * * *  /usr/local/sbin/check_nfs.sh &> /dev/null

在 Client 添加定时任务,当 Master 宕机时进行重新挂载

cd /usr/local/sbin
# 生成文件check_mount.sh

#!/bin/sh
# 每秒执行一次
step=1 #间隔的秒数,不能大于60 
for (( i = 0; i < 60; i=(i+step) )); do 
  mount=`df -Th|grep qiyuesuodata`
  if [ $mount = "" ];then
     umount /qiyuesuodata
     mount mount -t nfs 192.168.50.143:/data /qiyuesuodata
  fi
  sleep $step 
done 

加入定时任务

chmod 777 /usr/local/sbin/check_mount.sh
crontab -e
# 输入定时任务
* * * * *  /usr/local/sbin/check_nfs.sh &> /dev/null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NFS 高可用方案(NFS+keepalived+Sersync) 的相关文章

  • CentOS 7中添加一个新用户并授权

    创建新用户 创建一个用户名为 linuxidc root localhost adduser linuxidc 为这个用户初始化密码 linux会判断密码复杂度 不过可以强行忽略 root localhost passwd linuxidc
  • 搭建NFS使多个服务器中的web项目共享图片资源

    我的个人博客 逐步前行STEP 有一个使用laravel框架的项目 采用laravel自带的文件管理系统 还有一个使用laravel admin扩展的管理端 更是依赖于自带的文件管理系统 因部署了多台服务器 需要打通数据 考虑了各种方案 比
  • Ubuntu小技巧9--使用Samba服务实现Windows和Linux文件访问

    Ubuntu小技巧8 Ubuntu小技巧9 使用Samba服务实现Windows和Linux文件访问 很多时候做开发的时候需要在Linux上编译运行 但是又想用Windows的优秀工具 不停的将文件拷贝到Windows和Linux是极其浪费
  • CLOUD 云计算进阶(二)- openstack 服务搭建与应用

    什么是云计算 基于互联网的相关服务的增加 使用和交互模式 这种模式提供可用的 便捷的 按需的网络访问进入可配置的计算机网络共享池 这些资源能够被快速提供 只投入很少的管理工作 或者与服务供应商进行很少的交互 通常通过互联网来提供动态易拓展且
  • linux下shell脚本启动jar包

    样例1 bin bash jar包文件路径及名称 目录按照各自配置 APP NAME home jar sys modules gen lgs modules gen jar 日志文件路径及名称 目录按照各自配置 LOG FILE home
  • Linux 查看或统计网卡流量的几种方式【全】

    在工作中 我们经常需要查看服务器的实时网卡流量 通常 我们会通过这几种方式查看Linux服务器的实时网卡流量 目录 1 sar 2 proc net dev 3 ifstat 4 iftop 5 nload 6 iptraf ng 7 ne
  • 操作系统终端输入大小限制

    问题描述 使用c 写算法题时 测试用例是一个长字符串 上万字符 但运行结果显示字符串读入的长度远远小于输入长度 并且不同操作系统下面显示出了不同的bug macos 输入字符串长度只有1000 超过这个长度成都就会卡在cin那行代码 ubu
  • minikube单机安装nfs服务

    1 安装 nfs server sudo apt get update sudo apt get install y nfs kernel server 2 创建目录 配置 IP 共享目录绑定 vim etc exports 新增 data
  • 【Ubuntu】使用grub2挂载NFS根文件系统(rootfs)

    经常调试arm开发板的同学应该比较熟悉uboot 它可以使用tftp自动下载内核并通过nfs挂载rootfs 其实 作为x86平台常见的bootloader grub也可以做到通过nfs挂载rootfs 安装grub2 目前新版的ubunt
  • deepin20.3 的问题

    deepin显示器无法唤醒解决方法 发现系统无法唤醒是因为和nvida驱动有冲突 当直接使用nvidia驱动的显卡作为显示器输入信号源就会出现这个问题 但如果小伙伴又需要使用NVIDIA的显卡运行深度学习程序 可以参考这个办法 安装deep
  • linux服务器端启动NFS报“Job for nfs-server.service canceled.”的解决办法

    linux服务器端启动NFS报 Job for nfs server service canceled 的解决办法 网上百度了好久都没找到这个报错的原因 白嫖失败 打开linux的系统日志 tail f var log messages 再
  • 安装配置nfs服务

    NFS的功能 让不同操作系统之间可以互传文件 Server端 Server端可以关闭防火墙 或放行nfs服务 systemctl stop firewalld 临时关闭防火墙 systemctl disable firewalld 开机自动
  • 使用ifconfig结合awk提取主机的IP地址方法

    ifconfig是用来配置或者显示网卡信息的工具 可以提供与ip a类似的功能 在CentOS7以后的版本里 ifconfig是默认没有安装的 需要安装net tools工具 我们可以借助ifconfig工具 使用下面简单的脚本来完成主机I
  • 面试专题:Linux运维精华面试题

    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华 助力大家跳槽找个高薪好工作 1 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进
  • 将单个文件从 NFS docker 卷挂载到容器中

    示例 为简洁起见 省略了许多选项 version 3 volumes traefik driver local driver opts type nfs o addr 192 168 1 100 soft rw nfsvers 4 asyn
  • 检查python脚本中是否挂载了NFS共享

    我编写了一个 python 脚本 该脚本依赖于某个可用的 NFS 共享 如果未安装 NFS 共享 它会很乐意将文件复制到应安装的本地路径 但稍后当它尝试将在 NFS 服务器上创建的某些文件复制回来时会失败 我想专门捕获这个错误 这样我就可以
  • 在 docker 容器内挂载 nfs 共享

    有谁知道如何使用 centos 基础镜像在 docker 容器内挂载 nfs 共享 我试过这个命令 mount server dir mount point 并得到下一个错误 mount nfs rpc statd is not runni
  • 通过 NFS 上传文件时出现操作系统错误

    当我尝试通过 django 管理界面上传媒体文件时 出现以下错误 OSError Errno 45 Operation not supported 这是回溯的最后一行 File path to home Envs myenv lib pyt
  • Java 中 File.exists() 的替代方法

    我从没想过这种事会发生在我身上 但我遇到了 Java 中的第一个错误 https bugs java com bugdatabase view bug bug id 5003595 https bugs java com bugdataba
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案

随机推荐

  • 获取当前IP地址,跳转到对应城市网站。

    博客迁移 时空蚂蚁http cui cuihongbo com 1 代码 index php
  • COCO-stuff用法

    COCO stuff API 1 是 COCO API 2 的扩展 安装见 3 这里研究一下 COCO stuff 的用法 Files 下载链见 4 image 训练集图片 train2017 zip 验证集图片 val2017 zip 分
  • Vue+ElementUI实现将数据库中的数字展示成对应汉字

    需求 数据库中存的是数字类型 需要展示成对应的汉字 其中 1 gt 部级 2 gt 省级 3 gt 市级 4 gt 其他 dvIdxIndexList里面是从后台查到的结果集 我们首直接用map遍历后台返回的结果集 利用里面的回调对数据进行
  • 在windows10的系统下安装MySQL

    简单介绍一下 Mysql workbench的安装教程 官方网址 https www mysql com downloads 下拉到最下面 点击进去 下载这两个软件 分别是 mysql的具体网址 https dev mysql com do
  • 记一次在forEach循环中使用异步代码无效

    背景 代码如下 const res1 await getOrderPackage XM LX 95 入院检查套餐 const res2 await getOrderPackage XM LX 98 入院检验套餐 const res res1
  • 将windows10 的编码修改为UTF-8

    临时修改 只作用于当前窗口 先进入cmd命令窗口 快捷键win键 R 直接输入 chcp 65001 然后回车键 Enter键 执行 这时候本次打开的窗口编码就已经是UTF 8了 永久修改 win键 R 然后在输入框输入regedit 确定
  • mediapipe教程5:在安卓上运行mediapipe的handTracking

    一 前言和准备见mediapipe教程4 这篇博客开门见山 直接来步骤 二 在安卓上运行mediapipe的handTracking 参考网址 步骤 https google github io mediapipe getting star
  • 手游服务器微信互通,9月14日部分服务器数据互通公告

    尊敬的轩辕勇士们 轩辕传奇手游 开放测试以来人气沸腾 各种战斗的激烈程度也随之升级 为了让勇士们尽享更刺激 更热血的战斗 我们计划于9月14日6 00 9 00期间进行数据互通操作 数据互通期间 相关服务器将暂时无法进入 造成您的不便 恳请
  • 卷积神经网络的深入理解-归一化篇(Batch Normalization具体实例)

    卷积神经网络的深入理解 归一化篇 标准化 归一化 神经网络中主要用在激活之前 卷积之后 持续补充 归一化在网络中的作用 1 线性归一化 进行线性拉伸 可以增加对比度 2 零均值归一化 像素值 均值 方差 3 Batch Normalizat
  • 多路复用select、poll、epoll总结

    多路复用select poll epoll总结 一 多路复用 IO多路复用是指使用单个线程同时处理多个IO请求 在IO多路复用模型中一个线程可以监视多个文件描述符 fd 一旦某个fd就绪 读 写就绪 或者超时 就能够通知应用程序进行相应的读
  • 获取宝塔Linux面板登陆地址账号和密码

    在ssh终端输入 etc init d bt default
  • Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields

    Realtime Multi Person 2D Pose Estimation Using Part Affinity Fields 1 文章概要 文章实现了图片中的多人姿态检测 与已有的方法相比 最大的优势在于检测的速度对人物的数量不敏
  • python三方库是什么_python第三方库有哪几种

    在对于python的使用上 除了要掌握基本的操作方法外 如果有一些好用的工具辅助 效果也是非常明显的 为了能够给大家提供最大的帮助 python中的第三方库的种类也是非常多的 本篇挑选了使用功能强大 且比较好用的第三方类 整理出了它们的一些
  • R数据处理——按符号分割数据&统计两列数据组合的频数

    初始数据格式 数据格式如图所示 每个Keywords里面都含有多个关键词 使用分号 间隔开 一共有ABCDEF六个group 并且关键词有重复 最终想要的数据格式 统计所有不重复的关键词在六个group中出现的频次 使用R来处理 rm li
  • SAP CO TCODE

    CO 主数据 利润中心主数据维护 标准层次 KCH5N KCH6N 利润中心 组 非标准层次 KE51 KE52 KE53 利润中心 KCH1 KCH2 KCH3 利润中心组 成本中心主数据维护 标准层次 OKEON OKENN 成本中心
  • Spring Boot:让你轻松掌握自动装配的奥秘

    Spring Boot是基于Spring框架开发的一种应用框架 它通过自动装配机制 大大简化了Spring应用的开发和部署 使开发者可以更加专注于业务逻辑的实现 而无需过多关注Bean的实例化和装配过程 本文将从以下几个方面介绍Spring
  • Pytorch中的torch.nn.Linear()方法的详解

    torch nn Linear 作为深度学习中最简单的线性变换方法 其主要作用是对输入数据应用线性转换 先来看一下官方的解释及介绍 class Linear Module r Applies a linear transformation
  • 学习Kotlin看哪些书?【赠书活动|第八期《深入实践Kotlin元编程》】

    文章目录 图书简介 01 深入实践Kotlin元编程 02 Spring Boot学习指南 03 Kotlin编程实战 抽奖方式 与Java一样 Kotlin也是用于Android应用程序开发的编程语言 是Android官方支持的第二种编程
  • 对某擦边站点的一次渗透

    更新时间 2022 07 05 2022年11月21日21 50 12 1 说明 在上半年的时候 在线浏览网页的时候 突然跳转到了一个sese的界面 然后要下载app 本着弹出即下载的原则 我就欣然安装了 app本身长这样 打开之后是这样的
  • NFS 高可用方案(NFS+keepalived+Sersync)

    NFS 高可用方案 NFS keepalived Sersync 1 简述 1 1 介绍 本方案 NFS 的高可用方案 应用服务器为 Client 两台文件服务器分别Master和 Slave 使用 keepalived 生成一个虚拟 IP