NFS搭建

ops/2024/11/24 19:13:06/

NFS搭建

  • 单节点安装配置
    • 服务器
    • 安装
    • 配置
    • 启动并使NFS服务开机自启
    • 客户端挂载
      • 查看是否能发现服务器的共享文件夹
      • 创建挂载目录
      • 临时挂载
      • 自动挂载
  • 双节点安装配置
    • 服务器
    • 安装
    • 配置
      • 服务端
        • 配置NFS服务端
        • 配置Keepalived
        • 编辑nfs_check.sh监控脚本
        • 安装部署Rsync+Inofity
      • 客户端

单节点安装配置

服务器

操作系统IP地址子网掩码角色
alma linux9.310.168.31.18016server
alma linux9.310.168.31.18116client
alma linux9.310.168.31.18216client
alma linux9.310.168.31.18316client

安装

在每台机器上执行下列的命令

dnf install -y nfs-utils rpcbind

配置

NFS配置文件 /etc/exports

  1. 挂载目录
    一般来说,会挂载一块高性能磁盘,作为NFS的目录使用。本文未挂载额外磁盘,磁盘挂载请参考此文章,其余相同。
    这里使用数据目录为/nfs,如果没有需要自行创建。
mkdir /nfs
  1. 访问的主机
IP允许范围
10.168.31.180单个主机
10.168.0.0/1610.168.31.181
10.168.0.*10.168.31.182
主机名DNS A解析 轮询
  1. 权限
权限作用
rw可读可写
ro只读
sync写到磁盘才算完成,安全,慢
async异步写到远程缓冲区,快,不安全
no_root_squash‌允许NFS客户端上的root用户对NFS共享目录拥有至高权限
no_all_squash‌客户端所有用户拥有服务端匿名用户权限
echo '/nfs 10.168.0.0/16(rw,sync,no_root_squash,no_all_squash)' >> /etc/exports

启动并使NFS服务开机自启

systemctl start nfs-server.service
systemctl enable nfs-server.service

客户端挂载

查看是否能发现服务器的共享文件夹

showmount  -e IP

<a class=服务器的共享文件夹" />

创建挂载目录

mkdir /nfs

临时挂载

NFS客户端挂载的命令格式

# 挂载命令   挂载的格式类型  NFS服务器提供的共享目录          NFS客户端要挂载的目录(必须存在)
# mount 	 -t nfs        <server-ip>:/<shared-directory>  /nfs
# 示例:
mount -t nfs 10.168.31.180:/nfs /nfs

自动挂载

# NFS服务器提供的共享目录  		   NFS客户端要挂载的目录(必须存在)  挂载的格式类型   挂载时使用的参数  是否进行备份  fsck检查文件系统的优先级	 
# <server-ip>:/<shared-directory>  /nfs                            nfs             defaults         0            0
# 示例:
echo '10.168.31.180:/nfs /nfs nfs defaults 0 0' >> /etc/fstab

双节点安装配置

服务器

操作系统IP地址子网掩码角色
alma linux9.310.168.31.18016server
alma linux9.310.168.31.18116server
alma linux9.310.168.31.18216client
alma linux9.310.168.31.18316client
alma linux9.310.168.31.17116vip

安装

在每台机器上执行下列的命令

dnf install -y nfs-utils rpcbind

同时,对10.168.31.180和10.168.31.181两个服务端做Keepalived负载均衡。具体配置参考Keepalived部署。

配置

服务端

配置NFS服务端

参考单节点服务端配置

配置Keepalived

参考Keepalived部署

配置文件需要在参考文章基础上做修改

