最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

亲测rsync+inotify-tools实时同步文件

Linux 462浏览 0评论

rsync用于同步文件,inotify-tools侦听文件的改变,这样我们就做到文件修改添加删除了,可以同步另一台服务器
两台服务器
192.168.128.128
192.168.128.129
实现的目标
129机子的文件实时同步到128机子

128机子操作

新建rsyncd.conf

vi /etc/rsyncd.conf
uid=root
gid=root
use chroot=no
max connections=10
timeout=600
strict modes=yes
port=873
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
[module_test]
path=/home/wwwroot/www.phpsong.com
comment=rsync test logs
auth users=phpsong
#uid=phpsong
#gid=phpsong
secrets file=/etc/rsyncd.secrets
read only=no
list=no
hosts allow=192.168.128.129
hosts deny=0.0.0.0/32

复制上面的配置,要修改的地方,192.168.128.129这个ip修改成自己的IP,其他的都可以不修改

设置密码

vi /etc/rsyncd.secrets
phpsong:phpsong123

格式
用户名:密码
PS.用户名要跟上面配置/etc/rsyncd.conf文件中auth users项的用户名一样

设置密码文件的权限

chmod 600 /etc/rsyncd.secrets
yum install xinetd
vi /etc/xinetd.d/rsync

修改xinetd 为no

disable = yes 修改成no
执行service xinetd restart会一起重启rsync后台进程

 

防止rsync写入过多的无用日志到/var/log/message

vi /etc/xinetd.conf

注释
# log_on_success = PID HOST DURATION EXIT

防止rsync写入过多的无用日志

开启防火墙tcp 873端口

vi /etc/sysconfig/iptables

添加

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

开启防火墙tcp 873端口
重新防火墙,为了上面的配置生效

service iptables restart

129机子操作

新建密码文件

vi /etc/rsync_client.pwd
phpsong123

这里配置的密码跟128机子/etc/rsyncd.secrets文件配置的密码一样
修改文件权限

chmod 600 /etc/rsync_client.pwd

测试一下同步是否成功

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /home/wwwroot/www.phpsong.com/ phpsong@192.168.128.128::module_test<br /> /usr/bin/rsync -auvrtzopgP --exclude-from=

PS.服务器的SELinux要关闭 怎么关闭请查看 SELinux状态查看及关闭

安装inotify-tools

每个系统都有不一样的安装方法,文章
https://github.com/rvoicilas/inotify-tools/wiki
有介绍
我选择最后一种方式

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

设置系统环境变量,添加软连接

echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh
source /etc/profile.d/inotify.sh  #使设置立即生效
echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf
ln -s /usr/local/inotify/include  /usr/include/inotify

修改参数:

sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出

不需要同步的文件

touch /home/sh/rsync_exclude.lst

实时同步的脚步

vi /home/sh/rsync.sh
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/tmp/src/
log_file=/var/log/rsync_client.log
#rsync
rsync_server=192.168.128.128
rsync_user=phpsong
rsync_pwd=/etc/rsync_client.pwd
rsync_module=module_test
INOTIFY_EXCLUDE='(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)'
RSYNC_EXCLUDE='/home/sh/rsync_exclude.lst'
#rsync client pwd check
if [ ! -e ${rsync_pwd} ];then
    echo -e "rsync client passwod file ${rsync_pwd} does not exist!"
    exit 0
fi
#inotify_function
inotify_fun(){
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' \
          --exclude ${INOTIFY_EXCLUDE}  -e modify,delete,create,move,attrib ${source_path} \
          | while read file
      do
          /usr/bin/rsync -auvrtzopgP --exclude-from=${RSYNC_EXCLUDE} --progress --bwlimit=200 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module} 
      done
}
#inotify log
inotify_fun >> ${log_file} 2>&1 &

上面的脚步除了ip地址,其他的可以不修改

同步文件的日志

tail -f /var/log/rsync_client.log

上面的同步脚步修改了,要关闭这个脚步

ps aux|grep inotify
kill -9 PID

执行脚本

/home/sh/rsync.sh
QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» 亲测rsync+inotify-tools实时同步文件
本文链接地址:https://www.phpsong.com/2775.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!