环境: backup nfs01 web01 web02(系统版本为CentOS7.6)
backup 对其他三台进行全网备份,并校验备份文件内容,且发送邮件
nfs 共享目录(静态存储共享) nfs 和backup 实施实时同步备份
1. 准备环境
准备四台虚拟机。
需要使用两张网卡:
外网为10.0.0.0/24网段。(IP自定义)
内网为172.16.1.0/16网段。(IP自定义)
主机名分别修改为backup nfs01 web01 web02
2. 各个服务器需要服务的安装
服务 | backup | nfs01 | web01 | web02 | 作用 |
---|---|---|---|---|---|
rsync | ● | ● | ● | ● | 有推拉功能,实现定时备份 |
nfs-utils | ○ | ● | ○ | ○ | 实现服务器中目录共享 |
rpcbind | ○ | ● | ● | ● | 双方rpc服务的通信获取NFS的端口 |
sersync | ○ | ● | ○ | ○ | 实现实时备份 |
表格中"●"为需要安装"○"为不需要安装
sersync下载地址,放置在我的云盘中:链接:https://pan.baidu.com/s/1jyjPuFBkeJgvlcV-5EHJ8A 提取码:970q
下载之后放进nfs的规范目录下/server/tools/下,进行解压
解压之后移动到/下
3. backup对其他三台进行全网备份
服务端配置:
1)编辑/etc/rsync.conf 文件,提前备份
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[data]
path = /data/
创建data模块(上文脚本)
2)创建rsync用户 因为/etc/rsync.conf文件指定了uid,giu需要
3)创建模块需要的目录,并给与目录与文件中相同的uid,gid
4)创建密码文件,在/etc/rsync.password ,给与文件600权限,只有属主可以读取
5)在密码文件中写入————用户名:密码(破折号后为文本内容)
6)重启rsync服务
客户端配置:
1)配置密码文件,与服务端相同的位置
2)在密码文件中写入————服务端配置的密码(破折号后为文本内容)
可以再环境变量/etc/bashrc 中添加一行————export 大写的服务器端配置的用户名=服务端配置的密码
配置完成后验证
使用rsync命令推送文件,查看是否成功。
rsync -avz 本地目录 服务器端配置的用户名@服务端IP地址::服务端配置的模块名 --password-file=/etc/rsync.password
4. 并校验备份文件内容,且发送邮件
编写脚本执行定时任务,定是推送需要目录,并进行验证
客户端推送
在规范目录/server/scripts/下创建脚本文件(文件名自定义),编辑脚本文件
#!/bin/bash
HOSTNAME=`hostname`
export RSYNC_PASSWORD=123456
mkdir -p /data/$HOSTNAME
#打包本地文件
cd / &&
tar zcf /data/$HOSTNAME/$(date +%F).tar.gz server/scripts &>/dev/null
#给打包的文件加指纹
find /data/$HOSTNAME/ -type f -name "*$(date +%F).tar.gz" |xargs md5sum >/data/$HOSTNAME/$(date +%F).flag
#推送目录到服务端
rsync -az /data/$HOSTNAME/ [email protected]::data/$HOSTNAME
#删除7天之前的文件
find /data/$HOSTNAME -type f -mtime +7 -name "*.tar.gz" |xargs rm -f
编写脚本时需要注意:定时任务中可能不调用环境变量,需要在文件中重新定义密码
完成后在服务端验证,是否收到推送的文件
服务端验证
在规范目录/server/scripts/下创建脚本文件(文件名自定义),编辑脚本文件
#!/bin/bash
#删除7天前的备份文件
find /data -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
#验证发送的文件是否收到
find /data -type f -name "$(date +%F).flag" |xargs md5sum -c >/var/log/$(date +%F).txt
#邮箱发送
mail -s "$(date +%F)backup tuisongyanzheng" *********@qq.com
手动执行脚本验证是否成功
脚本完成后邮件可能会发送失败,原因:
1)邮件服务未开启
启动邮件服务
2)需要邮箱的授权码
邮箱授权码,通过自己所使用邮箱,设置下面账户中开启邮箱各种服务,会生成一个授权码。
在脚本发送邮件的命令中加入授权码或者
在/etc/mail.rc中尾行添加
set from=邮箱地址
set smtp=所属邮箱的地址
set smtp-auth-user=邮箱地址
set smtp-auth-password=授权码
set smtp-auth=login
把写好的脚本都加入定时任务按照需求进行执行
5. nfs 共享目录(静态存储共享)
服务端配置
1)先开启rpcbind服务,之后开启nfs服务(顺序不可颠倒),都设置为开机自启动
2)使用rpcinfo 验证查看是否生成的注册表
3)编辑nfs的配置文件/etc/exports————共享目录 客户端的IP网段/子网掩码(权限) (括号与网段之间不能有空格)
4)改变共享目录的属主属组为nfsnobody
重启nfs服务
客户端配置
1)客户端开启rpcbind服务
2)进行共享目录的挂载:
mount -t nfs 服务端IP:服务端共享目录 挂载点
3)验证临时挂载是否生效 df -h查看是否挂载上
4)在开机自动挂载文件中永久挂载/etc/fstab
服务端IP:服务端共享目录 挂载点 nfs defaults 0 0
永久挂载需要nfs开启时才会实现,否则客户端的所有服务器开机无法启动
需要在永久挂载中defaults后面加soft或者hsrd,intr.就可以延迟启动(参数之间以","隔开)
5)安全加优化的挂载方式如下:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 服务端IP:服务端共享目录 挂载点
6)深入挂载
在服务端和客户端创建相同uid,gid的用户
在服务端改变共享目录的属主属组,与之前创建的用户名相同
实现其他匿名用户查看 ,如果只是更改服务端,客户端看到的文件都只有服务端属主属组的uid和gid,而不显示是什么用户
6. nfs 和backup 实时同步备份
需要nfs01 与backup之间实现实时共享
上文已经进行了手动推送
1)配置/application/sersync/conf/confxml.xml
修改需要的配置
2)执行命令 /application/sersync/bin/sersync -d