mkdir -p  /etc/keepalived
cat <<EOF | tee /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL
}# 增加脚本
vrrp_script chk_nfs {script "/etc/keepalived/nfs_check.sh"   interval 2weight -20  
}
vrrp_instance VI_1 {state MASTER		 		 #主节点interface ens160virtual_router_id 51 #相同id管理同一个虚拟路由priority 100         #优先级advert_int 1authentication {auth_type PASSauth_pass 1111}# 引用脚本track_script {chk_nfs}virtual_ipaddress {10.168.31.171/16 dev ens160 label ens160:1}
}
EOF
编辑nfs_check.sh监控脚本
mkdir -p  /etc/keepalived
cat <<EOF | tee /etc/keepalived/nfs_check.sh
#!/bin/bash
A=\`ps -C nfsd --no-header | wc -l\`
if [ \$A -eq 0 ];thensystemctl restart nfs-server.servicesleep 2if [ \`ps -C nfsd --no-header| wc -l\` -eq 0 ];thenpkill keepalivedfi
fi
EOF
chmod +x /etc/keepalived/nfs_check.sh
安装部署Rsync+Inofity

两台master节点都要操作

  1. 安装软件
dnf install -y rsync inotify-tools

inotify-tools无法安装可以先换成阿里源

dnf install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
dnf install -y inotify-tools
  1. 配置
    在第一个主节点
cat <<EOF | tee /etc/rsyncd.conf
uid = root
gid = root
# 如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。
# 这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。
# 默认情况下chroot值为true。
use chroot = yes
port = 873
#允许ip访问设置,可以指定ip或ip段
hosts allow = 10.168.0.0/16      
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# 模块名称,和comment对应
[master]
# 要同步的目录
path = /nfs          
# 当前节点模块名称          
comment = master
# 是否允许客户端上传文件              
ignore errors
read only = no                    
list = no
# 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
auth users = rsync      
# 保存密码和用户名文件,需要自己生成          
secrets file = /etc/rsync/rsyncd.passwd
EOF# 创建自定义配置文件目录
mkdir /etc/rsync# 密码和用户文件(格式为"用户名:密码")
cat <<EOF | tee /etc/rsync/rsyncd.passwd
rsync:123456
EOF# 编辑同步密码(注意这个文件和上面的密码和用户文件路径不一样)
# 该文件内容只需要填写从服务器的密码,例如这里从服务器配的用户名密码都是rsync:123456,则主服务器则写123456一个就可以了
cat <<EOF | tee /etc/rsync/slave.passwd
123456
EOF# 设置文件执行权限
chmod 600  /etc/rsync/rsyncd.passwd
chmod 600  /etc/rsync/slave.passwd# 设置开机启动
echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

另外一个节点的配置需要修改rsyncd.conf文件内模块的名称为slave,其余相同。

测试

rsync -avzP  --progress --delete  --timeout=100 /nfs/  rsync@10.168.31.181::slave  --password-file=/etc/rsync/slave.passwd 

rsync常用命令

# -v,--verbose  详细模式输出,传输是的进度信息
# -z,--compress  传输是进行压缩以提高传输效率,--comperess -level = NUM可以按级别压缩
# -a,--archive  归档模式,表示以递归方式传输文件,并保持所有文件属性(等于-rtopgDl)
# --port 指定端口
# -e 'ssh -p 2222' 指定使用ssh及其端口
# --timeout 超时时间
# --partial-dir 临时目录,传输完毕,移动到正式目录
# --password-file 指定存密码的文件
# --progress 打印进度
# --delete 删除目标目录中源目录没有的文件
# -P 支持断点,综合了--partial --progress两个参数
  1. 配置自动同步

在主节点

# 自动同步脚本
cat <<EOF | tee /etc/rsync/rsync_inotify.sh
#!/bin/bash
#配置另外一个节点的IP
host=10.168.31.181
#配置另外一个节点的名称
des=slave
src=/nfs/
password=/etc/rsync/slave.passwd
user=rsync
inotifywait=/usr/bin/inotifywait\$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /nfs/ \\
| while read files ;dorsync -avzP  --progress --delete  --timeout=100 /nfs/  rsync@10.168.31.181::slave  --password-file=/etc/rsync/slave.passwd  done
EOF# VIP监控脚本
cat <<EOF | tee /etc/rsync/vip_monitor.sh
#!/bin/bash
VIP_NUM=\`ip addr|grep 31.171|wc -l\`
RSYNC_INOTIRY_NUM=\`ps -ef|grep /usr/bin/inotifywait|grep -v grep|wc -l\`
if [ \${VIP_NUM} -ne 0 ];thenecho "VIP在当前NFS节点服务器上" >/dev/null 2>&1if [ \${RSYNC_INOTIRY_NUM} -ne 0 ];thenecho "rsync_inotify.sh脚本已经在后台执行中" >/dev/null 2>&1elseecho "需要在后台执行rsync_inotify.sh脚本" >/dev/null 2>&1/bin/bash -x /etc/rsync/rsync_inotify.sh  >/dev/null 2>&1fi
elseecho "VIP不在当前NFS节点服务器上" >/dev/null 2>&1if [ \${RSYNC_INOTIRY_NUM} -ne 0 ];thenecho "需要关闭后台执行的rsync_inotify.sh脚本" >/dev/null 2>&1ps -ef|grep rsync_inotify.sh|grep -v grep|awk '{print \$2}'|xargs kill -9ps -ef|grep /usr/bin/inotifywait|grep -v grep|awk '{print \$2}'|xargs kill -9elseecho "rsync_inotify.sh脚本当前未执行" >/dev/null 2>&1fi
fi
EOF# 持续执行脚本
cat <<EOF | tee /etc/rsync/rsync_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do/bin/bash -x /etc/rsync/vip_monitor.sh >/dev/null 2>&1
done
EOF# 设置rsync_monit.sh脚本的开机启动
chmod 755 /etc/rsync/rsync_inotify.sh
chmod 755 /etc/rsync/vip_monitor.sh
chmod 755 /etc/rsync/rsync_monit.sh
echo "nohup sh /etc/rsync/rsync_monit.sh > /tmp/rsync_monit.log 2>&1 & " >> /etc/rc.d/rc.local

在从节点

# 自动同步脚本
cat <<EOF | tee /etc/rsync/rsync_inotify.sh
#!/bin/bash
#配置另外一个节点的IP
host=10.168.31.180
#配置另外一个节点的名称
des=master
src=/nfs/
password=/etc/rsync/slave.passwd
user=rsync
inotifywait=/usr/bin/inotifywait\$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /nfs/ \\
| while read files ;dorsync -avzP  --progress --delete  --timeout=100 /nfs/  rsync@10.168.31.180::master --password-file=/etc/rsync/slave.passwd  done
EOF# VIP监控脚本
cat <<EOF | tee /etc/rsync/vip_monitor.sh
#!/bin/bash
VIP_NUM=\`ip addr|grep 31.171|wc -l\`
RSYNC_INOTIRY_NUM=\`ps -ef|grep /usr/bin/inotifywait|grep -v grep|wc -l\`
if [ \${VIP_NUM} -ne 0 ];thenecho "VIP在当前NFS节点服务器上" >/dev/null 2>&1if [ \${RSYNC_INOTIRY_NUM} -ne 0 ];thenecho "rsync_inotify.sh脚本已经在后台执行中" >/dev/null 2>&1elseecho "需要在后台执行rsync_inotify.sh脚本" >/dev/null 2>&1/bin/bash -x /etc/rsync/rsync_inotify.sh  >/dev/null 2>&1fi
elseecho "VIP不在当前NFS节点服务器上" >/dev/null 2>&1if [ \${RSYNC_INOTIRY_NUM} -ne 0 ];thenecho "需要关闭后台执行的rsync_inotify.sh脚本" >/dev/null 2>&1ps -ef|grep rsync_inotify.sh|grep -v grep|awk '{print \$2}'|xargs kill -9ps -ef|grep /usr/bin/inotifywait|grep -v grep|awk '{print \$2}'|xargs kill -9elseecho "rsync_inotify.sh脚本当前未执行" >/dev/null 2>&1fi
fi
EOF# 持续执行脚本
cat <<EOF | tee /etc/rsync/rsync_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do/bin/bash -x /etc/rsync/vip_monitor.sh >/dev/null 2>&1
done
EOF# 设置rsync_monit.sh脚本的开机启动
chmod 755 /etc/rsync/rsync_inotify.sh
chmod 755 /etc/rsync/vip_monitor.sh
chmod 755 /etc/rsync/rsync_monit.sh
echo "nohup sh /etc/rsync/rsync_monit.sh > /tmp/rsync_monit.log 2>&1 & " >> /etc/rc.d/rc.local

客户端

挂载同单节点挂在,但是挂载IP为配置的VIP


http://www.ppmy.cn/ops/136377.html

相关文章

Kubernetes:容器编排的强力

目录 什么是KubernetesKubernetes的核心概念 容器与Pod节点&#xff08;Node&#xff09;控制平面&#xff08;Control Plane&#xff09;服务&#xff08;Service&#xff09;与Ingress Kubernetes的架构设计 API ServerEtcdSchedulerController ManagerKubelet 与 Kube-Prox…

了解大模型:开启智能科技的新篇章

在当今科技飞速发展的时代,人工智能(AI)已经成为推动社会进步的重要力量。而在AI的众多技术分支中,大模型(Large Model)以其强大的数据处理能力和卓越的性能,正逐渐成为研究和应用的热点。本文旨在科普大模型的基本概念、与大数据的关系以及与人工智能的紧密联系,帮助读…

c++中操作数据库的常用函数

在C中操作数据库&#xff0c;尤其是MySQL数据库&#xff0c;主要通过MySQL提供的C API或MySQL Connector/C库来实现。这些库提供了一系列的函数&#xff0c;使得开发者能够在C应用程序中执行数据库的连接、查询、更新、删除等操作。以下是C中操作MySQL数据库的一些常用函数&…

【机器学习】Lesson 5 - K近邻(KNN)分类/回归

目录 背景 一、算法介绍 1. 基本原理 1.1 概述 1.2 常用距离 1.3 模型参数 2. 适用场景 2.1 分类 适用场景 KNN 分类的优缺点 2.2 回归 适用场景 KNN 回归的优缺点 3. 适用数据集特征 3.1 特征维度&#xff08;维数&#xff09; 3.2 样本量&#xff08;行数&am…

C 语言复习总结记录二

C 语言复习总结记录二 一 控制语句 1、语句的分类 表达式语句函数调用语句复合语句控制语句空语句 控制语句 控制程序的执行流程&#xff0c;实现程序的各种结构方式 C 语言支持三种结构 &#xff1a;顺序结构、选择结构、循环结构&#xff0c;由特定的语句定义符组成C语言…

高性能 ArkUI 应用开发:复杂 UI 场景中的内存管理与 XML 优化

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。 主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。 本文为原创内容,任何形式的转载必须注明出处及原作者。 在开发高性能 ArkUI 应…

AFC自动售检票系统在地铁行业中,由于历史原因,各个终端设备采用了不同厂家的业务软件,如何进行软件一体化的措施?

摘要: 在地铁行业中,AFC(自动售检票)系统由于历史原因可能存在设备厂商不同、软件版本不一、接口标准不统一等问题。为实现软件的一体化管理和运行,需要综合考虑技术、架构、流程和成本等因素。以下是实现AFC系统软件一体化的具体措施: 1. 建立统一的接口标准 问题:各厂…

Python爬虫:获取1688关键词API接口数据

引言 在当今的电子商务领域&#xff0c;数据的价值不言而喻。对于商家来说&#xff0c;掌握行业关键词趋势是洞察市场动态、优化产品布局的重要手段。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将介绍如何使用Python编写爬虫程序&#xff0c;通过A…