特性如下:
可以鏡像保存整個目錄樹和文件系統。
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
無須特殊權限即可安裝。
優化的流程,文件傳輸效率高。
可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
支持匿名傳輸,以方便進行網站鏡象。
RSYNC主頁:
http://rsync.samba.org/
下載安裝
centos默認就已經安裝,運行文件在/usr/bin/rsync,但版本是3.0.8,如果不升級也可以用。
# wget wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
# tar zxvf rsync-3.1.2.tar.gz
# cd rsync-3.1.2
# ./configure --prefix=/usr/local/rsync
# make
# make install
rsync的服務器端和客戶端是同一個文件,根據參數的不同,實現不同的角色功能。
配置服務器端:
配置定義
此文件原本是沒有的,編輯同時創建 啟動配置文件
#vi /etc/rsyncd.conf
uid = root //運行RSYNC守護進程的用戶
gid = root //運行RSYNC守護進程的組
use chroot = no //不使用chroot
max connections = 4 // 最大連接數為4
strict modes =yes //是否檢查口令文件的權限
port = 1873 //默認端口,最好大於1024
motd file = /etc/rsyncd.motd //歡迎信息文件,可有可無
[backup] //這裡是認證的模塊名,在client端需要指定
path = /home/backup/ //需要做鏡像的目錄,不可缺少!
comment = This is a test //這個模塊的注釋信息
ignore errors //可以忽略一些無關的IO錯誤
read only = yes // 只讀,也就是客戶端不允許上傳
list = no //不允許列文件
auth users = username //認證的用戶名,如果沒有這行則表明是匿名,此用戶與系統無關
secrets file = /etc/rsyncd.pwd //密碼和用戶名對比表,密碼文件自己生成
hosts allow = 192.168.1.1,10.10.10.10 //允許主機
hosts deny = 0.0.0.0/0 //禁止主機
#transfer logging = yes
exclude = beinan/ samba/ //要排除的目錄或文件,空格分開
pid file = /var/run/rsyncd.pid //pid文件的存放位置
lock file = /var/run/rsync.lock //鎖文件的存放位置
log file = /var/log/rsyncd.log //日志記錄文件的存放位置
[可以有多個塊]
詳細:http://www.cnblogs.com/mchina/p/2829944.html
密碼表文件
文件名即為上面secrets file的指定文件,格式:【賬號:密碼】,即:一行一個用戶
#vi /etc/rsyncd.pwd
chat:123456
backup:234567
權限:因為rsync.pas存儲了rsync服務的用戶名和密碼,所以非常重要。要將rsync.pas設置為root擁有, 且權限為600。
#chown root:root /etc/rsyncd.pas
#chmod 600 /etc/rsyncd.pas
歡迎信息
若啟用motd file,則此項才有效,可有可無。
# vi /etc/rsyncd.motd
Welcome to use the rsync services!
命令腳本啟動
獨立運行:如果項目負荷大,可以用這種方式,可以把啟動腳本放到/etc/rc.local隨機啟動 啟動:
# rsync --daemon
如果啟動配置文件不在etc下,需指定config位置
# rsync --daemon --config=/etc/rsyncd.conf
重啟動
[root@memrel ~]# ps -ef|grep rsync
root 3365 1 0 18:28 ? 00:00:00 rsync --daemon --config=/etc/rsyncd.conf
root 3367 3127 0 18:29 pts/0 00:00:00 grep rsync
# 3365是進程ID,或直接看PID文件,效果一樣
[root@memrel ~]# cat /tmp/rsyncd.pid
3365
[root@memrel ~]# kill 3365
[root@memrel ~]# rsync --daemon --config=/etc/rsyncd.conf
[root@memrel ~]# netstat -a | grep rsync #查看是否運行
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
用xinetd啟動:
適合於項目不大負荷不重,依附於xinetd可以占用更少的系統資源 設定服務和對應端口號
#nano -w /etc/services
往下走,可以找到:這一般不需要動,當然,如果你很想換個端口,也是可以的
rsync 873/tcp # rsync
rsync 873/udp # rsync
然後編輯xinetd文件, 把原來的YES改成NO
# whereis rsync #確定rsync位置
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
#vi /etc/xinetd.d/rsync
service rsync
{
disable = no #這原來是Yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
主要是要打開rsync的daemon, 一旦有rsync client要連接, xinetd會把它轉介到 rsyncd(port 873)。
然後
# chkconfig rsync on #加入xinetd
# service xinetd restart #重啟
# netstat -an | grep 873 #查看873端口是否在監聽
如果xinetd不存在,則安裝一下:yum -y install xinetd
配置客戶端:
設置密碼
#vi /etc/rsync.pwd
123456
修改權限
#chown root:root /etc/rsync.pwd
#chmod 600 /etc/rsync.pwd
連接服務器同步文件
從SERVER端取文件
/usr/bin/rsync -vzrtopg --progress --password-file=/etc/rsync.pwd --delete [email protected]::chat /home/chat
向SERVER端上傳文件
/usr/bin/rsync -vzrtopg --progress --password-file=/root/rsync.pwd /home/chat [email protected]::chat
注意:如果路徑結束後面帶有”/”,表示操作該目錄下的文件,但不會創建該目錄,如不帶”/”則創建該目錄。 連接服務器端說明:
[email protected]::chat
【userName】是前面服務器端密碼表中的用戶名
【192.168.1.11】就是服務器端IP地址了
【chat】是服務器端啟動配置中的塊
制作腳本文件自動運行
vi /usr/local/rsync/time.sh //制作腳本文件
#!/bin/bash
/usr/bin/rsync -vzrtopg --progress --delete [email protected]::chat /home/chat --password-file=/etc/rsync.pwd
crontab -e
55 * * * * /usr/local/rsync/time.sh //每55分運行一次time.sh腳本文件
注意:實際生產環境中,代碼同步基本都是發生在代碼有變更後,所以一般都是手動同步,代碼如果沒更新,也就沒必要同步。
rsync命令參數
-v 表示verbose詳細顯示
-z 啟用壓縮傳輸
-r 表示recursive遞歸
-t 保持原文件創建時間
-o 保持原文件屬主
-p 保持原文件的參數
-g 保持原文件的所屬組
-a 存檔模式
-P 代替-partial和-progress兩者的選項功能
-e ssh建立起加密的連接。
--partial 阻止rsync在傳輸中斷時刪除已拷貝的部分(如果在拷貝文件的過程中,傳輸被中斷,rsync的默認操作是撤消前操作,即從目標機上
刪除已拷貝的部分文件。)
--progress 顯示出詳細的進度情況
--delete 如果服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致。
--exclude 不包含/ins目錄
--size-only 這個參數用在兩個文件夾中的差別僅是源文件夾中有一些新文件,不存在重名且被修改過的文件,因為這種文件有可能會因為內容被修改可大小一樣,而被略過。這個參數可以大大地提高同步的效率,因為它不需要檢查同名文件的內容是否相同。
--password-file 指定密碼文件,內容包含server端指定認證用戶的密碼。
以上單字母參數可以合並,如:-vzrtopg
完整配置實例
服務器端:
配置文件
# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /tmp/rsyncd.pid
lock file = /tmp/rsync.lock
log file = /tmp/rsyncd.log
[chat]
path = /home/web/chat/
ignore errors
read only = false
list = false
hosts allow = 192.168.1.13
hosts deny = 0.0.0.0
auth users = backup
secrets file = /etc/rsyncd.pwd
密碼表文件
# vim /etc/rsyncd.pwd
userName:123456
密碼表文件權限
# chown root.root /etc/rsyncd.pwd
# chmod 600 /etc/rsyncd.pwd
客戶端
編輯密碼文件
# vim /etc/rsync.pwd
123456
# chown root:root /etc/rsync.pwd
# chmod 600 /etc/rsync.pwd
從服務器同步文件
# rsync -vzrtopg --progress --delete --password-file=/etc/rsync.pwd [email protected]::chat /home/chat
服務器端配置文件參數
全局參數
在文件中 [module] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該參數的值就是所有模塊的默認值。
參數
說明
默認值
address
在獨立運行時,用於指定的服務器運行的 IP 地址。由 xinetd 運行時將忽略此參數,使用命令行上的 –address 選項替代。
本地所有IP
port
指定 rsync 守護進程監聽的端口號。 由 xinetd 運行時將忽略此參數,使用命令行上的–port 選項替代。
873
motd file
指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶。
無
pid file
rsync 的守護進程將其 PID 寫入指定的文件。
無
log file
指定 rsync 守護進程的日志文件,而不將日志發送給 syslog。
無
syslog facility
指定 rsync 發送日志消息給 syslog 時的消息級別。
daemon
socket options
指定自定義 TCP 選項。
無
模塊參數
模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的。可以根據自己的需要,來指定多個模塊,模塊中可以定義以下參數:
基本模塊參數
參數
說明
默認值
path
指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的。
無
comment
給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。
無
模塊控制參數
參數
說明
默認值
use chroot
若為 true,則 rsync 在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要 root 權限,並且不能備份指向 path 外部的符號連接所指向的目錄文件。
true
uid
指定該模塊以指定的 UID 傳輸文件。
nobody
gid
指定該模塊以指定的 GID 傳輸文件。
nobody
max connections
指定該模塊的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。
0(沒有限制)
lock file
指定支持 max connections 參數的鎖文件。
/var/run/rsyncd.lock
list
指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。如果設置該選項為 false,可以創建隱藏的模塊。
true
read only
指定是否允許客戶上傳文件。若為 true 則不允許上傳;若為 false 並且服務器目錄也具有讀寫權限則允許上傳。
true
write only
指定是否允許客戶下載文件。若為 true 則不允許下載;若為 false 並且服務器目錄也具有讀權限則允許下載。
false
ignore errors
指定在 rsync 服務器上運行 delete 操作時是否忽略 I/O 錯誤。一般來說 rsync 在出現 I/O 錯誤時將將跳過 –delete 操作,以防止因為暫時的資源不足或其它 I/O 錯誤導致的嚴重問題。
true
ignore nonreadable
指定 rysnc 服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些不應該被備份者獲得的文件時是有意義的。
false
timeout
該選項可以覆蓋客戶指定的 IP 超時時間。從而確保 rsync 服務器不會永遠等待一個崩潰的客戶端。對於匿名 rsync 服務器來說,理想的數字是 600(單位為秒)。
0 (未限制)
dont compress
用來指定那些在傳輸之前不進行壓縮處理的文件。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名,而不能是簡稱。當發生拒絕某個選項的情況時,服務器將報告錯誤信息然後退出。例如,要防止使用壓縮,應該是:”dont compress = *”。
.gz .tgz .zip .z .rpm .deb .iso .bz2 *.tbz
模塊文件篩選參數
參數
說明
默認值
exclude
指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式。
空
exclude from
指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義。
空
include
指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 。
空
include from
指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義。
空
- 一個模塊只能指定一個exclude 參數、一個include 參數。
- 結合 include 和 exclude 可以定義復雜的exclude/include 規則 。
- 這幾個參數分別與相應的rsync 客戶命令選項等價,唯一不同的是它們作用在服務器端。
模塊用戶認證參數
參數
說明
默認值
auth users
指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裡的用戶和系統用戶沒有任何關系。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。
(匿名方式)
secrets file
指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用。
空
strict modes
指定是否監測口令文件的權限。若為 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。
true
- rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器。
- rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式為: username:passwd
- 一般來說口令最好不要超過8個字符。若只配置匿名訪問的 rsync 服務器,則無需設置上述參數。
模塊訪問控制參數
參數
說明
默認值
hosts allow
用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕。
*
hosts deny
用一個主機列表指定哪些主機客戶不允許連接該模塊。
空
客戶主機列表定義可以是以下形式:
單個IP地址。例如:192.168.0.1
整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
可解析的單個主機名。例如:centos,centos.bsmart.cn
域內的所有主機。例如:*.bsmart.cn
“*”則表示所有。
多個列表項要用空格間隔。
模塊日志參數
參數
說明
默認值
transfer logging
使 rsync 服務器將傳輸操作記錄到傳輸日志文件。
false
log format
指定傳輸日志文件的字段。
”%o %h [%a] %m (%u) %f %l”
設置了”log file”參數時,在日志每行的開始會添加”%t [%p]“。
可以使用的日志格式定義符如下所示:
%a - 遠程IP地址
%h - 遠程主機名
%l - 文件長度字符數
%p - 該次 rsync 會話的 PID
%o - 操作類型:”send” 或 “recv”
%f - 文件名
%P - 模塊路徑
%m - 模塊名
%t - 當前時間
%u - 認證的用戶名(匿名時是 null)
%b - 實際傳輸的字節數
%c - 當發送文件時,記錄該文件的校驗碼