標籤:linux 同步 rsync 備份
一、rsync遠程同步伺服器
簡介:
Rsync(remote synchronize)是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案,也可以使用Rsync同步本地硬碟中的不同目錄。
Rsync是用於取代rcp的一個工具,Rsync使用所謂的“Rsync演算法”來使本地和遠程兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。
Rsync支援大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在Windows平台下也有相應的版本,比較知名的有cwRsync和Sync2NAS
特點:
1)能更新整個分類樹和檔案系統
2)有選擇性的保持符號串連、永久連結、檔案屬性、許可權、裝置以及時間等;
3)對於安裝來說,無任何特殊許可權要求
4)對於多個檔案來說,內部流水線減少檔案等待的延時
5)能用rsh、ssh或直接連接埠做為傳輸入連接埠
6)支援匿名rsync同步檔案,是理想的鏡像工具
rsync命令的用法:
基本格式:rsync [選項] 原始位置 目標位置
常用選項:
-a:歸檔模式,遞迴保留對象屬性,等同於-rlptgoD
-v:顯示同步過程的詳細資料(ver)
-z:在傳輸檔案時進行壓縮
-H:保留永久連結檔案
-A:保留ACL屬性資訊
--delete:刪除目標位置有而原始位置沒有的檔案
-r:遞迴模式,包含目錄及子目錄中所有檔案
-l:對於符號串連檔案仍然複製為符號串連檔案
-p:保留檔案的許可權標記
-t:保留檔案的時間標記
-g:保留檔案的屬組標記(僅超級使用者使用)
-o:保留檔案的屬主標記(僅超級使用者使用)
-D:保留裝置檔案及其他特殊檔案
伺服器端:同步源
用戶端:發起端
同步源的搭建方式:ssh或rsync
存取控制清單:
setfacl:設定特殊許可權
-m 添加許可權
-x 刪除一條特殊許可權
-b 刪除所有特殊許可權
-R 遞迴
default 設定預設許可權(對未來建立的檔案也生效)
二、利用SSH搭建同步源
1、伺服器端:
1)建立同步目錄,如:mkdir /var/ssh
2)建立測試檔案,如:touch /var/ssh/ssh.txt
3)設定許可權,如:
useradd a1 #用來上傳
useradd a2 #用來下載
chown a1:a1 /var/ssh
2、用戶端:
1)建立同步目錄,如:mkdir /ssh
2)同步伺服器資料,如:rsync -avz [email protected]:/var/ssh/* /ssh
三、利用rsync搭建同步源
1、伺服器端:
1)建立同步目錄,如:mkdir /var/rsync
2)建立測試檔案,如:touch /var/rsync/rsync.txt
3)建立主設定檔,如:
vim /etc/rsyncd.conf
use chroot = yes
address = 伺服器IP地址 #監聽地址
port 873 #監聽連接埠
log file = /var/log/rsyncd.log #記錄檔
pid file = /var/run/rsyncd.pid #pid檔案
[share] #共用目錄名
comment = rsync share directory #描述資訊
path = /var/rsync #真實目錄
read only = yes #唯讀
dont compress = *.gz *.bz2 #這兩種格式的檔案傳輸過程中不壓縮
auth users = aa #允許登入使用者
secrets file = /etc/rsyncd_users.db #使用者密碼檔案
4)建立賬戶檔案:
vim /etc/rsyncd_users.db
aa:123456
5)開啟服務:rsync --daemon
6)關閉服務:kill $(cat "/var/run/rsyncd.pid")
2、用戶端
1)建立同步目錄,如:mkdir /rsync
2)同步伺服器資料,如:
rsync -avz [email protected]::share /rsync
rsync -avz rsync://[email protected]/share /rsync
四、同步指令碼
1、基於SSH的遠程同步伺服器:
用戶端:ssh-keygen -t rsa #產生公開金鑰和私密金鑰檔案
ssh-copy-id [email protected] #將公開金鑰檔案上傳到伺服器端
ssh [email protected] #測試金鑰組是否成功
rsync -avz [email protected]:/var/ssh/* /ssh #測試同步是否成功
2、基於rsync的遠程同步伺服器:
用戶端: export RSYNC_PASSWORD=123456 #聲明全域變數,儲存串連使用者的密碼
rsync -avz [email protected]::share /rsync #測試同步是否成功
五、自動備份
inotify
兩個組件:inotifywait:持續監控,一有變化,立即輸出結果
inotifywatch:收集檔案系統變化情況,並在運行結果後輸出匯總的變化情況
修改核心參數:
max_queued_events 監控隊列
max_user_instances 最多監控執行個體數
max_user_watches 每個執行個體最多監控檔案數
1、單向同步
1)rsync同步源:指備份操作的遠程伺服器,也稱為備份源。主要包括兩種:rsync源、ssh源
2)編輯核心
vim /etc/sysctl.conf 添加如下內容
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches - 1048576
sysctl -p #檢查sysctl.conf設定檔是否正確
3)inotifywait -mrq -e modify,create,move,delete /var/www/html
-m 持續監控
-r 監控所有子物件
-q 簡化輸出
-e 指定監控的事件類型
4)編寫指令碼,當監控到資料變化時自動同步
vim rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html"
RSYNC_CMD="rsync -avz --delete /var/www/html [email protected]:/var/www/html"
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then
$RSYNC_CMD
fi
done
2、雙向同步
1)保證兩台伺服器之間可以通過ssh無密碼訪問,操作如下(這裡以root使用者為例):
分別在server1(192.168.1.1)和server2(192.168.1.2)下,建立密鑰
server1:
ssh-keygen -t rsa
ssh-copy-id 192.168.1.2
server2:
ssh-keygen -t rsa
ssh-copy-id 192.168.1.1
分別在兩台機器上執行如下測試:
ssh 192.168.1.1
ssh 192.168.1.2
2)安裝unison
首先安裝ocaml,版本至少為3.07或更高
:http://caml.inria.fr/pub/distrib/ocaml-3.10/
tar -zxf ocaml-3.10.2.tar.gz
cd ocaml-3.10.2
./configure
make world opt
make install
安裝unison
:http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.13.16/
tar -zxf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true
cp unison /usr/local/bin
安裝inotify
:http://inotify-tools.sourceforge.net
tar xvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
ln -sv /usr/local/lib/libinotify* /usr/lib/
unison -batch /home/server1/ ssh:192.168.10.2//home/server2
#測試兩台伺服器之間是否可以同步檔案
3)編寫自動同步指令碼
server1上建立指令碼unison.sh
vim /root/unison.sh
#!/bin/bash
ip2="192.168.1.2"
src2="/server1/"
drt2="/server2/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$drt2
echo -n "$line" >> /var/log/inotify.log
echo $(date | cut -d " " -f1-4 ) >> /var/log/inotify.log
done
chmod a+x /root/unison.sh
server2上建立指令碼unison.sh
vim /root/unison.sh
#!/bin/bash
ip1="192.168.1.1"
src1="/server2/"
drt1="/server1/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line
do
/usr/local/bin/unison -batch $src1 ssh://$ip1/$drt1
echo -n "$line" >> /var/log/inotify.log
echo $(date | cut -d " " -f1-4 ) >> /var/log/inotify.log
done
chmod a+x /root/unison.sh
本文出自 “Linux營運” 部落格,請務必保留此出處http://jinghsy.blog.51cto.com/7648537/1661845
linux系統rsync伺服器的管理與配置