rsync解决了我的哪些问题?
在以往工作中,进行文件迁移时,如果文件当前所在服务器S与迁移目标服务器C不在同一网络下,我会直接在Xftp上进行拖拽。由于S服务器与C服务器网络不通,Xftp首先会将文件从服务器S传输至本地,再从本地上传至目标服务器C。这不仅会占用本地电脑大量的存储空间,本地电脑也不能关机或者断网,否则传输都会中断,此外由于本地电脑空间的限制,只能将文件拆分后进行批量上传,否则将直接把本地电脑空间沾满。
使用rsync后,文件不再需要从本地走一遍,而且直接从S端传输到C端,节省了工作量以及传输时间。
使用rsync的前提
文件当前所在服务器S与迁移目标服务器C在同一网络下,或者目标服务器C所在的网络有一台可以访问公网的服务器C0。
我这里是第二种情况,所以本篇文章只讲述如何通过中间公网服务器C0的nginx转发进行rsync文件同步。如果文件当前所在服务器S与迁移目标服务器C在同一网络下,可以直接略过Nginx配置的那一段。
rsync的下载
在文件当前所在服务器S与迁移目标服务器C中下载rsync。
yum install -y rsync
rsync的配置
1、在迁移目标服务器C中配置rsync
vim /etc/rsyncd.conf
具体配置如下:
uid = nobody
gid = nobody
port = 10061 #rsync的端口,默认873
use chroot = yes
max connections = 20
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup_prod_app] #模块名称,有多个客户端时就复制整个模块
path = /data/历史数据/basehistory/ #将文件同步到目标服务器C的哪个文件夹
comment = backup app files
ignore errrors
read only=no
write only=no
hosts allow=*
hosts deny=*
list=false
uid=root
gid=root
auth users=rsync_user #同步用户名
secrets file=/etc/rsync.pwd #rsync密码的文件名和位置
2、创建用户和组
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync_user #组名在前,用户名在后
3、创建认证用户和密码文件并修改权限
echo "rsync_user:123456" >/etc/rsync.pwd #录入用户名和密码创建密码文件
chmod 600 /etc/rsync.pwd #修改权限
4、创建同步目录并授予权限
mkdir /data/历史数据/basehistory/
chown -R rsync_user:rsync /data/历史数据/basehistory/ #用户名在前,组名在后
5、开放10061端口
firewall-cmd --add-port=10061/tcp --permanent --zone=public
firewall-cmd --reload
6、启动rsync
systemctl start rsyncd #启动
# systemctl restart rsyncd #重启
systemctl enable rsyncd #开机启动
7、验证rsync是否启动
netstat -anlpt | grep rsync
8、在S服务器下创建用户(组)
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync_user #组在前,名在后
9、在S服务器下配置密码文件
echo "123456" > /etc/rsync.pwd #由于我们要在同步命令里指定用户名,所以这里不指定用户名,指定密码就行,密码注意和上面的密码要一致
chmod 600 /etc/rsync.pwd
nginx的配置
在和C同一网络下的C0上安装nginx,并在tcp模块(stream)下进行下面的配置,然后重启nginx
upstream rsync {
server 192.168.30.20:10061;
}server{
listen 10061;
proxy_pass rsync;
}
文件推送
执行以下命令进行文件推送和验证
rsync -av --port=10061 /data/basehistory/ rsync_user@111.2.224.6::backup_prod_app --password-file=/etc/rsync.pwd
这里的/data/basehistory/代表需要同步的文件在S服务器的位置。
参考文章
Centos7.x部署使用rsync和lsyncd实现文件的实时同步/备份
原文中有更多关于rsync的介绍,以及利用lsync进行实时差异文件同步,可以前去参考。
原文有一处错误,配置的密码文件/etc/rsync.pwd文件前后不一致,会导致同步时报错。