本文章來給大家介紹linux伺服器 rsync同步設定詳細指南,希望些方法對各位同學會有所協助。
一.介紹 (不想看直接可以跳過)
遷移EMOS伺服器,新伺服器搭建好之後做完了測試,接著很重要的工作就是要完整的把老郵件系統中的郵件資料移轉過來,選擇拷貝的方式自然可以,但是難免會丟失一些郵件(在此期間收到的郵件),於是就考慮到了rsync。
Rsync 是一個遠端資料同步工具,可通過 LAN/WAN 快速同步多台主機間的檔案。 Rsync 本來是用以取代 rcp 的一個工具,它當前由 rsync.samba.org 維護。 Rsync 使用所謂的“ Rsync 演算法 ”來使本地和遠程兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。運行 Rsync server 的機器也叫 backup server ,一個 Rsync server 可同時備份多個 client 的資料;也可以多個 Rsync server 備份一個 client 的資料。
Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 會開啟一個 873 的服務通道 (port) ,等待對方 Rsync 串連。串連時, Rsync server 會檢查口令是否相符,若通過口令查核,則可以開始進行檔案傳輸。第一次連通完成時,會把整份檔案傳輸一次,下一次就只傳送二個檔案之間不同的部份。
Rsync 支援大多數的類 Unix 系統,無論是 Linux 、 Solaris 還是 BSD 上都經過了良好的測試。此外,它在 windows 平台下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS 。
Rsync 的基本特點如下:
1. 可以鏡像儲存整個分類樹和檔案系統;
2. 可以很容易做到保持原來檔案的許可權、時間、軟永久連結等;
3. 無須特殊許可權即可安裝;
4. 最佳化的流程,檔案傳輸效率高;
5. 可以使用 rcp 、 ssh 等方式來傳輸檔案,當然也可以通過直接的 socket 串連;
6. 支援匿名傳輸。
核心演算法介紹:
假定在名為α和β的兩台電腦之間同步相似的檔案 A 與 B ,其中α對檔案 A 擁有訪問權,β對檔案 B 擁有訪問權。並且假定主機α與β之間的網路頻寬很小。那麼 rsync 演算法將通過下面的五個步驟來完成:
1. β將檔案 B 分割成一組不重疊的固定大小為 S 位元組的資料區塊。最後一塊可能會比 S 小。
2. β對每一個分割好的資料區塊執行兩種校正:一種是 32 位的滾動弱校正,另一種是 128 位的 MD4 強校正。
3. β將這些校正結果發給α。
4. α通過搜尋檔案 A 的所有大小為 S 的資料區塊 ( 位移量可以任選,不一定非要是 S 的倍數 ) ,來尋找與檔案 B 的某一塊有著相同的弱校正碼和強校正碼的資料區塊。這項工作可以藉助滾動校正的特性很快完成。
5. α發給β一串指令來組建檔案 A 在β上的備份。這裡的每一條指令要麼是對檔案 B 經擁有某一個資料區塊而不須重傳的證明,要麼是一個資料區塊,這個資料區塊肯定是沒有與檔案 B 的任何一個資料區塊匹配上的。
命令:
rsync 的命令格式可以為以下六種:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
對應於以上六種命令格式, rsync 有六種不同的工作模式:
1) 拷貝本地檔案。當 SRC 和 DES 路徑資訊都不包含有單個冒號 ":" 分隔字元時就啟動這種工作模式。
2) 使用一個遠程 shell 程式 ( 如 rsh 、 ssh) 來實現將本地機器的內容拷貝到遠程機器。當 DST 路徑地址包含單個冒號 ":" 分隔字元時啟動該模式。
3) 使用一個遠程 shell 程式 ( 如 rsh 、 ssh) 來實現將遠程機器的內容拷貝到本地機器。當 SRC 地址路徑包含單個冒號 ":" 分隔字元時啟動該模式。
4) 從遠程 rsync 伺服器中拷貝檔案到本地機。當 SRC 路徑資訊包含 "::" 分隔字元時啟動該模式。
5) 從本地機器拷貝檔案到遠程 rsync 伺服器中。當 DST 路徑資訊包含 "::" 分隔字元時啟動該模式。
6) 列遠程機的檔案清單。這類似於 rsync 傳輸,不過只要在命令中省略掉本地機資訊即可。
一、配置rsync服務端同步資料(rpm包安裝rsync及配置)
[root@mail home]# rpm -qa |grep rsync #檢查系統是否安裝了rsync軟體包
rsync-2.6.8-3.1
[root@mail CentOS]# rpm -ivh rsync-2.6.8-3.1.i386.rpm #如果沒有安裝則手動安裝
[root@test rsync-3.0.4]# vim /etc/xinetd.d/rsync
1 配置rsync server
vi /etc/xinetd.d/rsync
將disable=yes改為no
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
2 配置rsync自動啟動
[root@test etc]# chkconfig rsync on
[root@test etc]# chkconfig rsync --list
rsync on
3 配置rsyncd.conf
[root@test etc]# vim rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path =/home/domains/kidslandchina.com
comment = MailDirectory
auth users = mail
uid = root
gid = root
secrets file = /home/rsync.ps
read only = no
list = no
4 確保etc/services中rsync連接埠號碼正確
[root@test etc]# vim /etc/services
rsync 873/tcp # rsync
rsync 873/udp # rsync
5 配置rsync密碼(在上邊的設定檔中已經寫好路徑)/home/rsync.ps(名字隨便寫,只要和上邊設定檔裡的一致即可),格式(一行一個使用者)
[root@test etc]# vi /home/rsync.ps
Mail:abc123
6 配置rsync密碼檔案許可權
[root@test home]# chown root.root rsync.ps
[root@test home]# chmod 400 rsync.ps
7 啟動配置
[root@test home]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
8 如果xinetd沒有的話,需要安裝一下
[root@test home]# yum -y install xinetd
啟動rsync server
RSYNC服務端啟動的兩種方法
9、啟動rsync服務端(獨立啟動)
[root@test home]# /usr/bin/rsync --daemon
10、啟動rsync服務端 (有xinetd超級進程啟動)
[root@test home]# /etc/init.d/xinetd reload
11 加入rc.local
在各種作業系統中,rc檔案存放位置不盡相同,可以修改使系統啟動時把rsync --daemon載入進去。
[root@test home]# vi /etc/rc.local
/usr/local/rsync –daemon #加入一行
12 檢查rsync是否啟動
[root@test home]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xinetd 4396 root 5u IPv4 633387 TCP *:rsync (LISTEN)
二、配置rsync用戶端同步資料(rpm包安裝rsync及配置)
1 配置三個過程就可以了
1.1 設定密碼檔案
1.2 測試rsync執行指令
1.3 將rsync指令放入工作排程(crontab)
[root@aj1 home]# vi /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it
# allows crc checksumming etc.
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
1.1 配置密碼檔案 (註:為了安全,設定密碼檔案的屬性為:600。rsync.ps的密碼一定要和Rsync Server密碼設定案裡的密碼一樣)
[root@aj1 home]# vi rsync.ps
Abc123
[root@mail home]# chown root.root .rsync.ps # 注意必須給許可權
[root@mail home]# chmod 600 .rsync.ps # 必須修改許可權
1.2 從伺服器上下載檔案
rsync -avz --password-file=/home/rsync.ps mail@10.100.0.175::backup /home/domains/kidslandchina.com/
[root@mail rsync-3.0.4]# rsync -avz --password-file=/home/rsync.ps scihoo@192.168.0.206::backup /home/
從本地上傳到伺服器上去
[root@mail rsync-3.0.4]# rsync -avz --password-file=/home/rsync.ps /home scihoo@192.168.0.206::backup
故障排錯:
1、問題一:rsync: failed to connect to X.X.X.X: No route to host (113)
rsync 傳送備份任務沒成功執行。如下:
rsync: failed to connect to X.X.X.X: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
兩台主機能相互ping通,報錯資訊 卻說 沒有路由到主機!
故障原因:對方沒開機、防火牆阻擋、通過的網路上有防火牆阻擋,都有可能。
解決方案:關閉防火牆,或者把防火牆的tcp udp 的873連接埠開啟,允許rsync通過。
實施方案:
1、防火牆的啟動與停止
# service iptables start / stop
2、允許rsync通過防火牆
為防重啟將規則清除,我將規則直接加到規則設定檔裡邊了(/etc/sysconfig/iptables),如下:
-A INPUT -p tcp -s X.X.X.X --dport 873 -j ACCEPT
注意,這條規則要加在REJECT規則前。
加好後,重啟下 iptables(# service iptables restart)。
2、問題二:@ERROR: auth failed on module backup
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
伺服器端該模組(backup)需要驗證使用者名稱密碼,但用戶端沒有提供正確的使用者名稱密碼,認證失敗。提供正確的使用者名稱密碼解決此問題。
在伺服器端/etc/rsyncd.conf中backup模組中指定的使用者名稱,以及密碼檔案,請檢查/home/rsync.ps檔案密碼