day28-NFS

发布于:2025-08-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

1.每日复盘与今日内容

1.1复盘

  • Rsync:本地模式、远程模式🍟🍟🍟🍟🍟、远程守护模式🍟🍟🍟🍟🍟
  • 安装、配置Rsync
  • 启动、测试服务
  • 备份案例

1.2今日内容

  • NFS优缺点
  • NFS服务:开启、配置、启动等🍟🍟🍟🍟🍟
  • NFS参数
  • Isync配置
  • 公司案例

2.NFS服务

1.作用:

实现数据一致性--共享存储

  • 哪为什么web01和web02同时访问不会显示端口占用呢?

原因:NFS有Portmap--端口映射,将端口映射到其他没被使用的上面

2.NFS存储优点

1️⃣NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。

2️⃣NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。

3.NFS服务部署

  • 克隆服务器:

1.将两个网卡的最后一段改为31

2.将主机名改为NFS

1️⃣安装服务

yum -y install nfs-utils

2️⃣配置服务

# 配置文件默认为空
#进入/etc/exports
vim /etc/exports
#写入/data  172.16.1.0/24(rw,sync,all_squash)内容
/data  172.16.1.0/24(rw,sync,all_squash)
#挂载参数
#rw--可读可写
#sync--写入直接放入硬盘
#all_squash--匿名压缩(将客户端所有身份都设为匿名用户:默认为本地的傀儡用户)

3️⃣根据配置创建必要数据

#创建目录
mkdir /data
#设置/data属主属组
chown nobody.nobody /data
#检查
ll -d /data

4️⃣启动服务

#开启服务
systemctl start nfs
#开机自启动
systemctl enable nfs

5️⃣检测服务的配置文件是否正确

#检查文件--如果有内容代表成功;没有内容代表失败
cat /var/lib/nfs/etab 

6️⃣客户端挂载使用

#1.查看服务端共享的网段
showmount -e 172.16.1.31
###############WEB01################
#2.挂载NFS网络磁盘
mount -t nfs 172.16.1.31:/data /mnt
#查看受否挂载成功
df-h
###############WEB02################
#相同的目录
mount -t nfs 172.16.1.31:/data /mnt
df -h

#3.开机自动挂载
vim /etc/fstab
#写入内容
172.16.1.31:/data 			  /mnt  		  nfs     defaults        0 0

可以看到WEB01和WEB02都是操作的/mnt目录,可看作是共享目录

  • 验证:

第一步:WEB01在挂载处创建web01.txt在02和NFS上能否看到

root@WEB01 ~# touch /mnt/web01.txt
root@NFS ~# ll /data/
root@WEB02 ~# ll /mnt/

第二步:NFS在挂载处删除web01.txt在01和02上能否看到

root@NFS ~# rm -fr /data/web01.txt
root@WEB01 ~# ll /mnt/
root@WEB02 ~# ll /mnt/

4.NFS存储缺点

1️⃣存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup

2️⃣NFS数据明文, 并不对数据做任何校验。

3️⃣客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)

3.NFS参数

1.验证只读--ro

#1.将配置文件/etc/exports修改为如下
/data  172.16.1.0/24(ro,sync,all_squash)

#2.重启生效
systemctl restart nfs
  • 客户端测试
#web01下创建
touch /mnt/web01.txt

#web02下创建
touch /mnt/web02.txt

2.指定匿名用户 anonuid=666 anongid=666

#1.将配置文件/etc/exports修改为如下
/data  172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#2.创建uid和gid为666的www虚拟用户
groupadd -g666 www
useradd -u666 -g666 -M -s /sbin/nologin www
id www

#3.重启生效
systemctl restart nfs

#4.修改目录的属主属组为www
chown www.www /data
ll -d /data

4.NFS单点故障

  • 第一问:31执行rsync推送命令,以什么身份写入到41/data目录?

答:使用rsync_backup身份。

/data 属主 数组 rsync rsync rwxr-xr-x

  • 第二问:web服务器挂载到41/data web服务器以什么身份进入到/data?

答:41部署NFS的匿名压缩用户为nobody

故先将两个用户统一

5.部署Isync服务

1️⃣用户统一为www用户--所有服务器

groupadd -g666 www
useradd -u666 -g666 -M -s /sbin/nologin www

2️⃣backup服务器增加一个data模块

cat /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

[data]			
path = /data

#重启
systemctl restart rsyncd

#设置属主属组
chown www.www /backup/ /data
ll -d /data

