一、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