通過rsync搭建一個遠程備份系統(一)


前言

我公司是電子商務公司,全部是linux系統,每天的網站數都在增加,為了保證安全,需要建立一個遠程容災系統,將網站數據每天凌晨1點備份到遠程服務器上,由於數據量大,每天進行進行增量備份,僅僅備份當天增加數據,當網站出現故障后,可以通過備份最大程度地恢復數據。

一 解決方案

我們這里假設有A B兩地的服務器,A地的服務器為網站服務器,B地服務器為遠程容災服務器,A服務器上運行着rsync的服務端,B地服務器上運行着rsync的客戶端,這樣,B地服務器上就可以通過系統守護進程crontab來定時備份A地服務器上指定的數據,從而實現遠程數據備份的作用。

二 A地服務器配置:

我們采用源碼安裝的rsync,默認情況下/etc/rsync.conf是沒有這個配置文件的,所以手動創建一個,它由一個或者多個模塊結構構成,包括全局參數和模塊參數。

[root@salt ~]# cat /etc/rsyncd.conf 
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[ixdba]
path = /test/tmp
comment = ixdba file
ignore errors 
read only = no
write only = no
hosts allow = *
hosts deny = 192.168.1.1
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass

[root@salt ~]# cat /etc/server.pass      # 用戶認證配置文件
backup:ixdba123
[root@salt ~]# chmod 600 /etc/server.pass # 必須是600的權限,不然客戶端連接即使密碼正確,也會提示認證出錯

參數配置解釋:

  • uid:指該模塊傳輸文件時守護進程應該具有的用戶ID,默認值是nobody
  • gid: 此選項指定當該模塊傳輸文件時,守護進程應該具有的用戶組ID,默認值是nobody
  • max connections 定義模塊最大連接數,以保護服務器,超過限制的連接請求將被暫停,默認值為0,沒有限制、
  • strict modes 此選項指定模塊的最大並發連接數,以保護服務器,反之為no,設置為yes,密碼文件的權限必須是root用戶權限。
  • lock file 鎖文件,默認值是/var/run/rsyncd.lock
  • [ixdba] 表示一個模塊的開始,ixdba就是對應的模塊名稱
  • path 此選項用來指定需要備份的文件或者目錄,是必須設置的項
  • ignore errors 表示可以忽略一些無關的I/O錯誤
  • read only 設置為no表示客戶端可以上傳文件,設置為yes表示只讀。
  • write only 設置為no表示客戶端可以下載,設置為yes表示不能下載
  • hosts allow 設置可以連接rsync服務器的主機,“*” 表示允許連接任何主機。
  • hosts deny 設置禁止連接rsync服務器的主機地址
  • list 此選項用戶設定當客戶請求可以使用的模塊列表時,該模塊是否被列出。默認是true,如需要建立隱藏的模塊,可以設置false
  • auth users,此選項用來定義可以連接該模塊的用戶,多個用戶空格或者逗號隔開,需要注意的是,這和系統用戶沒有任何關系。
  • secrets file 指定一個 “用戶名:密碼” 格式的文件,用戶名就是“auth users” 選項定義的用戶,密碼可以隨便指定,只要和客戶端secrets file對應起來即可,只有在auth users被定義時,該文件才起作用,系統默認沒有這個文件,手動建立即可。

啟動服務:

[root@salt ~]# rsync --daemon
[root@salt ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1519/sshd           
tcp        0      0 0.0.0.0:4505                0.0.0.0:*                   LISTEN      1685/python2.6      
tcp        0      0 0.0.0.0:4506                0.0.0.0:*                   LISTEN      1798/python2.6      
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      14595/rsync         
tcp        0      0 :::22                       :::*                        LISTEN      1519/sshd           
tcp        0      0 :::873                      :::*                        LISTEN      14595/rsync         
[root@salt ~]# ps -ef |grep rsync
root      14595      1  0 01:06 ?        00:00:00 rsync --daemon
root      14598   1997  0 01:06 pts/0    00:00:00 grep rsync

三 B地服務器配置:

在備份機上不用做任何設置,只需要執行rsync同步操作即可,為了同步過程中不用輸入密碼,在B系統上創建一個secrets file,此文件的內容為A地服務器rsyncd.conf文件中auth users選項指定用戶的密碼,而這個文件的名稱以及路徑可以隨意指定,只要在執行rsync同步時指定即可。命令如下:

rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug" backup@172.16.22.126::ixdba /tmp/test/ --password-file=/etc/server.pass

[root@linux-node1 ~]# cat /etc/server.pass   # 注意的是這里只是填寫密碼罷了,沒有用戶名
ixdba123
[root@linux-node1 ~]# chmod 600 /etc/server.pass 

命令解釋:

  • -vzrtopg 選項中,z表示壓縮文件在傳輸時(compresse),r表示recursive,遞歸傳輸,t表示保持文件時間信息,o表示owner,保持文件屬主信息,p表示perms ,保持文件權限,g表示group,用來保持文件的屬組信息。
  • --delete 選項指定以rsync服務器端為基准進行數據鏡像同步,也就要保持rsync服務器端目錄和客戶端目錄完全一致,在這里以A地服務器為准。
  • --progress 用戶顯示數據鏡像同步的過程
  • --exclude 選項用戶排除不需要傳輸的文件類型。
  • backup@172.16.22.126::ixdba 表示對服務器172.16.22.126的ixdba模塊進行備份,backup表示使用backup這個用戶對這個模塊進行備份。
  • /tmp/test/ 用戶指定備份文件在客戶端機器上的存放路徑,就是將備份的文件存放在備份機的/tmp/test/下
  • --password-file=/etc/server.pass 用來指定客戶機上存放密碼文件的位置,這樣在和客戶端執行同步命令時無需再輸入密碼,這個密碼文件可以隨意指定,但是必須在客戶端上存在這個文件,文件的內容僅僅為備份用戶的密碼。這里填寫的是backup用戶的密碼。

執行完命令后,rsync就開始自動同步數據了,從A同步到B上。

四 設置定時策略

我們采用crontab定時任務來定時備份數據。這種備份數據對於數據安全性要求不高的業務系統中。

crontab: installing new crontab
[root@linux-node1 ~]# crontab -l
1 1 * * * rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug" backup@172.16.22.126::ixdba /tmp/test/ --password-file=/etc/server.pass

好了 ,通過以上4步,一個遠程容災系統已經搭建完成,當然這不是一個完美的方案對於數據安全性比較高的公司,此時需要一個能夠自動檢測文件變更后自動更新的備份系統,那么就需要結合inotify來做了,linux內核2.6.13以后的內核就支持inotify文件系統監控機制了。

所以下面介紹rsync+inotify


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM