如何配置rsync服务器

公司里有台内网的机器会每天从阿里云OSS上同步日志文件回来存储到本地做分析,因为本地的磁盘比较小,因此实际上下载的本地的文件需要先同步到另外一台容量更大的、专门用于做存储的机器上。为此特意折腾了一下rsync,以便用它来实现现成的增量文件同步的机制。在这里记录一下摸索出来的配置文件,以备不时之需。

通过命令man rsyncd.conf可以了解到rsync作为daemon模式启动所需要的配置文件的语法,可以理解为就是一个INI语法的配置文件。我只琢磨了最基本的配置,下面还原一下这个过程。首先是需要为rsync配置所谓的模块,可以理解为就是rsync服务端受到文件后写入的位置。我设置了一个名为log的模块,配置如下

[log]
    path = /app/data/log
    comment = App logs

将上述内容保存到/etc/rsyncd.conf文件中,就可以启动rsync的服务端了,命令如下

rsync --daemon

之后在另一台机器上使用rsync向这台机器推送文件时发现会报错,因此再到服务端配置了一下日志文件,以便查看发生了什么事情。修改后的配置为

log file = /tmp/rsync.log
max verbosity = 1
[log]
    path = /app/data/log
    comment = App logs

重新启动后再次推送文件到服务端,查看/tmp/rsync.log可以发现,是由于log模块的路径被设置为了只读导致的,因此需要指定一下read only的选项,修改后的配置如下

log file = /tmp/rsync.log
max verbosity = 1
[log]
    path = /app/data/log
    comment = App logs
    read only = false
    write only = false

再次重启后尝试推送文件,还是不行,抛出的是permission denied的错误。借助于搜索引擎的力量,才知道原来是因为rsync默认启动的模式下没有权限写入文件导致的,为此需要设置rsync的giduid选项,最终结果如下

gid = *
log file = /tmp/rsync.log
max verbosity = 1
uid = root
[log]
    path = /app/data/log
    comment = App logs
    read only = false
    write only = false

这样一来总算是推送成功了。由于要一次性同步一个目录,并且还要求在目标目录中重建原来的目录结构,因此最终我在推送端添加了命令行选项-az --relative