#清空目录
rm -rf /data/*

#NFS测试
rsync  -avz /etc/hosts rsync_backup@172.16.1.41::data

3️⃣NFS部署lsync服务实时监控/data

#1.安装
yum -y install lsyncd

#2.配置
#配置文件写入/etc/lsyncd.conf
vim /etc/lsyncd.conf
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    maxProcesses = 2,
    nodaemon = false,
}
sync {
    default.rsync,
    source = "/data/",
    target = "rsync_backup@172.16.1.41::data",
    delete = true,
    delay = 15,
    rsync = {
        binary = "/usr/bin/rsync",
        password_file = "/etc/rsyncd.pwd",
        archive = true,
        compress = true,
    }
}

###########配置详解#############
[root@nfs ~]# cat /etc/lsyncd.conf
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",			# 日志文件
    statusFile = "/var/log/lsyncd/lsyncd.status",   # 状态日志文件
    maxProcesses = 2,								# 最大进程数量
    nodaemon = false,							    # 守护进程方式运行
}
#########如果还想添加监控模块,再复制以下修改即可
sync {
    default.rsync,									# 使用rsync命令
    source = "/data/",								# 实时监控的目录
    target = "rsync_backup@172.16.1.41::data",
    delete = true,
    delay = 1,										# 延时1秒					
    rsync = {
        binary = "/usr/bin/rsync",			        # 命令的绝对路径
        password_file = "/etc/rsyncd.pwd",			# 密码文件实现免交互
        archive = true,								# 类似-a
        compress = true,					        # 类似-z
    }
}
###########################

#3.根据配置创建必要信息
echo 123 >/etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd
ll /etc/rsyncd.pwd

#4.启动服务
systemctl start lsyncd
systemctl enable lsyncd

#5.测试服务
root@WEB01 /mnt# touch 1.txt
#WEB02的/mnt上有

4️⃣41服务器部署NFS服务

#下载nfs服务
yum -y install nfs-utils
#/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)写入/etc/exports
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#查看
cat /var/lib/nfs/etab 
#开启服务
systemctl start nfs
#查看
cat /var/lib/nfs/etab 

5️⃣模拟31挂掉

ifdown ens34
  • df -h就会很卡--一直在尝试连接

6️⃣web01和web02卸载31然后挂载到41服务器

#使用/etc/mounts查看挂载点
cat /etc/mounts

#强制卸载挂载点
umount -f /mnt

#显示挂载情况
showmount -e 172.16.1.41

#查看
mount -t nfs 172.16.1.41:/data /mnt
ll /mnt/

6.脚本案例

  • 环境准备

服务端: Rsync服务 10.0.0.41

客户端: 10.0.0.7 10.0.0.31

客户端脚本需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/web01_172.16.1.7_20251010
#命令拼接
date_dir=`hostname`_`hostname -I | awk '{print $1}'`_`date +%Y%m%d`
mkdir -p /backup/$date_dir

2.客户端在本地打包备份(hosts passwd crontab)拷贝至/backup/web01_172.16.1.7_20251010
tar -zcf /backup/$date_dir.tar.gz /etc/hosts /etc/passwd

3.客户端最后将备份的数据进行推送至备份服务器41
rsync -avz --password-file=/etc/rsync.pass /backup/$date_dir  rsync_backup@172.16.1.41::backup

4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find /backup/ -mtime +7|xargs rm -rf

5.客户端每天凌晨1点定时执行该脚本(定时每分钟执行)
vim /usr/C.bash

#设置变量
date_dir=`hostname`_`hostname -I | awk '{print $1}'`_`date +%Y%m%d`

#命令操作
#2.创建唯一标识的目录 以主机名+IP+时间
mkdir -p /backup/$date_dir

#3.打包重要的文件放入上面创建好的目录下
tar -zcf /backup/$date_dir.tar.gz /etc/hosts /etc/passwd /etc/crontab

#4.md5sum校验
md5sum /backup/*.tar.gz > /backup/md5.log

#5.推送目录到rsync服务器
rsync -avz --password-file=/etc/rsync.pass /backup/  rsync_backup@172.16.1.41::backup

#6.删除7天前的文件
find /backup -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

#客户端每天凌晨1点定时执行该脚本
vim /etc/crontab
#写入
00 01 * * * root sh /usr/C.bash
  • 环境准备

#配置好邮件

yum install -y mailx sendmail

#将以下内容写到最后
cat >>/etc/mail.rc <<EOF
set from=lidao996@163.com
set smtp=smtp.163.com
set smtp-auth-user=lidao996@163.com
set smtp-auth-password=xxxxxxxx
set smtp-auth=login
EOF
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
[root@backup ~]# cat /etc/rsyncd.conf 
uid = www
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
	
[data]			# 增加data模块 对应的/data目录
path = /data

2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c  /backup/*_*_`date +%Y%m%d`/*.log > /opt/md5.txt

3.服务端需要每天校验的结果通知给管理员
mail -s "${TIME}_备份校验结果" "邮箱" < /opt/md5.txt


4.服务端仅保留6个月的备份数据,其余的全部删除
find /backup -mtime +180|xargs rm -rf


网站公告

今日签到

点亮在社区的每一天
去签到