一、背景介紹
由於需要和其他系統進行對接。文件的邏輯地址通過接口傳遞,而文件的實體需要通過服務器間的同步進行傳輸。在同事的建議下選擇了rsync。
二、RSYNC介紹
RSYNC 有多種方式進行同步,本篇文章主要敘述的是其中,兩種遠程服務器的同步配置。(在客戶端 注意命令中“:” 冒號的個數)
要了解更多關於rsync的內容,請跳轉到 http://man.linuxde.net/rsync 閱讀相關文檔。
三、實際操作
3.1 確認機器是否安裝rsync
3.2 配置rsync的文件
以下是本次配置中rsyncd.conf的內容:
1 uid = root 2 gid = root 3 use chroot = no 4 max connections = 2000 5 port = 8973 6 timeout = 900 7 log file = /var/run/rsyncd.log 8 pid file = /var/run/rsyncd.pid 9 lock file = /var/run/rsyncd.lock 10 log format = %t%a%m%f%b 11 commemt = rsync 12 list = yes 13 read only = yes 14 write only = no 15 auth users = apprsync 16 secrets file = /etc/rsyncd.secret 17 ignore errors = yes 18 hosts allow = 172.21.5.164 19 20 ###########################之上是全局定義 之下是模塊單獨定義 21 [rsyncvideo] 22 path = /app/nas/video 23 [rsyncimage] 24 path = /app/nas/image 25
3.2.1全局定義(直接配置請跳過本段)
在rsync 服務器中,全局定義有幾個比較關健的,根據我們前面所給的配置文件 rsyncd.conf 文件;
pid file = /var/run/rsyncd.pid 注:告訴進程寫到 /var/run/rsyncd.pid 文件中;
port = 873 注:指定運行端口,默認是873,可以自己指定;本次這里選擇了8973(在之后的客戶端請求會有不一樣的地方)
uid = nobody
gid = nobdoy
注:服務器端傳輸文件時,要發哪個用戶和用戶組來執行,默認是nobody。 如果用nobody 用戶和用戶組,可能遇到權限問題,有些文件從服務器上拉不下來。所以我就偷懶,為了方便,用了root 。不過可以在定義要同步的目錄時定義的模塊中指定用戶來解決權限的問題。
use chroot = yes
注: 安全相關,默認為true,修改為no,增加對目錄文件軟連接的備份
read only = yes
注:read only 是只讀選擇,也就是說,不讓客戶端上傳文件到服務器上。還有一個 write only選項, # no客戶端可下載文件,yes不能下載;
max connections = 5
注:客戶端最多連接數
log file = /var/log/rsync.log
注:rsync 服務器的日志;
log format = %t %a %m %f %b
注 日志格式
timeout = 300
注 超期時間
auth users = apprsync
注 執行數據同步的用戶名,可以設置多個,用英文狀態下逗號隔開(此處是使用模塊同步時使用到的用戶名與ssh不一樣)。
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:可以指定單個IP,也可以指定整個網段,能提高安全性。格式是ip 與ip 之間、ip和網段之間、網段和網段之間要用空格隔開;
3.2.2 局部配置(直接配置請跳過本段)
由於需要同步兩個不同的文件夾,所以在此處配置兩個模塊分別定義為 rsyncvideo 和 rsyncimage,也就是同步圖片和視頻的兩個文件夾分別指向兩個不同的地址。
3.3 創建為模塊同步方式的用戶和密碼
我們在之前配置的時候 寫入了
1 auth users = apprsync 2 secrets file = /etc/rsyncd.secret
因此我們要在 指定的路徑(/etc/rsyncd.secret) 建立一個指定的用戶(apprsync)即可 密碼設置為123456.注意此處 需要把該文件的權限設置為600。
3.4 創建為 ssh同步方式的用戶和密碼
由於我們這篇文章主要是講解實現了兩種同步方式。兩個可以並存和單獨使用。
創建用戶
sudo useradd -d "/home/apprsync" -m -s "/bin/bash" apprsync
設置密碼
passwd apprsync;(敲完這個命令之后兩次輸出)
3.5啟動rsync守護進程,並寫入開機自啟動
設置開機自啟動,寫入到/etc/rc.local里面
vim /etc/rc.local
1 # rsync server progress 2 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
3.6 兩種不同的客戶端同步命令
3.6.1使用模塊同步
同步模塊rsyncimage中的內容
在之前配置的
hosts allow = 172.21.5.164 這台目標機器中
輸入命令 rsync -avz --delete --port 8973 apprsync@172.21.5.163::rsyncimage /usr/local/image
同步模塊rsyncvideo中的內容 ,與上面相似
3.6.2 使用SSH同步
在之前配置的
hosts allow = 172.21.5.164 這台目標機器中
輸入命令
rsync -avz --delete apprsync@172.21.5.163:/app/nas/video /usr/local/test
注意 此處並沒有指定端口 同時少了一個冒號 並且指定了想要同步的目標地址
其中中間一次是我弄出一個錯誤 在模塊同步的時候輸入了ssh用戶的密碼 所以導致了認證失敗。
由此,兩種方式的同步就到此完畢。
四、可能遇到的問題
請不要把兩種同步方式弄混了。主要是認證與路徑的問題。
路徑最后要注意不要有空格,否則會導致找不到對應的路徑。