CentOS下rsync服務器安裝與配置-數據同步|文件增量備份
編輯:狂族晨曦 來源:系統運維,經驗雜筆 日期:2016-08-05 閱讀: 3,450 次 4 條評論 » 百度已收錄
我們在使用服務器發布我們的網站或者生產環境中部署業務的時候,通常要考慮到文件的備份,而文件的備份比較高效的備份是增量備份,rsync軟件就是這樣的一個工具。
為了實現多個服務器負載均衡,我們需要這幾個服務器之間進行數據同步,而rsync軟件也能勝任,下面先森來介紹如何架設rsync服務器來達到文件增量備份和數據同步的功能。

Rsync同步
什么是rsync
Rsync(remote synchronize)是一個遠程文件同步工具;Rsync使用“Rsync算法”來同步文件,該算法只傳送兩個文件的不同部分,因此速度相當快;
Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf文件的格式類似于samba的主配置文件;
Rsync可通過rsh或ssh使用,也能以daemon模式運行,以daemon方式運行時,Rsync Server會打開一個873端口等待客戶端連接.連接時,Rsync Server會檢查口令是否相符,若口令相符,則進行文件傳輸.第一次會把整份文件傳輸一次,以后則為增量傳輸;
Rsync支持大多數的類Unix系統(Linux、Solaris、BSD等);此外,在windows平臺也有相應的版本,如cwRsync和Sync2NAS等工具。
環境準備
既然是同步,首先我們需要準備的是兩臺服務器。先森準備的是虛擬機上的兩臺裝好CentOS 6.8的服務器。
為了方便,我們稱其中主要使用的、產生數據的一臺為服務端。用于備份數據的那臺稱為客戶端。
兩臺服務器都需要安裝rsync。
rsyncf服務端
rsync的安裝
rsync有很多種安裝方式,最簡單的是yum安裝,復雜一點的是編譯安裝,還有先森選擇的是rpm包安裝。
先森rsync版本是的rsync-3.0.9-2.el6.rfx.x86_64.rpm,直接安裝即可。
rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm
rsync的啟動
方法一:CentOS 默認以 xinetd 方式運行 rsync 服務。
所以選擇這種方式啟動還需要安裝超級守護進程xinetd。
yum install -y xinetd
rsync 的 xinetd 配置文件在 /etc/xinetd.d/rsync。
編輯rsync的xinetd配置文件/etc/xinetd.d/rsync文件,修改參數
server_args = --daemon --config=/etc/rsyncd/rsyncd.conf
可以配置rsync服務器啟動時的參數。(一般不需要)
要配置以 xinetd 運行的 rsync 服務需要執行如下的命令:
chkconfig rsync on service xinetd restart
方法二:獨立運行 rsync 服務
最簡單的獨立運行 rsync 服務的方法是執行如下的命令:
/usr/bin/rsync --daemon
#編輯 /etc/rc.local文件 加入
/usr/bin/rsync --daemon
保證每次開機啟動都會自動啟動rsync服務。
方法一的優點是,開啟、停止rsync服務方便。
方法二的優點在于不用先安裝一個服務。如何選擇還是視使用情況而定了。
一般來說:rsync服務器負載比較高,則使用獨立啟動模式
rsync服務器負載較低,使用xinetd運行方式
rsync的配置
rsync的主要有以下三個配置文件:rsyncd.conf (主配置文件)
rsyncd.secrets (密碼文件)
rsyncd.motd (rysnc服務器信息:連接后的歡迎信息)
兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似于 samba 的主配置文件。
# mkdir /etc/rsyncd # cd /etc/rsyncd # touch rsyncd.conf # touch rsyncd.secrets # touch rsyncd.motd
配置文件 rsyncd.conf 默認在 /etc 目錄下。為了將所有與 rsync 服務相關的文件放在單獨的目錄下,可以執行如下命令:
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
注:創建軟鏈接一定要用絕對路徑,用相對路徑會造成斷鏈。
為了密碼安全,我們需要把rsyncd.secrets的權限設置為600
chmod 600 rsyncd.secrets
1、配置rsyncd.conf文件
#服務器傳輸文件時用root 權限執行 uid = root gid = root #指定服務端口,默認873 port = 873 use chroot = no #只讀,不讓客戶端上傳文件到服務器 read only = yes #limit access to private LANs #限制能訪問該服務的網段 hosts allow=192.168.0.0/255.255.0.0 hosts deny=* #最大連接數 max connections = 5 #告訴進程寫到該文件中 pid file = /var/run/rsyncd.pid #密碼存在哪個文件 secrets file = /etc/rsyncd/rsyncd.secrets #服務器信息定義指向該文件,該文件可寫服務器信息,歡迎的文字 motd file = /etc/rsyncd/rsyncd.motd #rsync 服務器的日志 log file = /var/log/rsync.log #這是傳輸文件的日志 transfer logging = yes #日志文件格式 log format = %t %a %m %f %b syslog facility = local3 timeout = 300 #超時時間 # MODULE OPTIONS #模塊的名稱,可以自定義 [testhome] #同步的目錄 path = /usr/local/nginx/ftp list=yes #忽略IO錯誤 ignore errors #驗證用戶,我的用戶是root auth users = root comment = test home #不同步的目錄 exclude = .git/ #模塊的名稱,可以自定義 [datahome] #同步的目錄 path = /web/data #rsync 服務器上提供同步數據的目錄在服務器上模塊是否顯示列出來。 list=yes #忽略IO錯誤 ignore errors #驗證用戶,我的用戶是user auth users = user #注釋可以自己定義,寫什么都行,寫點相關的內容就行 comment = data home #不同步的目錄 exclude = .git/
2、配置rsyncd.secrets文件
密碼文件: rsyncd.secrets的內容格式:“用戶名:口令”
例:
root:123456 user:123456
為了密碼的安全性,我們要保證把權限設為600以及root權限
chown root:root /etc/rsyncd/rsyncd.secrets chmod 600 /etc/rsyncd/rsyncd.secrets
3、配置rsyncd.motd文件
這個文件是客戶端連接時看到的歡迎信息文件,內容自定義,也可以為空:
++++++++++++++++++++++++++++++++++++++ Welcome ++++++++++++++++++++++++++++++++++++++
4、開啟防火墻873端口
Linux 防火墻是用iptables,所以我們至少在服務器端要讓你所定義的rsync 服務器端口通過,客戶端上也應該讓通過。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT /etc/rc.d/init.d/iptables save
查看一下防火墻是不是打開了 873端口;
iptables -L -n
5、啟動rsync
service xinetd start
6、查看服務是否運行
netstat -an | grep 873
tcp 0 0 :::873 :::* LISTEN 3399/xinetd
rsyncf客戶端
1、安裝
客戶端也要安裝rsync,但是不用做配置,也不用啟動,因為客戶端僅僅需要能夠運行# rsync *** 這條命令
yum install -y xinetd rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm
2、同步數據
(1)方式一:
rsync -avzP root@192.168.2.72::testhome /tmp/david/
參數說明:-a --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD。
-z 傳輸時壓縮;
-P 傳輸進度;
-v --verbose 詳細模式輸出;
-r 是遞歸;
-l 是鏈接文件,意思是拷貝鏈接文件;
-p 表示保持文件原有權限;
-t 保持文件原有時間;
-g 保持文件原有用戶組;
-o 保持文件原有屬主;
-D 相當于塊設備文件。
root是認證用戶,IP地址是服務端的IP,testhome是配置文件中寫的模塊名稱,/tmp/david是指保存到客戶端的位置。
(2)方式二:
rsync -avzP --delete root@192.168.2.72::testhome /tmp/david/
這回我們引入一個 –delete 選項,表示客戶端上的數據要與服務器端完全一致,如果 linuxsirhome目錄中有服務器上不存在的文件,則刪除。最終目的是讓linuxsirhome目錄上的數據完全與服務器。
上保持一致;用的時候要小心點,最好不要把已經有重要數所據的目錄,當做本地更新目錄,否則會把你的數據全部刪除。
(3)方式三:
rsync -avzP --delete --password-file=rsync.password root@192.168.2.72::testhome /tmp/david/
這次我們加了一個選項 –password-file=rsync.password ,這是當我們以linuxsir用戶登錄rsync服務器同步數據時,密碼將讀取 rsync.password 這個文件。
這個文件內容只是服務端中rsync中設置的root認證用戶的密碼。
在你需要的地方創建rsync.password文件,然后只保存密碼在其中:
touch rsync.password echo "123456" > rsync.password chmod 600 rsync.password
3、用crontab讓客戶端自動與服務端同步數據
我們在/etc/cron.daily.rsync中創建了一個文件名為:root.sh ,并且是權限是 755
mkdir /etc/cron.daily.rsync cd /etc/cron.daily.rsync touch root.sh chmod 755 root.sh
編輯root.sh,內容如下:
vim root.sh
#!/bin/sh #192.168.2.72 testhome backup /usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.secrets root@192.168.2.72::testhome /tmp/david/
:wq
然后創建定時任務:
crontab -e
*/1 * * * * /usr/bin/run-parts /etc/cron.daily.rsync 1> /dev/null
表示每分鐘執行一次/etc/cron.daily.rsync里的腳本。
查看定時任務:
crontab -l
當然,如果你覺得創建腳本麻煩的話,也可以直接將命令寫在定時任務中。
crontab -e */1 * * * * usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.secrets root@192.168.2.72::testhome /tmp/david/
測試
測試的話非常簡單,只需要在服務端同步文件夾內增加或刪除文件,過一分鐘后到客戶端上看效果即可。
總結
配置Rsync的環境一定要確保防火墻873端口打開,以及SELinux關閉,否則肯定會出錯的。
在配置的過程中可能會出現這樣那樣的問題,先森也會整理一篇問題總結,后續分享。
Rsync與Crontab搭配起來同步并不是最好的同步方案,Rsync可以與其他工具使用使得同步更安全、準確,請悉知。
歷史上的今天:
- 2015: 超級巧合的60張照片 看了一遍又一遍(一)(0)
轉載請注明出處來自http://www.cnidcc.cn/rsync_crontab.html

川公網安備 51011202000104號
不錯,學習了!
等以后有錢接觸到了,再回來學習!
很實用,謝謝分享!
寫的很詳細 不錯學習了