| |
作者:cqj1314 提交日期:2006-3-28 17:18:00 |
|
用RSYNC實現資料的備份和同步
RSYNC的特性:
1、可以鏡像儲存整個分類樹和檔案系統。
2、可以很容易做到保持原來檔案的許可權、時間、軟永久連結等等。
3、無須特殊許可權即可安裝。
4、最佳化的流程,檔案傳輸效率高。
5、可以使用rcp、ssh等方式來傳輸檔案,當然也可以通過直接的socket串連。
RSYNC的安裝:
./configure && make && make install
RSYNC伺服器端配置:(IP:192.168.100.33)
1、 建立備份的目錄。
2、 建立設定檔/etc/rsyncd.conf,配置如下:
[BBS_ZT_241] #指定認證的備份模組名
path = /usr/local/apache2/ #本地存放備份的目錄
auth users = apache #認證的使用者名稱,需在兩端的/etc/rsyncd.secrets檔案中添加
uid = apache #備份以apache使用者和組進行
gid = apache
hosts allow = 192.168.100.90 #哪些電腦可以訪問rsync服務
hosts deny = 192.168.100.0/24 #哪些電腦不可以訪問rsync服務
use chroot = no #不使用chroot
secrets file = /etc/rsyncd.secrets #認證檔案路徑
ignore errors # 可以忽略一些無關的IO錯誤
read only = no
list = no #不允許列檔案
如果同時還需要備份其它目錄的話,可以直接在設定檔的後面繼續增加配置內容,這樣就可以同時備份多個目錄了。
同時存放備份的目錄必須從屬密碼檔案的使用者組chown apache:apache /usr/local/apache2
3、 建立認證檔案
Vi /etc/rsyncd.secrets 然後在裡面添加使用者和密碼apache:apache,同時要將rsyncd.secrets檔案的屬性設為ROOT擁有,許可權設為600(否則無法備份成功)
chown root.root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
伺服器端設定完畢,啟動:service xinetd restart
4、 開機自動啟動
加入inetd.conf,編輯vi /etc/services,加入
rsync 873/tcp # rsync
rsync 873/udp #rsync
修改了services檔案的好處就在於系統知道873連接埠對應的服務名為rsync
建立一個vi /etc/xinetd.d/rsync檔案,輸入以下內容:
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/local/rsync/bin/rsync
server_args = --daemon
log_on_failure += USERID
}儲存。
/* 編加vi /etc/inetd.conf,加入rsync stream tcp nowait root /usr/bin/rsync rsync –daemon */
上面的方法由於存在安全性漏洞,所以推薦使用下面的方法:
編輯vi /etc/rc.d/rc.local,在最後添加:/usr/local/bin/rsync --daemon
RSYNC用戶端配置:
1、 建立認證檔案/etc/rsyncd.secrets添加在伺服器端相同的使用者和密碼apache:apache,同時將檔案屬性設為ROOT所有,許可權設為600
2、 測試能否工作:/usr/bin/rsync -rlHpoDtS --progress --password-file=/etc/rsyncd.secrets /usr/local/apache2/htdocs/ apache@192.168.100.33::BBS_ZT_241 >>/opt/rsync.log
放入自動定時執行:
每隔1小時備份一次
crontab -u root –e
0 */1 * * * /usr/bin/rsync -rlHpoDtS --progress --password-file=/etc/rsyncd.secrets /usr/local/apache2/htdocs/ apache@192.168.100.33::BBS_ZT_241 >>/opt/rsync.log
在伺服器端的iptables中對rsync控制:
Vi /etc/rc.d/forward
iptables -A INPUT -p tcp -s ! 11.22.33.44 --dport 873 -j DROP,如此,只有11.22.33.44這個client ip能連入rsync。
當程式在你所指定的時間執行後,系統會寄一封信給你,顯示該程式執行的內容,若是你不希望收到這樣的信,請在每一行空一格之後加上 > /dev/null 2>&1 即可
附:
rsync命令的用法
rsync的命令格式可以為:
1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
2. rsync [OPTION]... [USER@]HOST:SRC DEST
3. rsync [OPTION]... SRC [SRC]... DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六種不同的工作模式:
1. 拷貝本地檔案;當SRC和DES路徑資訊都不包含有單個冒號":"分隔字元時就啟動這種工作模式。
2. 使用一個遠程shell程式(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔字元時啟動該模式。
3. 使用一個遠程shell程式(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔字元時啟動該模式。
4. 從遠程rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔字元時啟動該模式。
5. 從本地機器拷貝檔案到遠程rsync伺服器中。當DST路徑資訊包含"::"分隔字元時啟動該模式。
6. 列遠程機的檔案清單。這類似於rsync傳輸,不過只要在命令中省略掉本地機資訊即可。
執行個體說明:
# rsync -vazu -progress terry@192.168.100.21:/terry/ /home
v詳細提示
a以archive模式操作,複製目錄、符號串連,相當於-rlptgod參數
z壓縮
u只進行更新,防止本地新檔案被重寫,注意兩者機器的時鐘的同時
-progress指顯示
以上命令是保持客戶機192.168.100.90上的/home/terry目錄和rsync伺服器上的terry目錄同步。該命令執行同步之前會要求你輸入terry帳號的密碼,這個帳號是我們前面在rsyncd.secrets檔案中定義的。如果想將這條命令寫到一個指令碼中,然後定時執行它的話,可以使用--password-file選項,具體命令如下:
# rsync -vazu -progress --password-file=/etc/rsync.secret
terry@192.168.100.21:/terry/ /home
要使用--password-file選項,就得先建立一個存放密碼的檔案,這裡指定為/etc/rsync.secret。其內容很簡單,如下:
terry:12345
同樣要修改檔案屬性如下:
# chmod 600 /etc/rsyncd.secrets
PS:
伺服器RSYNC端配置案例:(4.244)
Vi /etc/rsyncd.conf
[204_files]
path = /usr/local/apache2/htdocs/files
auth users = apache
uid = apache
gid = apache
use chroot = no
secrets file = /etc/rsyncd.secrets
read only = no
list = no
[204_images]
path = /usr/local/apache2/htdocs/images
auth users = apache
uid = apache
gid = apache
use chroot = no
secrets file = /etc/rsyncd.secrets
read only = no
list = no
[204_htdocs]
path = /usr/local/apache2/htdocs
auth users = apache
uid = apache
gid = apache
use chroot = no
secrets file = /etc/rsyncd.secrets
read only = no
list = no
Vi /etc/rsyncd.secrets #建立使用者和密碼檔案
apache:71GW3GuEBaoJ
Vi /etc/xinetd.d/rsync #自動啟動
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
用戶端設定:(4.243)
Vi /etc/rsyncd.secrets #添加認證密碼
71GW3GuEBaoJ
Vi /etc/xinetd.d/rsync #開機自動運行
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
建立用戶端運行指令碼:
Vi /opt/shell_order/rsync.sh
#/bin/sh
log_path=/opt/shell_order/
time=`date +%Y%m%d`
logname_file=file_sync.log
logname_img=img_sync.log
log_file=$log_path$logname_file$time
log_img=$log_path$logname_img$time
filepath=/usr/local/apache2/htdocs/files/
imgpath=/usr/local/apache2/htdocs/images/
pwfile=/etc/rsyncd.secrets
ip=192.168.100.
refile=_files
reimg=_images
user=apache
fun
轉自:
http://www.tianyablog.com/blogger/post_show.asp?idWriter=0&Key=0&BlogID=368688&PostID=4607119