rsync简介:
Rsync 是一个远程数据同步工具,使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份
inotify-tools简介:
inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。现在介绍一下它的使用方法
环境部署:
inotify_slave 42.159.246.48:57893 数据备份端
inotify_master 42.159.246.48:57892 源数据端
一、部署数据备份端:
1. 备份端部署rsync服务:
[[email protected] ~]#yum -y install rsync
[[email protected] ~]#useradd rsync -s /sbin/nologin -M
[[email protected] ~]#mkdir -p /cmsresoure/image/backup
[[email protected] ~]#chown rsync:rsync /cmsresoure/image/backup
2. 添加配置文件/etc/rsyncd.conf
[[email protected] ~]#vim /etc/rsyncd.conf
##################################################################################
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /cmsresoure/image/backup/
ignore errors
read only = false
list = false
hosts allow = *
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end
##################################################################################
3. 配置虚拟用户的密码文件并启动服务
[[email protected] ~]# echo "rsync_backup:leesir" >/etc/rsync.password
[[email protected] ~]# chmod 600 /etc/rsync.password
[[email protected] ~]# rsync --daemon
[[email protected] ~]# ps -ef | grep rsync
4. 通过源数据端测试推送
[[email protected] ~]# echo "leesir" >/etc/rsync.password #注意:这里只要写密码即可,切记。
[[email protected] ~]# chmod 600 /etc/rsync.password
[[email protected] ~]# rsync -avzlh inotify.sh [email protected]::backup --password-file=/etc/rsync.password
在源数据端推送后,去数据备份端检查是否推送成功。
二、源数据端部署
1. 查看当前系统是否支持inotify
[[email protected] ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 8 18:54 max_queued_events
-rw-r--r-- 1 root root 0 Oct 8 18:54 max_user_instances
-rw-r--r-- 1 root root 0 Oct 8 18:54 max_user_watches
Remarks:
#显示这三个文件则证明支持。
/proc/sys/fs/inotify/max_queued_evnets
#表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
#表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
#表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。
例如: echo 30000000 > /proc/sys/fs/inotify/max_user_watches
2. 部署inotify服务:
[[email protected] ~]# yum -y install inotify-tools
[[email protected] ~]# rpm -qa | grep inotify-tools
inotify-tools-3.14-1.el6.x86_64
[[email protected] ~]# vim inotify.sh
##################################################################################
#!/bin/bash
#
#2015.10.8
#
DESTHOST=42.159.246.48
SRCDIR=/cmsresoure/image/backup/
PASSWD=/etc/rsync.password
USER=rsync_backup
inotifywait -mr --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w %f‘ -e close_write,modify,create,attrib $SRCDIR | while read DATE TIME DIR FILE;do
FILECHANGE=${DIR}${FILE}
rsync -avztopglH $SRCDIR [email protected]${DESTHOST}::backup --password-file=$PASSWD &>/dev/null && \
echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> /var/log/image.log
done
##################################################################################
3. 测试脚本创建文件测试:
[[email protected] ~]# more /home/user/touch_file.sh
##################################################################################
#!/bin/sh
#
#2015.10.8
#
#Create 5 100K files, file name is a random number
#
#
for ((i=1;i<6;i++))
do
dd if=/dev/zero of=/cmsresoure/image/backup/$(sha1sum<<<$RANDOM|cut -b 5-10) bs=100k count=1
echo "touch $i done"
sleep 3
done
echo "the script is done"
##################################################################################
[[email protected] ~]# echo "*/30 * * * * /bin/bash /home/user/touch_file.sh > /dev/null 2>&1" >> /etc/cronteb
[[email protected] ~]# sh inotify.sh & #将脚本加入后台执行
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
三. 实时同步测试
1. 源数据端操作:
[[email protected] ~]# sh /home/user/touch_file.sh
##################################################################################
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000441594 s, 232 MB/s
touch 1 done
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000603492 s, 170 MB/s
touch 2 done
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000548994 s, 187 MB/s
touch 3 done
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000423695 s, 242 MB/s
touch 4 done
the script is done
##################################################################################
[[email protected] ~]# ls /cmsresoure/image/backup/
039f90 15aaf2 1c2d4b 3b079d
2. 数据备份端检查:
[[email protected] ~]# cd /cmsresoure/image/backup/
[[email protected] backup]# ls
039f90 15aaf2 1c2d4b 3b079d
四. 维护:
1. 设置在备份端监控Rsync服务的脚本:
[[email protected] shell]# vim rsync_check.sh
##################################################################################
#!/bin/bash
#
#2015.10.8
#
#The script will check the Rsync service, if you find that Rsync will restart the service.
RSYNC_CHECK=`netstat -npl | grep -c rsync`
if [ "$RSYNC_CHECK" -eq "0" ];
then
/usr/bin/rsync --daemon
fi
##################################################################################
[[email protected] shell]# echo "*/2 * * * * /bin/bash /shell/rsync_check.sh >/dev/null 2>&1" >>/etc/crontab
Remarks:
将脚本加入到计划任务中,没两分钟检查一次rsync是否正常运行
2. 设置在源数据端检查inotify服务的脚本:
[[email protected] shell]# vim check_inotify.sh
##################################################################################
#!/bin/bash
#
#2015.10.9
#
#the script will to check the inotify server
#
#
INOTIFY=/shell/inotify.sh
CHECK_INOTIFY=`ps -ef | grep -c inotify.sh`
if [ "$CHECK_INOTIFY" -eq "1" ];
then
/bin/bash "$INOTIFY" >/dev/null 2>&1
fi
##################################################################################
[[email protected] shell]# echo "*/2 * * * * /bin/bash /shell/check_inotify.sh >/dev/null 2>&1" >> /etc/crontab
五。测试结果:
rsync+inotify-tools同步效果:rsync可以完全实时同步监控的文件夹,并输出同步日志。