一、Rsync服務簡介html
1. 什麼是Rsynclinux
它是一個遠程數據同步工具,它在同步文件的同時,可經過LAN/WAN快速同步多臺主機間的文件。Rsync使用所謂的「rsync算法」來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不一樣部分,而不是每次都整份傳送,所以速度至關快。能夠保持原來文件的權限、時間、軟硬連接等附加信息。git
2. Rsync的特性github
(1)能夠鏡像保存整個目錄樹和文件系統;算法
(2)容易作到保存原有的權限,owner、group、時間(修改時間 modify time)、軟硬連接等;shell
(3)傳輸效率高,使用同步算法,只比較變化的部分;vim
(4)支持匿名傳輸,方便網站鏡像管理。數組
2、Rsync配置使用安全
1. 安裝rsync軟件bash
# yum -y install rsync --安裝rsync |
2. 配置文件
rsync的主要有如下三個配置文件,後面兩個文件默認不存在,請手動建立它。
(1)rsyncd.conf(主配置文件)
(2)rsyncd.secrets(密碼文件)
(3)rsyncd.motd(rsync服務器信息)
3. Rsync選項
4. Rsync的普通用法
# rsync -av /test/ /backup --本機上的同步,把/test目錄下的內容同步到/backup目錄下(包括隱藏文件) # rsync -av /test/ 192.168.1.20:/backup --把本地的/test目錄內容,同步到遠端191.168.1.10的/backup目錄下 # rsync -av 192.168.1.20:/backup/ /backup/ --把遠端192.168.1.20的/backup目錄下的內容同步到本地的/backup目錄 (注意:路徑寫法的區別!原目錄後面加不加/也影響你的同步目錄;沒加/,就是將目錄自己同步過去;目錄加/,就是將目錄裏的內容同步過去!) # rsync -av /home --exclude=abc /backup --將/home目錄下除了abc其餘內容都同步到/backup目錄下 # rsync -a --delete /backup/ /test/ --若是同步後,源主機中有文件刪除了,這時要想目標主機與源主機的內容保持一致,可使用--delete參數進行同步 |
Rsync自己不具有控制功能和日誌記錄功能,須要把Rsync作成服務的形式,並加上一些控制功能或日誌記錄功能。
3、CentOS下的Rsync服務
1. 系統環境
系統平臺: CentOS 7.3
Rsync Server: 192.168.1.88
Rsync Client: 192.168.1.20
關閉防火牆
# systemctl stop firewalld --臨時關閉防火牆 # systemctl disable firewalld --永久關閉防火牆 |
關閉selinux
臨時關閉:
# setenforce 0 |
永久關閉:
# vim /etc/selinux/config SELINUX=disabled --將enforcing改成disabled
# reboot --重啓系統永久生效 |
2. 搭建Rsync服務
服務器的操做
(1)設置配置文件
# mkdir /data --建立同步目錄 # vim /etc/rsyncd.conf --文件最後添加一下內容 |
# vim /etc/rsyncd.welcome --手動創建本身定義的motd文件,並寫上自定義的歡迎信息 |
(2)啓動服務
# systemctl restart rsyncd.service --從新啓動rsync服務 # netstat -ntlp | grep rsync --查看監聽rsync服務的端口 # lsof -i:873 --rsync的端口爲873 |
客戶端的操做
# rsync -v 192.168.1.88:: --查看rsync服務器同步路徑名(注意服務器ip後面有兩個冒號) |
# mkdir /databak --建立存放同步內容的目錄 # rsync -a 192.168.1.88::test /databak --這樣同步,是不須要密碼的;注意test爲共享路徑名稱,語法上在該名稱前面有兩個「:」 |
沒有密碼有好處也有壞處,好處是不須要密碼方便寫腳本作遠程同步。若是要密碼寫腳本就要用到expect自動應答。壞處就是不安全,但你可使用iptables等來增強安全。
若是你但願有密碼,也不用傳密碼的話,能夠用rsyncd自己自帶的secrets file(密碼文件)來作:
(secrets file = /etc/rsyncd.secrets)
若是同步報permission denied這種錯誤,多是服務端防火牆或selinux沒有關閉。
Rsync和Xinetd比較
rsyncd | xinetd | |
把日誌記錄到/var/log/rsyncd.log | log file | log_type |
共享模塊要求隱藏(也就是說客戶端查看不到這個模塊名(test)) | list | list |
同時只能1個客戶端鏈接進行同步這個module(notes) | max connections | instances |
只能容許192.168.1.207(ip自定義)同步這個module | hosts allow | only_from |
只能早上9點到下午5點同步 | access_times | access_times |
# vim /etc/rsyncd.conf |
# systemctl restart rsyncd.service --從新啓動rsync服務 |
用xinetd託管rsync服務(CentOS 7.3 Xinetd服務的安裝與配置)
# vim /etc/xinetd.d/rsync --這個文件須要本身建立,下面這個是基礎配置,須要加其餘功能能夠再添加參數 |
# systemctl restart xinetd.service --從新啓動xinetd服務 |
到此,rsync服務就被xinetd託管了。
4、Rsync + Inotify實時同步搭建
Rsync實時同步,是以Inotify工具實現的,Inotify是監聽工具。
Inotify是一種基於內核的文件變化通知機制,用於監控文件系統時間,如文件存取、刪除、移動、修改等。
1. 下載inotify源碼包並編譯安裝
包名稱:inotify-tools-3.14.tar.gz
下載網址:https://github.com/rvoicilas/inotify-tools/wiki
或 https://sourceforge.net/projects/inotify-tools/files/latest/download
網絡下載:
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar xf ./inotify-tools-3.14.tar.gz -C /usr/src/ --解壓 # cd /usr/src/inotify-tools-3.14/ --cd到解壓的路徑裏 # ./configure --配置源碼包 # make --編譯源碼包 # make install --安裝源碼包 |
安裝成功後,會有如下兩條命令
# /usr/local/bin/inotifywait --咱們使用就是這條命令 # /usr/local/bin/inotifywatch |
2. 查看命令參數
# /usr/local/bin/inotifywait -help --查看命令的幫助文件,有些參數可用 |
經常使用的參數爲4個:
事務又分爲如下參數:
3. Rsync本地實時同步
準備工做:
1臺服務器,兩個目錄,用於同步,1個爲源(/test),1個爲目標(/testbak)
# mkdir /test --建立/test目錄爲源,用於監聽 # mkdir /testbak --建立/testbak目錄爲目標,用於將/test目錄內容同步到/testbak # vim /tmp/rsync.sh --寫一個監聽腳本 |
啓動腳本,實現rsync實時同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式執行腳本,並放到後臺執行 # jobs –l --查看在後臺運行的任務 |
注意:
若是要停止後臺執行的任務,執行 kill -9 %x,-9爲強制殺死,x爲jobs任務號
若是執行 jobs -l 沒有內容顯示出來,則在 vim nohup.out 查看是否報錯
測試
打開兩個終端,一個在監聽的目錄裏建立文件,另外一個運行監聽日誌
# mkdir /test/abc --在監聽的目錄裏建立abc目錄
# tail -f /var/log/rsync.log --監聽日誌(只有當/test目錄的內容有改變時,日誌纔會有信息)
# ll /testbak --查看abc目錄是否有同步到/testbak目錄下 |
4. Rsync遠程實時同步(三種方法)
準備兩臺虛擬機,一臺做爲本機(服務器),另外一臺做爲遠程機(客戶端),兩臺虛擬機IP要能互相ping通
方法一:使用ssh建立密鑰的方法
建立ssh遠程登錄自動密碼,實現無需輸入密碼便可登錄
# cd --切換到用戶家目錄 # ssh-keygen --執行該命令後,一直回車,會自動生成兩個密鑰文件
# ll /root/.ssh/ --兩個密鑰文件目錄 id_rsa --本地密鑰 id_rsa.pub --公共密鑰 |
把公共密鑰id_rsa.pub複製給須要遠程登錄的機子(即目標機)並更名爲authorized_keys
# scp /root/.ssh/id_rsa.pub 192.168.1.20:/root/.ssh/authorized_keys # ssh 192.168.1.20 --驗證是否還須要輸入密碼,不須要輸入密碼就能夠登錄說明密鑰設置成功 # exit --退出遠程登錄 |
# vim /tmp/rsync_key.sh --寫一個監聽腳本 |
啓動腳本,實現rsync實時同步
# nohup sh -x /tmp/rsync_key.sh & --使用nohup方式執行腳本,並放到後臺執行 # jobs –l --查看在後臺運行的任務 |
注意:
若是要停止後臺執行的任務,執行 kill -9 %x,-9爲強制殺死,x爲jobs任務號
若是執行 jobs -l 沒有內容顯示出來,則在 vim nohup.out 查看是否報錯
測試
服務器上建立文件或者目錄,而後在客戶端進行查看 ls /testbak 目錄是否有同步。並查看服務器 cat /var/log/rsync.log 是否有同步成功信息。
方法二:使用expect自動應答的方法
用腳本的expect(TCL;tool command language 工具命令語言,是一種腳本語言)自動應答來處理遠程鏈接時要輸入的密碼問題
修改腳本,而後把先前的腳本進程都 kill 掉,從新執行,從新驗證(若是沒有作方法二步驟,可不用執行kill)
# yum -y install expect --安裝expect # mkdir /test --建立/test目錄 |
# vim /tmp/rsync.sh --寫一個監聽腳本 |
啓動腳本,實現rsync實時同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式執行腳本,並放到後臺執行 # jobs –l --查看在後臺運行的任務 |
注意:
若是要停止後臺執行的任務,執行 kill -9 %x,-9爲強制殺死,x爲jobs任務號
若是執行 jobs -l 沒有內容顯示出來,則在 vim nohup.out 查看是否報錯
測試
服務器上建立文件或者目錄,而後在客戶端進行查看 ls /testbak 目錄是否有同步。並查看服務器 cat /var/log/rsync.log 是否有同步成功信息。
方法三:使用secrets file的方法
準備兩臺虛擬機,1臺做爲rsync服務器,另外一臺做爲客戶端。
需求:將服務器/localtest目錄內容同步到客戶端上/test目錄裏
服務器:192.168.1.88
客戶機:192.168.1.20
1)客戶端上操做
# mkdir /test --建立/test目錄用來同步服務器中/localtest目錄中的內容 |
客戶端上搭建rsync服務
# vim /etc/rsyncd.conf --文件最後添加如下內容 |
# vim /etc/rsyncd.secrets --建立客戶機訪問時驗證賬號密碼的文件,並寫上賬號和密碼 test:123456 --test爲賬號:後面爲密碼
# chmod 600 /etc/rsyncd.secrets --把密碼文件改成600權限
# systemctl restart rsyncd.service --重啓服務 # systemctl enable rsyncd.service --設爲開機自啓動 |
2)服務器上操做
# mkdir /localtest --建立/localtest文件夾爲源,用於同步給客戶端的/test |
# vim /tmp/rsync.sh --寫一個監聽腳本 |
# chmod 757 /tmp/rsync.sh --安裝tcp_wrappers # vim /etc/rsync.passwd --建立密碼文件 123456
# chmod 600 /etc/rsync.passwd --把密碼文件改爲600權限 |
啓動腳本,實現rsync實時同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式執行腳本,並放到後臺執行 # jobs -l --查看在後臺運行的任務 |
注意:
若是要停止後臺執行的任務,執行 kill -9 %x,-9爲強制殺死,x爲jobs任務號
若是執行 jobs -l 沒有內容顯示出來,則在 vim nohup.out 查看是否報錯
測試
服務器上操做:
# tail -f /var/log/rsync.log --在監聽的文件夾裏建立test.txt文件夾 # touch /localtest/test.txt --來到客戶機上查看/test文件是否有同步過去 |
客戶機上操做:
# ll /test |
若是你想搭建雙向數據實時同步,反過來作一遍就OK了。