.一款快速增量備份工具
Rsync 支援大多數的類 Unix 系統,CentOS7.0圖形介面安裝基本已經安裝了Rsync軟體,可以用yum安裝
格式:rsync [選項] 原始位置 目標位置 常用選項
選項 | 用途 |
---|---|
-a | 歸檔模式,遞迴並保留物件屬性,等同於-rlptgoD |
-V | 顯示同步過程的詳細(verbose)資訊 |
-z | 在傳輸檔案時進行壓縮(compress)-H:保留硬連線檔案 |
-A | 保留ACL屬性資訊 |
–delete | 刪除目標位置有而原始位置沒有的檔案 |
–checksum | 根據物件的校驗和來決定是否跳過檔案 |
格式1: rsync [選項] 使用者名稱@主機地址::共用模組名 目標位置
格式2: rsync [選項] rsync://使用者名稱@主機地址/共用模組名 目標位置
Rsync同步源(指備份操作的遠端伺服器,也稱為備份源)
[root@oracle ~]# vi /etc/rsyncd.conf
uid = nobody ##主賬號為匿名
gid = nobody ##組賬號匿名
use chroot = yes ##家目錄鎖定,鎖定家目錄後無法使用cd命令進入其他目錄
address = 192.168.10.10 ##本地rsync源端地址
max connections = 4 ##最大連線數為4
pid file = /var/run/rsyncd.pid ##pid檔案位置
log file = /var/log/rsyncd.log ##紀錄檔檔案位置
port = 873 ##監聽埠873
hosts allow = 192.168.10.0/24 ##允許存取的網段
[wwwroot] ##共用模組的名稱
path = /var/www/html ##共用目錄
comment = ww.bai.com ##描述資訊,自定義
read only = yes ##唯讀模式
auth users = backuper ##授權的虛擬使用者為backuper(不需要系統建立)
secrets file = /etc/rsyncd_user.db ##認證密碼存放檔案
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ##不進行壓縮的檔案格式型別
[root@oracle ~]# vi /etc/rsyncd_user.db ##編寫使用者資料檔案
backuper:abc123 ##每一行為一個使用者記錄,格式為——使用者名稱:密碼
[root@oracle ~]# chmod 600 /etc/rsyncd_user.db ## 600許可權,不允許其他使用者讀取
[root@oracle ~]# rsync --daemon ##啟動守護行程
[root@oracle ~]# netstat -anupt |grep 873 ##檢視埠狀態
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12109/rsync
tcp6 0 0 :::873 :::* LISTEN 12109/rsync
[root@oracle html]# vi abc
abc
[root@oracle html]# cat abc
this abc
[root@squid ~]# cd /var/www/html
[root@squid html]# ls ##檢視不到檔案,為空
[root@squid html]#
[root@squid html]# rsync -avz rsync://backuper@192.168.10.10/wwwroot /var/www/html
##rsync -avz backuper@192.168.10.10::wwwroot /var/www/html ###該命令效果一樣
Password: ##輸入密碼
receiving incremental file list
./
abc
sent 46 bytes received 118 bytes 36.44 bytes/sec
total size is 9 speedup is 0.05
[root@squid html]# ls ##在此檢視,發現源端的檔案同步到發起端了
abc
[root@squid html]# rm -rf abc ##先刪除abc檔案,方便測試
[root@squid html]# ls
[root@squid html]#
[root@squid html]# vi /etc/server.password ##編寫免互動密碼存放檔案
abc123 ##寫入rsync指定的虛擬使用者backuper的密碼
[root@squid html]# chmod 600 /etc/server.password ##同樣設定600許可權,只允許主人檢視
[root@squid html]# vi /etc/server.password
[root@squid html]# rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html ##免互動同步,--delete會刪除本端與源端檔名不相同的檔案,--password-file指定存放密碼的檔案位置
[root@squid html]# ls
abc
[root@squid html]# cat abc ##同步成功
this abc
[root@oracle ~]# crontab -e ##設定每晚10點執行同步
*/30 22 * * * rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html
[root@oracle ~]# crontab -l
*/30 22 * * * rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html
單靠rsync結合週期計劃任務有很大的侷限性,不能實時的更新,因此產生inotify這款軟體來解決這個瓶頸
安裝inotify-tools輔助工具
inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短期監控,任務完成後再出結果
需要兩臺伺服器:伺服器1(rsync源端)、伺服器2(inotify端)
[root@oracle ~]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@oracle ~]# sysctl -p ##生效
fs.inotify.max_queued_events = 16384 ##監控事件的佇列大小
fs.inotify.max_user_instances = 1024 ##監控的最大範例數
fs.inotify.max_user_watches = 1048576 ##每個範例被監控的最大檔案數
[root@oracle ~]# ls ##檢視inotify軟體包
inotify-tools-3.14.tar.gz
[root@oracle inotify-tools-3.14]# yum -y install gcc gcc-c++ make ##安裝環境
[root@oracle ~]# tar zxvf inotify-tools-3.14.tar.gz -C /opt/ ##解壓軟體包
[root@oracle ~]# cd /opt/inotify-tools-3.14/
[root@oracle inotify-tools-3.14]# ./configure ##直接設定
[root@oracle inotify-tools-3.14]# make && make install ##安裝軟體
[root@oracle ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html & ##後臺執行監控
[root@oracle ~]# cd /var/www/html ##進入html目錄建立檔案
[root@oracle html]# touch test.txt ##建立檔案
[root@oracle ~]#
/var/www/html/ CREATE test.txt ##這裡後臺會有監控提示,建立了test.txt檔案
[root@oracle html]# rm -rf test.txt ## 刪除test.txt檔案
[root@oracle ~]#
/var/www/html/ CREATE test.txt
/var/www/html/ DELETE test.txt ##後臺出現新的提示,刪除了test.txt檔案
[root@oracle opt]# vim /opt/inotify.sh ##編寫監控指令碼
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.password /var/www/html/ backuper@192.168.10.10::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then
$RSYNC_CMD
fi
done
[root@oracle opt]# chmod +x inotify.sh ##給執行許可權
[root@oracle opt]# chmod 777 /var/www/html/ ##給/var/www/html最高許可權,可供讀寫
[root@oracle opt]# ll /var/www/
total 0
drwxrwxrwx. 2 root root 17 Oct 23 22:13 html
### 1.修改/etc/rsyncd.conf中[wwwroot]共用模組設定
[root@oracle opt]# vi /etc/rsyncd.conf
……省略部分
[wwwroot]
path = /var/www/html
comment = ww.bai.com
read only = no ##將這裡的yes改為no,需要能寫
……省略部分
[root@squid html]# chmod 777 /var/www/html ##同樣給與最高許可權
[root@squid html]# ll /var/www/
drwxrwxrwx 2 root root 17 Oct 23 19:16 html
[root@oracle ~]# netstat -anupt |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12109/rsync
[root@oracle ~]# pkill -9 rsync ##關閉程序,重新啟動生效
[root@oracle ~]# netstat -anupt |grep rsync ##程序關閉了
[root@oracle ~]# rsync --daemon ##啟動守護行程
error:failed to create pid file /var/run/rsyncd.pid: File exists ##會提示報錯,pid檔案存在
[root@oracle ~]# rm -rf /var/run/rsyncd.pid ##刪除pid檔案即可
[root@oracle ~]# rsync --daemon ##再次啟動守護行程
【伺服器1(rsync源端)】
[root@oracle ~]# cd /var/www/html/
[root@oracle html]# touch test.txt
[root@oracle html]# ls
test.txt
[root@oracle html]#
【伺服器2(inotify端)】
[root@squid ~]# cd /var/www/html/
[root@squid html]# touch abc.txt
[root@squid html]# ls
abc.txt
[root@squid html]#
兩臺伺服器共用目錄內檔案不一致
【伺服器2(inotify端)】
[root@squid opt]# ./inotify.sh & ##後臺執行指令碼
[1] 10901
[root@squid opt]# cd /var/www/html/
[root@squid html]# touch 123.txt ##在共用目錄中新增新的檔案
[root@squid html]# rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.BUNMxZ" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.cVZqbR" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.wa4qcd" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.33vNF5" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
###注意,這裡的failed提示並不是同步失敗,而是因為rsync伺服器那一端修改了read only = no的引數,rsync程式預設是yes,因此會提示失敗,實際上並不影響
【伺服器1(rsync源端)】
[root@oracle html]# ls ##原本的test.txt檔案被刪除,新增了inotify端的檔案,完全一致狀態
123.txt abc.txt