原文地址:http://gongfuxiang.com/post-92.html
一、准备
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而Inotify-tools就是这样的一个第三方软件。
1、服务器
操作系统 CentOS-6.5-x86_64 6.5 Linux内核 2.6.32 master 192.168.0.200 客户端(数据服务器) slave1 192.168.0.110 数据同步服务器(备份服务器1) slave2 192.168.0.111 数据同步服务器(备份服务器2)
2、基础命令安装(所有服务器都需要安装,已经安装可跳过)
yum install -y gcc gcc-c++ make wget
二、数据同步服务端配置(备份服务器)
1、检查是否已安装rsync
rpm -qa | grep rsync
2、安装rsync和xinetd超级守护进程
yum -y install xinetd rsync
3、创建rsync用户及模块目录并更改其用户组(用户运行rsync的用户,不建议使用root)
useradd rsync -s /sbin/nologin -M grep rsync /etc/passwd mkdir -p /data/www chown -R rsync:rsync /data
4、配置rsync认证文件 /etc/rsync.password(格式 用户:密码)
echo "rsync:rsync" > /etc/rsync.password
4.1、为密码文件提权,增加安全性,文件权限修改成600
chmod 600 /etc/rsync.password
5、为rsync服务提供配置文件,vim /etc/rsyncd.conf 文件默认不存在,手动创建即可
# 工作中指定用户(需要指定用户) uid = rsync gid = rsync # 相当于黑洞.出错定位 use chroot = no # 有多少个客户端同时传文件 max connections = 200 # 超时时间 timeout = 600 # 进程号文件 pid file = /var/run/rsyncd.pid # 锁文件 lock file = /var/run/rsync.lock # 日志文件 log file = /var/log/rsyncd.log # 模块配置 # 这个模块对应的是推送目录,模块名称随便起 [rsync] # 需要同步的目录 path = /data/www/ # 表示出现错误忽略错误 ignore errors # 表示网络权限可写(本地控制真正可写) read only = false # 这里设置IP或让不让同步 list = false # 白名单,可以访问此模块的主机 hosts allow = 192.168.0.200 # 黑名单,*表示任何主机 hosts deny = * # 认证此模块的用户名,虚拟用户 auth users = rsync # 虚拟用户的密码文件 secrets file = /etc/rsync.password
6、配置rsync操作脚本
A、启动脚本
echo "rsync --daemon --config=/etc/rsyncd.conf" > /etc/init.d/rsync-start chmod +x /etc/init.d/rsync-start
B、停止脚本
echo "killall -9 rsync > /dev/null 2>&1; rm -rf /var/run/rsyncd.pid" > /etc/init.d/rsync-stop chmod +x /etc/init.d/rsync-stop
C、重启脚本
echo "/etc/init.d/rsync-stop; /etc/init.d/rsync-start" > /etc/init.d/rsync-restart chmod +x /etc/init.d/rsync-restart
6.1、以后服务器启动后,手动启动rsync脚本即可
/etc/init.d/rsync-start 启动 /etc/init.d/rsync-stop 停止 /etc/init.d/rsync-restart 重启
7、启动xinetd超级守护进程服务
service xinetd start
8、配置防火墙允许873端口通信 vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
9、查看rsync服务是否成功开启
ps -ef | grep rsync
10、检查873端口是否成功监听
netstat -ntlp | grep 873
三、客户端配置
1、检查是否已安装rsync
rpm -qa | grep rsync
1.1、安装rsync服务
yum -y install rsync
2、创建本地监控的目录
mkdir -p /data/www
3、配置rsync认证文件 /etc/rsync.password(这里只要写密码即可,切记)
echo "rsync" > /etc/rsync.password
3.1、为密码文件提权,增加安全性,文件权限修改成600
chmod 600 /etc/rsync.password
4、测试一下,进入 /data/www
cd /data/www touch test.txt rsync -avz test.txt rsync@192.168.0.110::rsync --password-file=/etc/rsync.password
5、inotify-tools实现实时同步
mkdir /data/soft cd /data/soft wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar -zxvf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify make && make install
6、编写rsync脚本,添加一下内容 vim /etc/rsync.sh
#!/bin/bash # 数据同步监控脚本 # @author Devil # @version 0.0.1 # inotify-slave的ip地址(多个ip空格分割) host="192.168.0.110 192.168.0.111" # 本地监控的目录 src=/data/www/ # inotify-slave的rsync服务的模块名 dst=rsync # inotify-slave的rsync服务的虚拟用户 user=rsync # 本地调用rsync服务的密码文件 rsync_passfile=/etc/rsync.password # inotify的安装目录 inotify_home=/usr/local/inotify # 参数校验 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' -e close_write,delete,create,attrib $src \ | while read file do cd $src for tmp_host in $host do rsync -aruz -R --delete ./ --timeout=100 $user@$tmp_host::$dst --password-file=${rsync_passfile} > /dev/null 2>&1 done done exit 0
6.1、给rsync.sh执行权限
chmod +x /etc/rsync.sh
6.2、配置操作rsync脚本文件,添加以下内容 vim /etc/init.d/rsync
# 脚本名称 name="rsync" # 拉取正在运行的脚本进程号 PROCESS=`ps -ef | grep $name | grep -v grep | grep -v PPID | awk '{ print $2}'` # 输出正在停止脚本的提示 if [ -n "$PROCESS" ] then echo "正在停止" fi # 停止脚本 for i in $PROCESS do kill -9 $i > /dev/null 2>&1 done # 是否停止成功 if [ $? != 0 ] then echo "停止失败" exit 0 fi # 启动脚本 /etc/rsync.sh & # 等待2秒 sleep 2 # 判断脚本是否启动成功 is_rsync=$(ps -ef | grep "$name" | grep -v grep | wc -l) if [ $is_rsync != 0 ] then echo "启动成功" else echo "启动失败" fi
6.3、给rsync服务脚本执行权限
chmod +x /etc/init.d/rsync
7、以后每次只需运行rsync脚本即可,停止启动合并
/etc/init.d/rsync
8、进入监控目录操作文件试试看效果
cd /data/www touch test.txt echo "hello" > test.txt touch world.txt
9、查看备份服务器 192.168.0.100,192.168.0.110
cd /data/www ls 文件都同步过来了