测试环境的结构,内网环境,selinux和防火墙已关闭
nfs的安装:
yum install rpcbind
yum install nfs-utils
安装完成后需要先启动rpcbind服务(nfs共享的时候用来通知客户端,服务器端nfs服务的端口号。类似于房产中介,告诉客户哪里有房子出租)
systemctl start rpcbind
systemctl enable rpcbind
可以使用rpcinfo -p 查看信息
启动nfs服务:
systemctl start nfs
systemctl enable nfs
配置/etc/exports
/data/backup/webfiles 10.0.1.0/24(rw,sync,all_squash)
rw允许10.0.1.0网段下的机器有读写权限,sync将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;,all_squash,不管访问nfs server共享目录的用户身份如何,都会被压缩成匿名用户,同时它的UID和GID都会变成nobody用户。
systemctl reload nfs
修改文件夹/data/backup/webfiles的用户和组
chmod -R 755 webfiles
chown -R nfsnobody.nfsnobody webfiles
在web01,web02上安装:
yum install rpcbind nfs-utils
启动rpcbind
将nfs server端的/data/backup/webfiles挂载到web01 /usr/local/webfiles
使用默认的挂载方式:
mount -t nfs 10.0.1.33:/data/backup/webfiles /usr/local/webfiles
安全+优化的挂载方式:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime 10.0.1.33:/data/backup/webfiles /usr/local/webfiles
可以使用df -h命令查看挂载结果
有关NFS服务器的所有服务器内核优化:
cat >> /etc/sysctl.conf <
net.core.wmen_default = 8388608
net.core.rmen_default = 8388608
net.core.rmen_max = 16777216
net.core.wmen_max = 16777216
EOF
执行sysctl -p 生效
如果nfs server挂了,无法解除挂载,可以使用命令umount -lf /usr/loca/webfiles (命令来自老男孩视频)
rsync是centos7自带的不需要安装,但是需要在backup的机器上修改/etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsync.log
ignore errors
read only = false
list = false
hosts allow = 10.0.1.33
timeout = 900
auth users = rsync_backup
secrets file = /etc/rsync.password
###########################
[backup]
comment = sre by gyy 09:51 2017/10/18
path = /data/backup/webfiles/
改完文件以后需要创建用户rsync
useradd rsync -s /sbin/nologin -M
使用id rsync查看用户是否创建成功
chown -R rsync /data/backup
创建密码文件
echo "rsync_backup:123456"> /etc/rsync.password
chmod 600 /etc/rsync.password
启动rsync守护进程
rsync --daemon
使用ps -ef|grep rsync查看是否启动
在nfs server上创建密码文件
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
尝试使用rsync同步文件
rsync -avz /data/backup/webfiles [email protected]::backup --password-file=/etc/rsync.password
在nfs server 上检查是否支持inotify
uname -r
ls -l /proc/sys/fs/inotify/
需要在github上下载inotify-tools-3.14.tar.gz,解压,编译安装,
./configure --prefix=/usr/local/inotify
make
make install
安装完成后,有两个命令,inotifywait和inotifywatch
inotifywait:在被监视的文件或者目录上等待特定的文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用
inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。
编写sh脚本
#/bin/bash
host=10.0.1.62
src=/data/backup/webfiles
des=backup
user=rsync_backup
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
if [ -f $files ];then
rsync -azu --delete $files $user@$host::$des --password-file=/etc/rsync.password &
echo "${files} was rsynced" >>/var/log/rsync.log 2>&1
else
rsync -azu --delete $src $user@$host::$des --password-file=/etc/rsync.password &
echo "${files} was rsynced" >>/var/log/rsync.log 2>&1
fi
done
rsync 后面的参数:我本来是只加的az,但是看某些博文下网友的评论,这个u好像很厉害的样子。。。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
inotify的优点:
监控文件系统的事件变化,通过脚本实现数据的实时同步
inotify的缺点:
1.并发大于200个文件(10k-100k),同步就会有延迟
2.现在的脚本,会全部同步,如果文件量很大,就会很慢。(需要优化)
3.监控到事件后,调用的rsync的单进程的(已经加上&并发)