【手把手教程】centos服务器之间的文件同步解决方案

概要

  1. 场景介绍

  2. rsync和scp的简单对比

  3. rsync简介

  4. 服务端配置

  5. 客户端配置

  6. 开始同步

  7. 参数

  8. 参考

一、场景介绍

系统:centos系统之间的文件同步

场景需求:在服务器A中,把 /home/rsync/images 路径下所有以bill开头的jpg文件同步到远程服务器B的路径/home/rsync/rsync_demo下。其中文件比较多,而且服务器B中已经同步了一部分文件,如果完全重新同步,可能时间会比较长,希望跳过这些已有文件进行同步。

同步方案:常用的同步工具有scp和rsync,下面先做一个简单对比,然后进行rsync的配置使用。

二、rsync和scp的简单对比

scp:

依赖ssh进行数据传输,默认22端口,一般来说防火墙默认放行,可以直接使用;

认证方式同ssh,需要密码或者密钥(免密);

每次覆盖传输,如果断掉重新传递,已经传递的会重新覆盖传递

rsync:

不依赖ssh,默认873端口,需要在防火墙中打开,如果是云服务器需要在安全组中添加规则;

认证方式有自己的账号密码,也可以通过ssh传输;

如果传输中断,重新同步时会跳过已同步的文件,适合续传、增量备份、大文件等;

三、rsync简介

rsync是用于linux系统下的数据镜像备份工具,远程服务器之间的文件拷贝,尤其是重新同步时会跳过已同步的文件,适合续传、增量备份、大文件等使用场景。

其续传功能基于它的工作原理:

a、客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name->id
(id用来唯一表示文件例如MD5)。

b、客户端将FileList发送到服务器。

c、服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。
 其中根据MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化的文件。

d、客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传输到服务器。

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。这里我们使用rsync-daemon方式:

  • 需要服务器和客户端都安装rsync服务;
  • 服务端需要启动rsync服务,同时配置rsync配置文件和账号密码;
  • 客户端不需要启动rsync服务;

接下来开始配置。这里把服务器A定为客户端,服务器B定为服务端,从客户端往服务端同步文件。

四、服务端配置

4.1 安装

系统默认自带,如果没有通过yum安装。

yum install rsync

4.2 配置文件

vi /etc/rsync.conf

uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = tomcat
secrets file = /etc/rsyncd.passwd
log file = /var/log/rsyncd.log

# 同步模块配置。
[docs]
comment = welcome to docs!
path = /home/rsync/rsync_demo

  • uid/gid: 通过哪个用户启动启动进程,这是指操作系统的用户,跟下面的授权用户是两个概念。可以理解为在哪个系统用户下,去执行读写文件的操作,所以这里主要考虑是否对目标路径/home/rsync/rsync_demo有权限,只要是有权限的用户都行,这里使用了新建的用户rsync。
  • secrets file: 授权用户密码文件。
  • [docs]: 模块名,同步时需要指定此模块,主要是为了指定下面的目标路径path。
  • path: 同步的文件会存储在这个路径下。

4.3 授权用户的密码文件

vi /etc/rsyncd.passwd

user1:123456

user2:888888

每个用户一行,账号密码通过冒号分开。如果多个用户,分成不同行。

这里设置了两个授权用户user1/user2。

4.4 运行服务

systemctl restart rsyncd

systemctl status rsyncd

五、客户端配置

5.1 安装

系统默认自带,如果没有通过yum安装。

yum install rsync

客户端安装完rsync服务后,不需要启动rsync服务,可以直接使用rsync命令进行同步。

接下来我们将使用user1这个用户来进行同步,那么接下来配置相应的密码文件。

5.2 同步用户的密码文件

echo 123456 > /etc/rsyncd_users.db
chmod 600 /etc/rsyncd_users.db

/etc/rsyncd_users.db是客户端的密码文件,它将在示例的同步命令中用到,所以这个文件名字可以随意,比如/etc/rsyncd.pwd,在同步时不要弄错就行。这个密码文件中的密码和服务器上密码文件中的密码对应,这里就是user1的密码:123456。

chmod 600是修改密码文件的权限,类似于ssh的私钥文件一样,基于安全考虑,使用时必须设置。

六、开始同步

for f in /home/rsync/images/bill*.jpg; do rsync -avz --password-file=/etc/rsyncd_users.db "$f" user1@server.rsync.com::docs; done

  • --password-file=/etc/rsyncd_users.db: 指定同步用户对应的密码所在文件。
  •  user1: 指定同步使用的用户,而且跟客户端的密码文件对应。
  • server.rsync.com: 服务器B的地址。
  • docs: 此次同步对应的服务端的模块,表明最终同步到服务端的哪个路径下。

七、参数

常用参数:

-v, –verbose详细模式输出。

-a, –archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。

-z, –compress对备份的文件在传输时进行压缩处理。

–delete:删除那些DST中存在而在SRC中没有的文件。 

所有参数:

-a:–archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r:–recursive 复制所有下面的资料,递归处理。
-p:–perms 保留档案权限,文件原有属性。
-t:–times 保留时间点,文件原有时间。
-g:–group 保留原有属组。
-o:–owner 保留档案所有者(root only)。
-D:–devices 保留device资讯(root only)。
-l:–links 复制所有的连接,拷贝连接文件。
-z:–compress 压缩模式,当资料在传送到目的端进行档案压缩。
-H:–hard-links 保留硬链接文件。
-A:–acls 保留ACL属性文件,需要配合–perms。
-P:--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--version:输出rsync版本。
-v:–verbose 复杂的输出信息。
-u:–update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。
--port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。

--delete:删除那些目标位置有的文件而备份源没有的文件。

--delete-before: 接收者在传输之前进行删除操作

--password-file=FILE :从 指定密码文件中获取密码。
--bwlimit=KBPS:限制 I/O 带宽。
--filter “-filename”:需要过滤的文件。
--exclude=filname:需要过滤的文件。
--progress:显示备份过程。

从参数可以看出,rsync功能还是很强大的,有压缩、续传、过滤等等。 

八、参考

rsync详解

rsync百度百科 

猜你喜欢

转载自blog.csdn.net/tirestay/article/details/130564883