1、什麼是rsync
2、rsync的功能特性
3、編譯安裝rsync軟件
4、rsync的應用模式
5、rsync 藉助ssh通道技術案例
6、企業案例一:搭建遠程容災備份系統
練習一推送文件方式同步並排除指定的目錄和文件
練習二測試主機之間數據徹底同步(無差別同步)
練習三rsync多目錄多模塊同步
配置防火牆容許rsync服務
附加一:rsync服務端部署流程回顧
附加二:rsync自我模擬排錯思路及實戰
附加三rsync生產排錯整理個人FAQ
inotify介紹
企業應用案例:利用rsync+inotify搭建實時同步系統
===================企業案例一:搭建遠程容災備份系統 =======================
學習思想:重思路、重實踐、重總結。
練習一:===========推送文件方式同步並排除指定的目錄和文件=============
[root@c-server python]# ls
1.txt ex1.py ex2.py ex3_1.py ex3.py ex4_1.py ex4.py
[root@c-server python]#
[root@c-server python]# tar zcvf a.tar.gz ./ --exclude=ex4.py # 打包當前目錄全部文件,並排除ex4.py
./
./ex4_1.py
./ex1.py
./ex3.py
./a.tar.gz
./ex3_1.py
./1.txt
./ex2.py
[root@c-server python]# ls
1.txt ex1.py ex3_1.py ex4_1.py
a.tar.gz ex2.py ex3.py ex4.py
[root@c-server python]# tar ztvf a.tar.gz
drwxr-xr-x root/root 0 2013-01-08 04:57:08 ./
-rw-r--r-- root/root 168 2013-01-08 04:57:08 ./ex4_1.py
-rw-r--r-- root/root 186 2013-01-06 08:00:12 ./ex1.py
-rw-r--r-- root/root 241 2013-01-06 12:13:09 ./ex3.py
-rw-r--r-- root/root 0 2013-01-24 17:22:11 ./a.tar.gz
-rw-r--r-- root/root 501 2013-01-06 12:33:00 ./ex3_1.py
-rw-r--r-- root/root 48 2013-01-03 12:29:33 ./1.txt
-rw-r--r-- root/root 300 2013-01-06 08:08:56 ./ex2.py
[root@c-server python]#html
一、咱們如今在服務端操做一下
[root@rsync ~]# cd /lianglab/
[root@rsync lianglab]# ls
html_2013-01-03.tar.gz test
[root@rsync lianglab]#
[root@rsync lianglab]# tree
|-- html_2013-01-03.tar.gz
`-- test
`-- html_2013-01-03.tar.gz
5 directories, 6 files
[root@rsync lianglab]#python
測試推送文件方式同步並排除指定的目錄和文件。
把當前目錄排除掉這兩個目錄。在推送到遠端服務器上面。
[root@b-server /]# cd /
[root@b-server /]# mkdir lianglab
[root@b-server /]# cd lianglab/
[root@b-server lianglab]# mkdir a b c d
[root@b-server lianglab]# touch a/1 b/2 c/3 d/4
[root@b-server lianglab]# ll /lianglab/
total 16
drwxr-xr-x 2 root root 4096 Jan 3 11:08 a
drwxr-xr-x 2 root root 4096 Jan 3 11:08 b
drwxr-xr-x 2 root root 4096 Jan 3 11:08 c
drwxr-xr-x 2 root root 4096 Jan 3 11:08 d
[root@b-server lianglab]# tree
.
|-- a
| `-- 1
|-- b
| `-- 2
|-- c
| `-- 3
`-- d
`-- 4
4 directories, 4 files
[root@b-server lianglab]#
[root@b-server lianglab]# rsync -avz --exclude=a --exclude=b/2 . backup@192.168.1.100::lianglab --password-file=/etc/rsync.password
sending incremental file list
./
b/
c/
c/3
d/
d/4
sent 164 bytes received 61 bytes 450.00 bytes/sec
total size is 0 speedup is 0.00
[root@b-server lianglab]#linux
咱們到服務端查看一下,這個操做就是指定目錄和文件操做。
[root@rsync lianglab]# ls
b c d html_2013-01-03.tar.gz test
[root@rsync lianglab]#
[root@rsync lianglab]# tree
.
|--
|-- c
| `-- 3
|-- d
| `-- 4
|-- html_2013-01-03.tar.gz
`-- test
`-- html_2013-01-03.tar.gz
4 directories, 4 files
[root@rsync lianglab]#
[root@rsync lianglab]# ll /lianglab/ --time-style=full-iso
total 20
drwxr-xr-x 2 rsync rsync 4096 2013-01-03 11:08:25.000000000 +0800 b
drwxr-xr-x 2 rsync rsync 4096 2013-01-03 11:08:25.000000000 +0800 c
drwxr-xr-x 2 rsync rsync 4096 2013-01-03 11:08:25.000000000 +0800 d
-rw-r--r-- 1 rsync rsync 183 2013-01-03 10:12:32.000000000 +0800 html_2013-01-03.tar.gz
drwxr-xr-x 2 rsync root 4096 2013-01-24 17:13:15.000000000 +0800 test
[root@rsync lianglab]# dateweb
練習二:===========測試主機之間數據徹底同步(無差別同步)=============
測試主機之間數據徹底同步(無差別同步)
要實現這種同步方式就要使用rsync的 --delete參數了,
[root@b-server lianglab]# cd /mnt/
[root@b-server mnt]# ls
[root@b-server mnt]# cd /tmp/
[root@b-server tmp]# ls
[root@b-server tmp]# touch 1 2 3
[root@b-server tmp]# ls
1 2 3
[root@b-server tmp]# cd /lianglab/
[root@b-server lianglab]# mkdir null
[root@b-server lianglab]# rsync -avzP --delete null/ /tmp/ #刪除本地目錄文件
sending incremental file list
./
deleting .font-unix/fs7100
deleting .font-unix/
deleting .X11-unix/X0
deleting .X11-unix/
deleting .ICE-unix/
deleting 3
deleting 2
deleting 1
deleting .gdm_socket
deleting .X0-lock
sent 29 bytes received 15 bytes 88.00 bytes/sec
total size is 0 speedup is 0.00
[root@b-server lianglab]# ls
a b c d null
[root@b-server lianglab]# cd null/
[root@b-server null]# ll
total 0
[root@b-server null]# cd /tmp/
[root@b-server tmp]# ll
total 0
[root@b-server tmp]#
==========================風險操做=====================
[root@rsync lianglab]# ls
b c d html_2013-01-03.tar.gz test
[root@rsync lianglab]# ll
total 20
drwxr-xr-x 2 rsync rsync 4096 Jan 3 11:08 b
drwxr-xr-x 2 rsync rsync 4096 Jan 3 11:08 c
drwxr-xr-x 2 rsync rsync 4096 Jan 3 11:08 d
-rw-r--r-- 1 rsync rsync 183 Jan 3 10:12 html_2013-01-03.tar.gz
drwxr-xr-x 2 rsync root 4096 Jan 24 17:13 test
[root@rsync lianglab]#
root@b-server lianglab]# rsync -avz --delete null/ backup@192.168.1.100::lianglab/ --password-file=/etc/rsync.password
sending incremental file list
./
deleting test/html_2013-01-03.tar.gz
deleting test/
deleting d/4
deleting d/
deleting c/3
deleting c/
deleting b/
deleting html_2013-01-03.tar.gz
sent 29 bytes received 11 bytes 80.00 bytes/sec
total size is 0 speedup is 0.00
[root@b-server lianglab]#
上面操做必定要謹慎,若是你推送的是空目錄,就會給服務器上的目錄文件幹掉,咱們如今到rsync服務器上面查看一下
[root@rsync lianglab]# ll #服務端lianglab目錄的文件都沒有了。
total 0
[root@rsync lianglab]#
咱們如今作拉取操做,如今服務器lianglab目錄下面是空的,咱們把他拉取到本地來。
咱們是以tmp目錄爲例,若是把tmp目錄換爲根目錄,就會把系統幹掉了。這個操做要謹慎。
[root@b-server lianglab]# cd /tmp/
[root@b-server tmp]# ls
[root@b-server tmp]# touch 1 2 3 4 5 6 7
[root@b-server tmp]# ls
1 2 3 4 5 6 7
[root@b-server tmp]# rsync -avz --delete backup@192.168.1.100::lianglab/ /tmp/ --password-file=/etc/rsync.password
receiving incremental file list
deleting 7
deleting 6
deleting 5
deleting 4
deleting 3
deleting 2
deleting 1
./
sent 63 bytes received 112 bytes 116.67 bytes/sec
total size is 0 speedup is 0.00
[root@b-server tmp]#
[root@b-server tmp]# ll
total 0
[root@b-server tmp]#
結論: 執行--delete參數從rsync服務端往rsync客戶端拉取數據時,必定要當心,最好不用,它比從rsync客戶端帶--delete參數往rsync服務端推送危險得多。客戶端帶--delete參數往服務端推送僅刪除服務端模塊下的數據,而前者有能力刪除rsync客戶端本地的全部數據,包括根下的全部目錄。
rsync無差別同步的生產場景應用:
通常是有須要兩臺服務器之間,必需要求數據一致,且實時性又不是很高的狀況下,如兩臺負載均衡下面web服務器之間的同步,
或者高可用雙機配置之間的同步如(MySQL配置文件同步)等等。rsync無差別同步很是危險的,所以,在生產環境中用的比較少,這個參數很危險。請慎用啊。
==========================風險操做=====================
練習三=====================rsync多目錄多模塊同步====================
rsync多目錄多模塊同步。
配置多個模塊路徑的簡單寫法:
[root@rsync lianglab2]# cat /etc/rsyncd.conf
#rsync_config______start
#created by lianglab 21:55 2013-6-13
#QQ 865362365
# http://hi.baidu.com/zll56281688 http://zll56281688.blog.51cto.com
## rsyncd.conf start ##
uid = rsync
gid = rsync
use chroot = no
max connections = 100
strict modes = yes
timout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
comment = lianglab file
ignore errors
read only = no
write only = no
host allow = *
host deny = 192.168.1.111
list = false
auth users =backup
secrets file = /etc/rsync.password
[lianglab]
path = /lianglab
[lianglab2]
path = /lianglab2
[root@rsync lianglab2]#
lianglab和lianglab2 就是對應的模塊,咱們是統一一個帳號,下面有不一樣的模塊.
[root@rsync lianglab]# pkill rsync
[root@rsync /]# mkdir lianglab2
[root@rsync /]#
[root@rsync /]# rsync --daemon
[root@rsync /]# netstat -lnt | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 :::873 :::* LISTEN
[root@rsync /]# cat /etc/services | grep rsync | head -2
rsync 873/tcp # rsync
rsync 873/udp # rsync
[root@rsync /]#
咱們如今到客戶端測試一下.
[root@b-server tmp]# rsync -avz /etc/services backup@192.168.1.100::lianglab/ --password-file=/etc/rsync.password
sending incremental file list
services
sent 99063 bytes received 27 bytes 198180.00 bytes/sec
total size is 362031 speedup is 3.65
[root@b-server tmp]# rsync -avz /etc/services backup@192.168.1.100::lianglab2/ --password-file=/etc/rsync.password
sending incremental file list
services
rsync: mkstemp ".services.nUyHxz" (in lianglab2) failed: Permission denied (13) #有一個報錯,很明顯是權限問題.
sent 99063 bytes received 27 bytes 198180.00 bytes/sec
total size is 362031 speedup is 3.65
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
[root@b-server tmp]#
[root@rsync /]# cd /lianglab
[root@rsync lianglab]# ls
services
[root@rsync lianglab]#
[root@rsync /]# cd /lianglab
drwxr-xr-x 2 rsync rsync 4096 Jan 25 06:54 lianglab
drwxr-xr-x 2 root root 4096 Jan 25 06:50 lianglab2
[root@rsync /]# chown -R rsync.rsync lianglab2
[root@b-server tmp]# rsync -avz /etc/services backup@192.168.1.100::lianglab2/ --password-file=/etc/rsync.password
sending incremental file list
services
sent 99063 bytes received 27 bytes 198180.00 bytes/sec
total size is 362031 speedup is 3.65
[root@b-server tmp]#shell
=================rsync多目錄多模塊同步=================
========================配置防火牆容許rsync服務。=====================
rsync服務容許的端口 873/tcp端口
[root@rsync lianglab]# netstat -lnt | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 :::873 :::* LISTEN
[root@rsync lianglab]# cat /etc/services | grep rsync | head -2
rsync 873/tcp # rsync
rsync 873/udp # rsync
[root@rsync lianglab]#
rsync防火牆配置
在生產環境下,能夠配置以下三行容許rsync服務,加入到/etc/syscofig/iptables
-A INPUT -s 192.168.1.1/24 -p tcp -m tcp --dport 873 -j ACCEPT
#----容許固定辦公網發佈程序傳輸同步
-A INPUT -是192.168.1.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
#---容許IDC內網網段間鏈接程序傳輸同步
咱們如今就中止掉防火牆
=====================配置防火牆容許rsync服務。=====================服務器
--------------------------------------附加:rsync服務端部署流程回顧:---------------------------------
1、rsync服務端配置流程
一、建立rsync配置文件/etc/rsyncd.conf
二、建立同步的本地目錄/lianglab並根據須要受權,rsync服務的用戶讀寫/lianglab
目錄和/etc/rsync.password爲配置文件中 path = /lianglab/參數的設置
三、帳號及密碼文件配置
echo "backup:lianglab" > /etc/rsync.password
chmod 600 /etc/rsync.password
提示:
1>/etc/rsync.password 爲配置文件中 secrets file = /etc/rsync.password 參數的配置
2>帳號backup 爲/etc/rsyncd.password 爲配置文件中auth users = backup參數的配置
四、啓動rsync服務
rsync --daemon
echo "/usr/bin/rsync --daemon">>/etc/rc.local
cat /etc/rc.loacl | grep daemon
ps -ef | grep rsync
###重啓
pkill rsync
rsync --daemon
ps -ef | grep rsync
2、rsync 客戶端配置流程
echo "lianglab" >/etc/rsync.password
chmod 600 /etc/rsync.password
3、rsync客戶端命令操做細節。
推送、抓取方法:
推送操做。
rsync -vzrtopgP /tmp backup@192.168.1.100::lianglab/ --password-file=/etc/rsync.password
rsync -avz -P --delete /tmp backup@192.168.1.100::lianglab/ --password-file=/etc/rsync.password
抓取操做。
rsync -zvz backup@192.168.1.100::lianglab/ /tmp --password-file=/etc/rsync.password
--------------------------------------附加:rsync服務端部署流程回顧:---------------------------------網絡
--------------------------------------附加:rsync自我模擬排錯思路及實戰:---------------------------------------
rsync服務端排錯思路
一、查看rsync服務配置文件路徑是否正確、正確的默認路徑爲/etc/rsyncd.conf
二、查看配置文件裏host allow。 host deny,容許的ip網段是否容許客戶端訪問的ip網段。
三、查看配置文件中path參數的路徑是否存在,權限是否正確(正常應爲配置文件中的UID參數對應的屬主和組)
四、查看rsync服務是否啓動,查看命令爲: ps -f | grep rsync 端口是否存在 netstat -lnt | grep 873
五、查看iptables防火牆和selinux是否開啓容許rsync服務經過,也可考慮關閉。
六、查看服務端rsync配置的密碼文件是否爲600權限,密碼文件格式是否正確。
七、若是是推送數據,要查看下,配置rsyncd.conf文件中用戶是否對模塊下目錄有可讀寫的權限。
rsync客戶端排錯思路
一、查看客戶端rsync配置的密碼文件是否600的權限,密碼文件格式是否正確,注意:僅須要有密碼,而且和服務端的密碼一致。
二、用telnet鏈接rsync服務器ip地址873端口,查看服務是否啓動(可測試服務端防火牆是否阻擋)。telnet 192.168.1.1 873
三、客戶端執行命令時 rsync -avzP rsync_backup@192.168.1.1::lianglab/test /test// --password-file=/etc/rsync.password
此命令細節:尤爲192.168.1.1::lianglab/test/處的雙冒號及隨其後的lianglab爲模塊名稱
--------------------------------------附加:rsync自我模擬排錯思路及實戰:---------------------------------------負載均衡
--------------------------------rsync生產排錯整理個人FAQ--------------------------------
練習中----自我模擬排除,修改配置文件時, 不按正確方法走。看看有什麼錯誤。
[root@b-server tmp]# rsync -avz /etc/services backup@192.168.1.100::lianglab2/ --password-file=/etc/rsync.password
@ERROR: auth failed on module lianglab2
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
解決:這是由於密碼設置錯誤,沒法登錄,檢查下兩端的/etc/rsync.password設置的密碼是否一致。
二、password file must not be other-accessible
continuing without password file
password:
解決:/etc/rsync.password 文件權限屬性不對,應該爲600,執行chmod 600 /etc/rsync.password進行設置。
三、@ERROR:chroot failed
rsync:connection unexpectedly closed (75 bytes read so for)
rsync:error:error in rsync protocol data stream (code 12) at io.c(150)
解決:一般是服務器端的rsyncd.conf中的path參數所設置的備份目錄不存在致使,要先用mkdir 創建好目錄,在受權 chmod -R 777 /lianglab
問題錯誤一:no route to host問題
對方沒開機、防火牆阻擋、經過的網絡上有防火牆阻擋,都有可能。
解決方法:關閉防火牆,或者把防火牆的tcp udp 的873端口打開,容許rsync經過,他們可使用telnet IP 873檢查。ssh
--------------------------------rsync生產排錯整理個人FAQ--------------------------------
附錄1、rsync命令經常使用參數
經常使用參數說明:
-v --verbose 詳細模式輸出,傳輸時的進度等信息。
-z --compress 對備份的文件在傳輸時進行壓縮處理。
-r --recusive 對子目錄以遞歸模式處理
-t --time 保持穩健時間信息
-o --owner 保持穩健屬主信息
-p --perms 保持文件權限
-g --group 保持文件屬組信息
--progress 顯示備份過程
-a --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rtopsD1
-e --rsh=COMMAND 使用的信道協議,指定替代rsh的shell程序,例如:ssh
--exclude=PATTERN 指定排除不須要傳輸的文件模式
-D --devices 保持設備文件信息
-l ----links 保留軟鏈接
-u --update
==============================================socket
參考文獻:老男孩51CTO視頻教程http://edu.51cto.com/course/course_id-875.html
南非螞蟻《高性能Linux服務器構建實戰》一書