公司里有臺(tái)內(nèi)網(wǎng)的機(jī)器會(huì)每天從阿里云OSS上同步日志文件回來存儲(chǔ)到本地做分析,因?yàn)楸镜氐拇疟P比較小,因此實(shí)際上下載的本地的文件需要先同步到另外一臺(tái)容量更大的、專門用于做存儲(chǔ)的機(jī)器上。為此特意折騰了一下rsync,以便用它來實(shí)現(xiàn)現(xiàn)成的增量文件同步的機(jī)制。在這里記錄一下摸索出來的配置文件,以備不時(shí)之需。
通過命令man rsyncd.conf可以了解到rsync作為daemon模式啟動(dòng)所需要的配置文件的語(yǔ)法,可以理解為就是一個(gè)INI語(yǔ)法的配置文件。我只琢磨了最基本的配置,下面還原一下這個(gè)過程。首先是需要為rsync配置所謂的模塊,可以理解為就是rsync服務(wù)端受到文件后寫入的位置。我設(shè)置了一個(gè)名為log的模塊,配置如下
[log]
path = /app/data/log
comment = App logs
將上述內(nèi)容保存到/etc/rsyncd.conf文件中,就可以啟動(dòng)rsync的服務(wù)端了,命令如下
rsync --daemon
之后在另一臺(tái)機(jī)器上使用rsync向這臺(tái)機(jī)器推送文件時(shí)發(fā)現(xiàn)會(huì)報(bào)錯(cuò),因此再到服務(wù)端配置了一下日志文件,以便查看發(fā)生了什么事情。修改后的配置為
log file = /tmp/rsync.log
max verbosity = 1
[log]
path = /app/data/log
comment = App logs
重新啟動(dòng)后再次推送文件到服務(wù)端,查看/tmp/rsync.log可以發(fā)現(xiàn),是由于log模塊的路徑被設(shè)置為了只讀導(dǎo)致的,因此需要指定一下read only的選項(xiàng),修改后的配置如下
log file = /tmp/rsync.log
max verbosity = 1
[log]
path = /app/data/log
comment = App logs
read only = false
write only = false
再次重啟后嘗試推送文件,還是不行,拋出的是permission denied的錯(cuò)誤。借助于搜索引擎的力量,才知道原來是因?yàn)閞sync默認(rèn)啟動(dòng)的模式下沒有權(quán)限寫入文件導(dǎo)致的,為此需要設(shè)置rsync的gid和uid選項(xiàng),最終結(jié)果如下
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
這樣一來總算是推送成功了。由于要一次性同步一個(gè)目錄,并且還要求在目標(biāo)目錄中重建原來的目錄結(jié)構(gòu),因此最終我在推送端添加了命令行選項(xiàng)-az --relative