CentOS 7 rsync
1)軟件簡介
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 的基本特點如下:
可以鏡像保存整個目錄樹和文件系統;
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;
無須特殊權限即可安裝;
優化的流程,文件傳輸效率高;
可以使用 rcp、ssh 等方式來傳輸文件,當然也可以通過直接的 socket 連接;
支持匿名傳輸。
2)核心算法
假定在名為 α 和 β 的兩台計算機之間同步相似的文件 A 與 B,其中 α 對文件A擁有訪問權,β 對文件 B 擁有訪問權。並且假定主機 α 與 β 之間的網絡帶寬很小。那么 Rsync 算法將通過下面的五個步驟來完成:
β 將文件 B 分割成一組不重疊的固定大小為 S 字節的數據塊。最后一塊可能會比 S 小。
β 對每一個分割好的數據塊執行兩種校驗:一種是32位的滾動弱校驗,另一種是128位的 MD4 強校驗。
β 將這些校驗結果發給 α。
α 通過搜索文件 A 的所有大小為 S 的數據塊(偏移量可以任選,不一定非要是 S 的倍數),來尋找與文件B 的某一塊有着相同的弱校驗碼和強校驗碼的數據塊。這項工作可以借助滾動校驗的特性很快完成。
α 發給 β 一串指令來生成文件 A 在 β 上的備份。這里的每一條指令要么是對文件 B 經擁有某一個數據塊而不須重傳的證明,要么是一個數據塊,這個數據塊肯定是沒有與文件 B 的任何一個數據塊匹配上的。
3)配置管理
1 關閉selinux
臨時關閉 setenforce 0
永久關閉 $vi /etc/sysconfig/selinux
SELINUX=disabled
2 安裝rsync 系統自帶
開機啟動 systemctl enable rsyncd
3 配置服務端
$ vi /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid = root gid = root use chroot = no max connections = 2 strict modes = yes port = 873 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [hadoop] path = /opt/hadoop/etc/hadoop/ # 數據存放位置 comment = HADOOP read only = yes list = no auth users = hadoop #與系統用戶無關 secrets file = /etc/rsyncd.secret #hosts allow = 192.168.6.1 #設置允許訪問的客戶端多個客戶端用空格隔開 #hosts deny = * #設置不允許訪問的黑名單 [zookeeper] #這里相當於一個區分符,如果要同步多個文件夾就在這里區分 path = /opt/zookeeper/conf #數據存放位置 comment = ZOOKEEPER auth users = hadoop secrets file = /etc/rsyncd.secrets #存放rsync密碼的文件 read only = no list = no
配置rsync密碼(在上邊的配置文件中已經寫好路徑)/etc/rsyncd.secrets(名字隨便寫,只要和上邊配置文件里的一致即可),格式(一行一個用戶)
$ vi /etc/rsyncd.secrets
hadoop:hadoop # 用戶:密碼
hadoop1:hadoop1
配置rsync密碼文件權限
chown root.root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
4 啟動 驗證
$ systemctl start rsyncd
$ netstat -apn | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2688/rsync
tcp6 0 0 :::873 :::* LISTEN 2688/rsync
5 客戶端配置
1 配置三個過程就可以了
1.1 設定密碼文件
1.2 測試rsync執行指令
1.3 將rsync指令放入周期任務(crontab)
設定密碼文件
$ vi /etc/rsyncd.secrets
hadoop #這里只需要寫密碼
$ chown root:root /etc/rsyncd.secrets # 注意必須給權限
$ chmod 600 /etc/rsyncd.secrets # 必須修改權限
測試rsync執行指令
上傳 rsync -avz --password-file=/etc/rsyncd.secrets /opt/hadoop/etc/hadoo hadoop@namenode::hadoop
下載 rsync -avz --progress --delete --password-file=/etc/rsyncd.secrets hadoop@namenode::hadoop /opt/hadoop/etc/hadoop
rsync的參數的說明:
-a 相當於 -rlptgoD 的集合
-u 等同於 –update,在目標文件比源文件新的情況下不更新
-v 顯示同步的文件
–progress 顯示文件同步時的百分比進度、傳輸速率
--delete 如果源目標系統中不存在 , 同步系統中的文件將被刪除
將rsync指令放入周期任務(crontab)