服务器B:192.168.73.132
我们实现从A服务器更新到B服务器
实现俩台服务器目录下文件的实时共享,需要用到rsync+crontab俩个工具
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启动的端口)
OK,到这里成功安装。那么我们来到配置文件:/etc/rsyncd.conf。这里我们用vim打开它(同样,没有的同学需要先安装vim:yum -y install vim)
vim /etc/rsyncd.conf
大家会看到如上的默认配置。
我们来添加配置:
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上都如上配置,效果如下
这个时候我们来重启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=*
配置完成后如下所示:
这时完成服务器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
发现如下错误
在此会说没有权限。经过查找发现是SELinux在捣乱,我们将他关闭,在这里科普俩个小命令:
#getenforce(查看selinux状态,Enforcing为强制性记录警告并阻止可疑行为)
#setenforce 0(更改为允许)
我们再来同步就会发现成功。那么到此,同步是实现了,但是是拘泥于手动模式。这时我们来到centos自带的一个小工具->crontab
我们将同步命令写到脚本中
vim /root/test.sh
完成后保存退出,并执行crontab -e
设置为5分钟执行一次同步脚本
这个时候就完成实时同步文件的步骤了