欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-09 13:09:18
...
服务器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

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

(如果没有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实现实时同步文件

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

我们来添加配置:

 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实现实时同步文件

这个时候我们来重启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实现实时同步文件

这时完成服务器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 aaa@qq.com::test /root/test/

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

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

发现如下错误

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

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

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

#setenforce 0(更改为允许)

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

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

vim /root/test.sh

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

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

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

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

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

相关标签: rsync crontab