day28-NFS
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, # 类似-acompress = 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_dir2.客户端在本地打包备份(hosts passwd crontab)拷贝至/backup/web01_172.16.1.7_20251010
tar -zcf /backup/$date_dir.tar.gz /etc/hosts /etc/passwd3.客户端最后将备份的数据进行推送至备份服务器41
rsync -avz --password-file=/etc/rsync.pass /backup/$date_dir rsync_backup@172.16.1.41::backup4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find /backup/ -mtime +7|xargs rm -rf5.客户端每天凌晨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 = /data2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c /backup/*_*_`date +%Y%m%d`/*.log > /opt/md5.txt3.服务端需要每天校验的结果通知给管理员
mail -s "${TIME}_备份校验结果" "邮箱" < /opt/md5.txt4.服务端仅保留6个月的备份数据,其余的全部删除
find /backup -mtime +180|xargs rm -rf