Centos7 rsync 实现文件同步

Posted comprehensive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7 rsync 实现文件同步相关的知识,希望对你有一定的参考价值。

环境:

操作系统 Centos 7.6
服务端 192.168.11.60
客户端 192.168.11.61

服务端:

centos7 自带rsync,如果没有安装的话;yum install -y rsync

1、打开配置文件:

vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode uid = 0 gid = 0 #相当于黑洞.出错定位 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 ##模块开始(这个模块就是待会儿对端写脚本的里面一个参数的名称) [msone] #第一个模块名称 ##需要同步的目录(准确的说是同步过来后放到哪里的目录路径) path = /data/www ##表示出现错误忽略错误 ignore errors ##表示网络权限可写(本地控制真正可写)(亲测这里写false报错) read only = no ##这里设置IP或让不让同步 list = false #允许的ip或者ip段 hosts allow = 192.168.11.61 ##拒绝,以下表示都不拒绝 hosts deny = 0.0.0.0/32 ##认证用户 auth users = rsynclsl ##用户名和密码存放文件 secrets file = /etc/rsync.secrets [backup] #第二个模块名称 ##需要同步的目录(准确的说是同步过来后放到哪里的目录路径) path = /data/check ##表示出现错误忽略错误 ignore errors ##表示网络权限可写(本地控制真正可写)(亲测这里写false报错) read only = no ##这里设置IP或让不让同步 list = false #允许的ip或者ip段 hosts allow = 192.168.11.61 ##拒绝,以下表示都不拒绝 hosts deny = 0.0.0.0/32 ##认证用户 auth users = rsynclsl ##用户名和密码存放文件 secrets file = /etc/rsync.secrets

2、添加同步需要用的用户名和密码

# useradd -s /sbin/nologin rsynclsl
# passwd rsynclsl

3、创建认证文件

vim /etc/rsync.secrets
文件里面添加如下内容(格式为用户名:密码):
rsynclsl:123456

4、权限设置

# chmod 600 /etc/rsync.secrets

5、启动服务

# rsync --daemon

6、建立存储目录,配置权限。

# mkdir -p /data/www
# mkdir -p /data/check
# chmod 765 -R /data/*
# ll /data/
total 0
drwxrwxrwx 3 root root 19 May 18 16:39 check
drwxrwxrwx 3 root root 17 May 18 16:35 www

客户端:

1、安装rsync和inotify(rsync只安装不启动不配置)

2、inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。

#wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
#tar zxf inotify-tools-3.14.tar.gz
#cd inotify-tools-3.14
#./configure --prefix=/usr/local/include/
#  make && make install   

3、配置两个脚本,让它自动去检测我们制定的目录下文件发生的变化,然后再执行rsync的命令把它同步到我们的服务器端去,两个脚本加上执行的权限;

#vim inotify.sh #这是一个同步备份的文件目录;
#!/bin/bash
#chkconfig: 345 88 14
host=192.168.11.60    #server的ip(备份服务器)
src=/data/www  #所要监控的备份目录(此处可以自定义,但是要保证存在)
des=msone   #自定义的模块名,需要与服务端定义的一致
password=/etc/rsync.password  #密码文件
user=rsynclsl    #用户名(一个实际存在的账号)
inotify=/usr/local/include/    #inotify的安装目录                

${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
rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
#!/bin/bash
#chkconfig: 345 88 14
host=192.168.11.60    #server的ip(备份服务器)
src=/test/check  #所要监控的备份目录(此处可以自定义,但是要保证存在)
des=backup   #自定义的模块名,需要与服务端定义的一致
password=/etc/rsync.password  #密码文件
user=rsynclsl    #用户名(一个实际存在的账号)
inotify=/usr/local/include/    #inotify的安装目录                

${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
rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

4、创建/etc/rsync.password文件(整个文件需要600的权限和服务端rsync同步用户的密码,这里是服务器端rsynclsl用户的密码)

# vim /etc/rsync.password
123456
# ll /etc/rsync.password
-rw------- 1 root root 7 May 18 14:05 /etc/rsync.password

5、执行脚本前测试配置是否正常;注意 /data/www/ 和 /data/check/ 要有文件;

# rsync -avH --port=873 --delete  /data/www/  rsynclsl@192.168.11.60::msone  --password-file=/etc/rsync.password
# rsync -avH --port=873 --delete  /test/check/  rsynclsl@192.168.11.60::backup  --password-file=/etc/rsync.password

6、执行脚本,放后面运行即可;

# nohup ./inotify.sh &
# nohup ./check.sh &

7、或者利用crontab -e定时执行;

crontab -e
* * * * * sh /root/inotify.sh
* * * * * sh /root/check.sh

测试:

1、服务器客户端全部关闭selinux和firewalld及iptables(或者允许873端口通过)

2、服务端启动rsync服务即可(进入 /data/check 准备刷新)

3、客户端启动脚本。

4、在客户端进入客户端的/data/check目录下建立文件,更改内容。

5、服务器端刷新

6、客户端会把check整个目录传到服务器端的/data/check下,等于在/data/check下又出现了一个check目录。

以上是关于Centos7 rsync 实现文件同步的主要内容,如果未能解决你的问题,请参考以下文章

Centos7 rsync 实现文件同步

centos7下部署rsync+innotify实现数据同步

CentOS7通过rsync+crontab实现两台服务器文件同步

Centos7.0系统下Rsync+sersync实现数据实时增量同步备份

centos7安装sersync2+rsync+inotify-tools实现文件实时同步

Linux-运维-centos7实现实时同步