Monday, June 4, 2007

Rsync-達成資料同步

FreeBSD 5.2-RELEASE (rsync server、client)

rsync-2.6.0

【安裝及設定】


Rsync Server設定
Step1.安裝rsync


#cd /usr/ports/net/rsync //切換到安裝路徑
#make install clean //安裝並清除安裝過程中不必要的檔案

Step2.規劃建立備份目錄區


#mkdir /home/backup/web //依個人習慣建立備份目錄(owner及group需配合web module設定)

Step3.設定rsyncd.conf

修改rsyncd.conf設定檔


#vi /usr/local/etc/rsyncd.conf

內容如下,若要同時有二個以上rsync client要備份到rsync server則依此module設定自行增加即可


###backup config### //註解
[web] //module name
comment = backup dmz web //說明
path = /usr/home/backup/web //存放備份資料的目錄
auth users = weithenn //認證帳號(也就是等一下要設在rsyncd.secrets的帳號)
uid = nobody //以uid nobody來啟動rsync server
gid = nogroup //以gid nogroup來啟動rsync server
secrets file = /usr/local/etc/rsyncd.secrets //密碼檔存放路徑
read only = no
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz //不要對列出附檔名之檔案做壓縮

Step4.建立rsyncd.secrets

建立rsyncd.secrets內容如下


#vi rsyncd.secrets
weithenn:123456789 //id:pwd(自行設定帳號、密碼)

權限記得改為600,不然備份會出現問題


#chmod 600 rsyncd.secrets

Step5.修改rc.conf


#vi /etc/rc.conf //修改rc.conf內容

增加如下一行內容


rsyncd_enable="YES" //重開機會自動啟動rsync

Step6.啟動rsync服務

修改rsync.sh內容使Rsync跑ipv4


#vi /usr/local/etc/rc.d/rsyncd.sh
command_args="--daemon" //預設值(run IPv6)
command_args="-4 --daemon" //run IPv4

啟動rsync服務


#/usr/local/etc/rc.d/rsyncd.sh start

確定rsync跑tcp4及打開873 port


#sockstat |grep rsync
root rsync 97328 4 tcp4 *:873 *:*

Rsync Client設定
Step1.安裝rsync

切換到安裝路徑,執行安裝並清除安裝過程中不必要的檔案


#cd /usr/ports/net/rsync
#make install clean

Step2.建立rsyncd.secrets

建立rsyncd.secrets內容如下(只需密碼,不需帳號)


#vi rsyncd.secrets
123456789 //pwd(自行設定密碼需與rsync server的一樣哦)

權限記得改為600,不然備份會出現問題


#chmod 600 rsyncd.secrets

Step3.測試能否順利同步資料

執行格式大致如下(或man rsync)以下將執行分為三段來講解,可執行如下行指令來測試能否順利同步

Usage: rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST


#/usr/local/bin/rsync -avzP --delete --password-file=/usr/home/weithenn/rsyncd.secrets //接下一行(同一行)
/usr/local/www/ weithenn@192.168.88.1::web
項目(參數) 說明
rsync [OPTION]
-a, --archive archive mode, equivalent to -rlptgoD 檔案模式
-v, --verbose increase verbosity 觀看過程
-z, --compress compress file data 壓縮資料
-P equivalent to --partial --progress 顯示程序進度%
--delete delete files that don't exist on the sending side 當source端刪除A文件則destination端也把A文件刪除保持二台機器資料的一致性
--password-file=FILE get password from FILE 指定本機rsyncd.secrets的位置
SRC [SRC]
/usr/local/www/ 將本機目錄/usr/local/www備份到rsync server的備份目錄/home/backup/web/www
[USER@]HOST:DEST
weithenn@192.168.88.1::web 以weithenn身份登入到rsync server(192.168.88.1)上"web" module


Step4.加入排程

製作rsync.sh以利排程內容如下


#vi rsync.sh
#!/bin/sh
/usr/local/bin/rsync -avzP --delete --password-file=/usr/home/weithenn/rsyncd.secrets //接下一行(同一行)
/usr/local/www/ weithenn@192.168.88.1::web

編輯排程(每天晚上12點執行rsync.sh)


#crontab -e
0 0 * * * /usr/home/weithenn/rsync.sh

Rsync 補充-異地備份
上述例子用在內部區域互相備份不錯,若是要使用異地備份呢?因為直接傳資料便容易遭到有心人士的截取,因此我們使用SSH傳輸來達成異地備份且傳輸加密;但使用SSH登入到遠端主機時會需要輸入密碼,會使自動化備份流程受到干擾,因此我們使用一個 SSH v2 DSA公(私)密鑰來達成SSH登入遠端主機而不用輸入密碼,以便自動化備份流程順利執行,可使用 ssh-keygen -d 命令(或ssh-keygen -t dsa )來建立SSH v2 DSA 公(私)密鑰。公(私)密鑰皆放在 ~/.ssh/內,而DSA 公共密鑰放在所要連線遠端機器的~/.ssh/authorized_keys2 中。下例遠端機器ip(61.60.59.58)

Step1.產生SSH v2 DSA 公(私)密鑰

產生key對話內容如下


# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/home/weithenn/.ssh/id_dsa):預設產生key的路徑
Enter passphrase (empty for no passphrase):保護key的密碼
Enter same passphrase again:保護key的密碼
Your identification has been saved in /home/weithenn/.ssh/id_dsa.
Your public key has been saved in /home/weithenn/.ssh/id_dsa.pub.
The key fingerprint is:
2a:98:c5:27:2b:f9:91:ee:84:bb:27:d2:2f:f0:b7:83 weithenn@bsd.test

Step2.將SSH v2 DSA 公鑰複製至遠端主機

將公鑰(id_dsa.pub)複製到遠端主機.ssh目錄下


# scp id_dsa.pub 61.60.59.58:/home/weithenn/.ssh/authorized_keys2
Password:因為還沒ok!!所以還要輸入密碼
id_dsa.pub 100% |**********************************************| 617 00:00 //複製公鑰成功至遠端主機

Step3.測試能否順利登入遠端主機


# ssh 61.60.59.58 //ssh登入遠端主機
Password: //沒產生SSH v2 DSA 公(私)密鑰前,用SSH登入遠端主機需要輸入pwd才能進入遠端主機
# ssh 61.60.59.58 //ssh登入遠端主機,成功便能不用輸入密碼並順利登入遠端主機

Step4.加入排程

製作rsync.sh以利排程內容如下,備份本機目錄(usr/home/weithenn)到遠端主機(61.60.59.58)的目錄(/home/backup/jeoutai)下


#vi rsync.sh
#!/bin/sh
rsync -avzP --delete -e ssh /usr/home/weithenn 61.60.59.58:/home/backup/jeoutai

編輯排程(每天晚上12點執行rsync.sh進行異地同步備份)


#crontab -e
0 0 * * * /home/weithenn/rsync.sh