利用rsync+inotify 实现远程实时同步配置与文件并发测试
Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。
使用 inotify 很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器 是一个路径和一组事件),然后使用 read 方法从描述符获取事件。read 并不会用光整个周期,它在事件发生之前是被阻塞的。
可以监控文件系统中添加,删除,修改,移动等各种事件
inotify逻辑
环境:需要二台服务器,inotify安装在master的服务器
master:192.168.0.110 255.255.255.0
slave:192.168.0.111 255.255.255.0
1.rsync服务端的相关设置
2.检查系统的内核,查看是否有匹配的文件
3.master上下载inotify的源码包
4.手动测试创建文件
5.手动测试删除文件
6.编写一个实时监控的脚本
新建rsync用户及模块目录并更改其用户组
useradd lizheng -s /sbin/nologin #添加用户
greplizheng /etc/passwd #查看用户
mkdir/risehome/ #创建rsync工作模式的模块目录
chownlizheng.lizheng /risehome/ #更改模块目录的用户组
创建rsyncd.conf文件
vi/etc/rsyncd.conf
写入内容
#server configure start
port = 873
uid = root
gid = root
use chroot = no
max connections = 300
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
[risehome] #设置模块名
path = /risehome/
ignore errors
read only = false
list = false
hosts allow = * #所有网段
hosts deny = 0.0.0.0/32
auth users = lizheng #用户
secrets file = /etc/rsync.password
#rsync_config___________________end
注意点:rsync--daemon 客户端开启873端口
rsync服务端(slave)
vi /etc/rsync.password
lizheng:lizheng123
更改权限
chmod 600/etc/rsync.password
查看rsync是否开启
netstat -lnpe |grep rsync
rsync服务端(master)
vi /etc/rsync.password
lizheng123
更改权限
chmod 600/etc/rsync.password
加入开机启动
echo"/usr/bin/rsync --daemon" >> /etc/rc.local
查看master是否有下列三个选项
ls -l/proc/sys/fs/inotify
查看slave是否有下列三个选项
事件相关参数的大小 /proc/sys/fs/inotify/
可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。
[root@xuegod63~]#vim/etc/sysctl.conf#以文件最后,添加以下内容
fs.inotify.max_queued_events=32768
fs.inotify.max_user_instances=1024
fs.inotify.max_user_watches=90000000
sysctl -p#使修改后的sysctl.conf文件生效
查看是否修改成功:
[root@xuegod63~]# cat /proc/sys/fs/inotify/max_user_watches
进入源码包存放的路径
mkdir -p/home/lizheng/tools
cd/home/lizheng/tools
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvfinotify-tools-3.14.tar.gz
进入inotify目录并编译安装(./congifure --help可以查看参数)
cdinotify-tools-3.14
./configure--prefix=/usr/local/inotify-tools-3.14/ (指定安装路径)
make&& make install
ln-s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools #给安装路径做一个软链接,去掉版本号
ll/usr/local/inotify-tools #查看文件
1.新建一个backup的文件
mkdir /backup
执行命令
/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e create/backup
/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e delete/backup
在/server/scripts/路径下新建一个inotify.sh的脚本
mkdir -p/server/scripts
vim/server/scripts/inotify.sh
脚本内容
#!/bin/bash
#written bylizheng
#about inotofy
#para
host01=192.168.0.111 #定义的变量,slave的ip地址
src=/backup/ #master数据的目录
dst=backup #rsync中定义的模块
user=lizheng #rsync中设置的用户
rsync_passfile=/etc/rsync.password #密码文件
inotify_home=/usr/local/inotify-tools-3.14/ #inotify的路径
#judge
if [ ! -e"$src" ] \
|| [! -e "${rsync_passfile}" ]\
|| [! -e "${inotify_home}/bin/inotifywait" ]\
|| [! -e "/usr/bin/rsync" ];
then
echo"Check File and Folder"
exit 9
fi
${inotify_home}/bin/inotifywait-mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -eclose_write,create,attrib,delete $src \
| while read file
do
# rsync -avzP --delete --timeout=100--password-file=${rsync_passfile} $src $user@$host01::$dst > /dev/null2>&1
执行后台运行
sh inotify.sh&
查看后台执行
ps -ef |grep ino
@ERROR: authfailed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]
检查服务器A存储密码文件和服务器B密码文件。
服务器A密码文件/etc/rsyncd.secrets 格式为: username:password
服务器B密码文件password.rsync 格式为:password
文件权限错误
password filemust not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]
检查服务器A存储密码文件和服务器B密码文件。
服务器A密码文件 /etc/rsyncd.secrets权限为600: chmod 600/etc/rsyncd.secrets
服务器B密码文件 password.rsync 权限为600:chmod 600 password.rsync
附录:关于参数
inotifywait命令参数
-m
:
是要持续监视状态。
-r
:
递归查询目录。
-q
:
打印监控事件的信息。
-e
:
指定要监视的事件列表。
--timefmt
:
是指定时间的输出格式。
--format
:
指定文件变化的详细信息。
--excludei<pattern>:排除文件和目录时,不区分大小写
可监听的事件
-e|--event<event1>....
事件 | 描述 |
access | 访问,读取文件。 |
modify | 修改,文件内容被修改。 |
attrib | 属性,文件元数据被修改。 |
move | 移动,对文件进行移动操作。 |
create | 创建,生成新文件 |
open | 打开,对文件进行打开操作。 |
close | 关闭,对文件进行关闭操作。 |
delete
| 删除,文件被删除。 |
原文地址:http://11937277.blog.51cto.com/11927277/1917789