美股三大股指收高,嗶哩嗶哩下跌 4.1%,網易有道跌近 9%,歡聚集團大跌 11%
rsync(Remote Sync,遠端同步)
是一個開源的快速備份工具,可以在不同主機之間映象同步整個目錄樹,支援增量備份,並保持連結和許可權,且採用優化的同步演算法,傳輸前執行壓縮,因此非常適用於異地備份、映象伺服器等應用。
在遠端同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責響應來自客戶機的rsync同步操作的伺服器稱為同步源。在同步過程中,同步源負責提供檔案的原始位置,發起端應對該位置具有讀取許可權。
配置rsync下行同步操作
systemctl stop firewalld
setenforce 0
1. 配置rsync源伺服器
rpm -q rsync#一般系統已預設安裝
#建立/etc/rsyncd.conf 配置檔案
vim /etc/rsyncd.conf #新增以下配置項
uid = nobody #nobody表示匿名使用者,也可以指定root等
gid = nobody
use chroot = yes #禁錮在源目錄
address = 192.168.150.10 #監聽地址,為本地IP
port 873 #預設監聽埠tcp/udp 873,可通過cat /etc/servicesIgrep rsync檢視
log file = /var/log/rsyncd.log #日誌檔案位置
pid file= /var/run/rsyncd.pid #存放程序ID的檔案位置
hosts allow = 192.168.150.0/24 #允許訪問的客戶機地址,多IP用空格分割
[wwwroot ] #自定義共享模組名稱
path = /var/www/html #源目錄的實際路徑
comment = Document Root of www.kgc.com #只做為一個模組備註
read only = yes #是否為只讀
dont compress= *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的檔案型別,設定在全域性配置中表示所有模組
auth users = backuper #授權賬戶,多個賬號以空格分隔
secrets file = /etc/rsyncd_users.db #存放賬戶資訊的資料檔案
2. 為備份賬戶建立資料檔案
#如果採用匿名的方式,只要將其中的"auth users"和"secrets file"配置項去掉即可
vim /etc/rsyncd_users.db
backuper:123456 #無須在系統建立同名使用者
chmod 600 /etc/rsyncd_users.db
3. 保證所有使用者對源目錄/var/www/html 都有讀取許可權
chmod +r /var/www/html/
ls-ld /var/www/html/
4. 啟動 rsync 服務程式
rsync --daemon #啟動 rsync 服務,以獨立監聽服務的方式(守護程序)執行
netstat -anpt |grep rsync
#關閉 rsync 服務
kill$(cat /var/run/rsyncd.pid)#殺死該程序
rm -rf /var/run/rsyncd.pid #還需刪除之前的pid檔案,否則下次啟動會失敗
5. 發起端進行同步操作
#檢查rsync是否安裝
rpm -q rsync
同步操作
基本格式∶rsync [選項]原始位置 目標位置
常用選項
-r |
遞迴模式,包含目錄及子目錄中的所有檔案 |
-l |
對於符號連結檔案仍然複製為符號連結檔案 |
-v |
顯示同步過程的詳細(verbose)資訊 |
-z |
在傳輸檔案時進行壓縮(compress) |
-a |
歸檔模式,保留檔案的許可權、屬性等資訊,等同於組合選項"-rlptgoD" |
-p |
保留檔案的許可權標記 |
-t |
保留檔案的時間標記 |
-g |
保留檔案的屬組標記(僅超級使用者使用) |
-o |
保留檔案的屬主標記(僅超級使用者使用) |
-H |
保留硬連線檔案 |
-A |
保留 ACL屬性資訊 |
-D |
保留裝置檔案及其他特殊檔案 |
--delete |
刪除目標位置有而原始位置沒有的檔案 |
--checksum |
根據校驗和(而不是檔案大小、修改時間)來決定是否跳過檔案(檢驗檔案完整性決定是否跳過) |
--password-file |
指定執行同步操作的密碼,實現免互動執行操作 |
示例:將指定的資源下載到本地/opt目錄下進行備份
格式一∶
rsync -avz [email protected]::wwwroot /opt/
Password: #輸入授權的密碼123456
#backuper為源主機授權的賬號名,@源主機IP,“::”後面跟上模組名,則同步的為wwwroot模組的源路徑,最後加上指定的存放的本地路徑
格式二∶
rsync -avz rsync://[email protected]/wwwroot /opt/
免互動格式配置
echo "123456" >/etc/server.pass
chmod 600 /etc/server.pass
#可以新增到計劃性任務在連線數較少的時間段定時執行同步備份的操作
crontab-e
30 1 ***/usr/bin/rsync-az--delete--password-file=/etc/server.pass [email protected]::wwwroot /opt/
#為了在同步過程中不用輸入密碼,需要建立一個密碼檔案,儲存backuper使用者的密碼,如/etc/server.pass。在執行rsync同步時使用選項"--password-file=/etc/server.pass"指定即可。
systemctl restart crond #確保計劃任務服務的開啟
systemctl enable crond
rsync+inotfiy實時同步
定期同步的不足
執行備份的時間固定,延遲明顯、實時性差
當同步源長期不變化時,密集的定期任務是不必要的
實時同步的優點
一旦同步源出現變化,立即啟動備份
只要同步源無變化,則不執行備份
inotify
Linux核心的inotify機制,從版本2.6.13開始提供,可以監控檔案系統的變動情況,並作出通知迴應
輔助軟體:inotify-tools
使用inotify通知介面,可以用來監控檔案系統的各種變化情況,如檔案存取、刪除、移動、修改等。利用這一機制,可以非常方便地實現檔案異動告警、增量備份,並針對目錄或檔案的變化及時作出響應。
將inotify機制與rsync工具相結合,可以實現觸發式備份(實時同步),即只要原始位置的文件發生變化,則立即啟動增量備份操作,否則處於靜默等待狀態。這樣,就避免了按固定週期備份時存在的延遲性、週期過密等問題。
因為 inotify 通知機制由 Linux 核心提供,因此主要做本機監控,在觸發式備份中應用時更適合上行同步。
rsync+inotfiy實時同步配置(發起端配置,上行同步)
1.修改rsync源伺服器配置檔案
vim /etc/rsyncd.conf
read only= no #關閉只讀,上行同步需要可以寫
。。。。。。
kill $(cat/var/run/rsyncd.pid)#重啟rsync服務
rm -rf /var/run/rsyncd.pid
rsync --daemon
netstat -anpt|grep rsync
chmod 777 /var/www/html/#給予該目錄所有許可權方便執行讀寫操作
2.調整發起端的inotify 核心引數(優化)
在Linux核心中,預設的inotify機制提供了三個調控引數∶max_queue_events(監控事件佇列,預設值為16384)、max_user_instances(最多監控例項數,預設值為128)、max_user_watches(每個例項最多監控檔案數,預設值為8192)。當要監控的目錄、檔案數量較多或者變化較頻繁時,建議加大這三個引數的值。
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl-p
3.發起端安裝inotify-tools
用 inotify 機制還需要安裝inotify-tools,以便提供 inotifywait、inotifywatch 輔助工具程式,用來監控、彙總改動情況。
inotifywait∶可監控modify(修改)、create(建立)、move(移動)、delete(刪除)、attrib(屬性更改)等各種事件,一有變動立即輸出結果。
inotifywatch∶可用來收集檔案系統變動情況,並在執行結束後輸出彙總的變化情況。
#解壓軟體包進行原始碼編譯安裝
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
4. 執行監控操作
可以先執行"inotifywait"命令,然後另外再開啟一個新終端向/var/www/html 目錄下新增檔案、移動檔案,在原來的終端中跟蹤螢幕輸出結果測試效果
inotifywait -mrq -e modify,create,move,delete /var/www/html
選項"-e" |
用來指定要監控哪些事件 |
選項"-m" |
表示持續監控 |
選項"-r" |
表示遞迴整個目錄 |
選項"-q" |
簡化輸出資訊 |
5. 在發起端編寫觸發式同步指令碼
注意,指令碼名不可包含rsync字串,否則指令碼不生效
vim /opt/aaa.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/" $INOTIFY_CMD | while read DIRECTORY EVENT FILE ##while判斷是否接收到監控記錄 do if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果未開啟同步操作則執行 $RSYNC_CMD fi done
chmod +x /opt/aaa.sh
chmod 777/var/www/html/
chmod +x/etc/rc.d/rc.local
echo'/opt/aaa.sh'>>/etc/rc.d/rc.local#加入開機自動執行
上述指令碼用來檢測本機/var/www/html目錄的變動情況,一旦有更新觸發rsync 同步操作,上傳備份至伺服器192.168.150.10的wwwroot 共享目錄下。
觸發式上行同步的驗證過程如下∶
(1)在本機執行/opt/aaa.sh指令碼程式。
(2)切換到本機的 /var/www/html目錄,執行增加、刪除、修改檔案等操作。
(3)檢視遠端伺服器中的 wwwroot目錄下的變化情況。
使用rsync來實現快速刪除大量檔案
假如要在linux下刪除大量檔案,比如100萬、1000萬,像/usr/local/nginx/proxy_temp的nginx快取等,那麼rm-rf*可能就不好使了,因為要等待很長一段時間。在這種情況下我們可以使用rsync來巧妙處理。rsync實際用的是替換原理。
先建立一個空的資料夾
mkdir /home/aaa
用rsync刪除目標目錄
rsync --delete-before-a -H -v--progress --stats /home/blank//var/www/html/
這樣目標錄很快就被清空了,注意,目錄後面需要/結尾,否則可能執行失敗
選項說明∶
--delete-before:-before接收者在傳輸之前就進行的操作,--delete刪除目標位置有而原始位置沒有的檔案,結合起來就是:接收者在傳輸之前進行刪除操作
-a:歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性
-H:保持硬連線的檔案
-v:詳細輸出模式
--progress:在傳輸時顯示傳輸過程
--stats:給出某些檔案的傳輸狀態