centos7 安装nfs+inotify+rsync

centos7 安装nfs+inotify+rsync_第1张图片

测试环境的结构,内网环境,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的单进程的(已经加上&并发)

你可能感兴趣的:(centos7 安装nfs+inotify+rsync)