centos7中,rsync+crontab实现实时同步文件

服务器A:192.168.73.133

服务器B:192.168.73.132

我们实现从A服务器更新到B服务器

实现俩台服务器目录下文件的实时共享,需要用到rsync+crontab俩个工具

首先配置rsync

1、俩台服务器都要先安装rsync

yum -y install rsync

2、启动服务

systemctl start rsyncd.service

3、开机自启

systemctl enable rsyncd.service

4、检查是否成功启动

netstat -lnp|grep 873


(如果没有netstat的命令,则需先安装:yum -y install net-tools;873为rsync启动的端口)

rsync的配置

OK,到这里成功安装。那么我们来到配置文件:/etc/rsyncd.conf。这里我们用vim打开它(同样,没有的同学需要先安装vim:yum -y install vim)

vim /etc/rsyncd.conf

centos7中,rsync+crontab实现实时同步文件_第1张图片

大家会看到如上的默认配置。

我们来添加配置:

 uid = root                              
 # //设置运行rsync 进程的用户
 gid = root
 use chroot = no
 max connections = 4
# pid file = /var/run/rsyncd.pid        
#//CentOS7中yum安装不需指定pid file 否则报错
 lock file=/var/run/rsyncd.lock
 log file = /var/log/rsyncd.log     
 # //此文件定义完成后系统会自动创建
 exclude = lost+found/
 transfer logging = yes
 timeout = 900
 ignore nonreadable = yes         
 # //同步时跳过没有权限的目录
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2          
 #  //传输时不压缩的文件

在服务器A、B上都如上配置,效果如下

centos7中,rsync+crontab实现实时同步文件_第2张图片

这个时候我们来重启A、B服务器上的rsync服务:

systemctl restart rsyncd.service

服务器实时传输文件

接着我们来设置服务器间文件的传输规则,规则大致如下:

[simba]          //此名字即客户端使用rsync来同步的路径
path=/usr/local/simba    //实际需要同步的路径
comment=simba    //和中括号里名字一样就行
ignore errors
read only=no   //表示可以pull 
write only=no      //表示可以push
list=no
auth users=rsyncuser    //客户端获取文件的身份此用户并不是本机中确实存在的用户
secrets file=/etc/rsyncd.passwd     //用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权       
                                                        //限一定需要改为600,且属主必须与运行rsync的用户一致。
hosts allow=*    //允许所有主机访问

我们在服务器A上配置,同样打开vim /etc/rsyncd.conf。在其中添加规则:

我们默认传输在/root/test/目录下的文件,所以需要在A、B服务器中都创建test文件夹(mkdir /root/test)

#规则名称,作为测试用规则,可随意更改,与后文对应即可。
[test]          
#同步的路径
path=/root/test    
#规则描述
comment=测试规则
ignore errors
#是否可以pull
read only=no    
#是否可以push
write only=no      
list=no
#下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。等下说说如何在rsync里面定义身份。
#客户端获取文件的身份此用户并不是本机中确实存在的用户
auth users=rsyncuser    
#//用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权     
#//限一定需要改为600,且属主必须与运行rsync的用户一致。  
secrets file=/etc/rsyncd.passwd                                                             
#允许所有主机访问
hosts allow=*    

配置完成后如下所示:

centos7中,rsync+crontab实现实时同步文件_第3张图片

这时完成服务器A的配置;我们来给rsync定义身份和密码文件

echo 'rsyncuser:123456'>/etc/rsyncd.passwd   //文件用户名和路径为上面定义,别写错,密码自己定
chmod 600 /etc/rsyncd.passwd        //修改权限

接着我们来到服务器B中,创建相应密码文件

echo '123456' >>/etc/rsyncd-test.passwd     //注意这里只需要服务器rsyncd.passwd 中的密码
chmod 600 /etc/rsyncd-test.passwd
配置完成,重启俩台服务器的rsync服务
systemctl restart rsyncd.service
我们可以在服务器A的/root/test/目录下创建个文件,以便测试
echo "aa">>aa.txt

还有一点,我们需要在服务器A中打开防火墙对873端口的访问

Firewall-cmd --add-port=873/tcp --permanent //添加端口到默认区域
Firewall-cmd --reload //重启

之后我们来服务器B操作同步命令:

rsync -auv --password-file=/etc/rsyncd-test.passwd [email protected]::test /root/test/

上面的rsyncuser(创建密码时的帐号)和test(配置传输规则的名称)要与之前的配置想对应

笔者在次会出现错误,来到服务器A中查看日志:tail /var/log/rsyncd.log

发现如下错误

centos7中,rsync+crontab实现实时同步文件_第4张图片

在此会说没有权限。经过查找发现是SELinux在捣乱,我们将他关闭,在这里科普俩个小命令:

#getenforce(查看selinux状态,Enforcing为强制性记录警告并阻止可疑行为)

#setenforce 0(更改为允许)

我们再来同步就会发现成功。那么到此,同步是实现了,但是是拘泥于手动模式。这时我们来到centos自带的一个小工具->crontab 

我们将同步命令写到脚本中

vim /root/test.sh

完成后保存退出,并执行crontab -e


设置为5分钟执行一次同步脚本

这个时候就完成实时同步文件的步骤了

你可能感兴趣的:(centos)