目錄
一、rsync介紹
1、rsync是什么?
2、rsync同步方式
3、rsync的特性
4、rsync的應(yīng)用場景
5、rsync與cp、scp對比
6、rsync同步源
二、rsync命令
1、常用選項
2、實例:本地復制對比
3、配置源的兩種表示方法
三、配置rsync下行同步
四、rsync實時同步(inotify工具)
1、定期同步的不足
2、實時同步的優(yōu)點
3、Linux內(nèi)核的inotify機制
4、inotify簡介
5、rsync+Inotify介紹
四、配置inotify(上行同步)+rsync 實時同步
五、使用rsync來實現(xiàn)快速刪除大量文件
一、rsync介紹
1、rsync是什么?
- rsync是一款開源的、快速的、多功能的、可實現(xiàn)全量及增量的本地或遠程數(shù)據(jù)同步備份的優(yōu)秀工具。并且可以不進行改變原有數(shù)據(jù)的屬性信息,實現(xiàn)數(shù)據(jù)的備份遷移特性。
- rsync軟件支持跨平臺,適用于unix/ linux/windows等多種操作系統(tǒng)平臺
- rsync是一個快速和非常方便的文件復制工具。它能本地復制,遠程復制,或者遠程守護進程方式復制,它提供了大量的參數(shù)來控制其行為的各個方面,并且允許非常靈活的方式來實現(xiàn)文件的傳輸復制
- 以其delta-transfer算法聞名。
- rsync監(jiān)聽端口:873
- rsync運行模式:C/S
2、rsync同步方式
- 完整備份:每次備份都是從備份源將所有的文件或目錄備份到目的地。
- 差量備份:備份上次完全備份以后有變化的數(shù)據(jù)(針對上次的完全備份,備份過程中不清除存檔屬性) 。
- 增量備份:備份上次備份以后有變化的數(shù)據(jù)(不管是哪種類型的備份,有變化的數(shù)據(jù)就備份,且會清除存檔屬性)
3、rsync的特性
- 可以鏡像保存整個目錄和文件系統(tǒng)
- 可以很容易做到保持原文件的權(quán)限、時間、軟硬連接等
- 無須特殊權(quán)限即可安裝
快速
第一次同步時rsync會復制全部內(nèi)容,但在下一次只傳輸修改過的文件
rsync在傳輸數(shù)據(jù)的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的寬帶安全
可以使用scp、ssh等方式來傳輸文件
也可通過直接socket連接
支持匿名傳輸,以方便進行網(wǎng)站鏡像
4、rsync的應(yīng)用場景
4.1 增量同步
4.2 備份/遷移:可以作為輔助工具
(mysql 主從復制 rsync +inotify,趨于一致 雙向同步,但是只能在并發(fā)量不大的時候可以用)
4.3 假設(shè)mysql 從主機A遷移到主機B(一主兩從模式)
一主兩從模式遷移方案
①確定遷移的時間、業(yè)務(wù)線停止的時間、要寫文檔描述具體操作,要發(fā)郵件審批
②確認遷移后的節(jié)點的環(huán)境問題(資源環(huán)境 + 系統(tǒng)依賴環(huán)境 + mysql內(nèi)部的格式環(huán)境
- 例如自增長,自增長可能會導致主從復制不一致的情況
- 版本遷移問題,比如說低版本向高版本遷移。兩個版本中的差異比較大,數(shù)據(jù)遷移比較重要,需要和研發(fā)溝通,讓研發(fā)開發(fā)一個工具,讓低版本可以轉(zhuǎn)成高版本工具格式,使用工具遷移
③ 如果數(shù)據(jù)庫是相同版本,可以用rsync + inotify持續(xù)同步
④ 測試、之前還要編寫回滾方案
⑤ 提交檢修申請 22:00 - 00:00
5、rsync與cp、scp對比
- cp命令是一種典型的將文件完整的拷貝到一個位置。而rsync是,第一次拷貝,在目標位置沒有的時候,rsync是全量拷貝過去,但是第二次拷貝的時候,只會對差異項進行同步拷貝。所有如果對同一個文件進行二次備份的話,rsync速度會相較于cp而言更快。
- cp只支持本地,而rsync支持遠程
- scp是基于cp原理,也是屬于完整性拷貝文件。假設(shè)rsync和scp拷貝的文件都是第一,目標地址都沒有要同步的文件,此時,這兩者的差異在于,第一個,這個要傳輸?shù)奈募蟛淮?,第二個要看在傳輸?shù)倪^程中,用的帶寬大不大。如果文件不大的情況下,scp是把數(shù)據(jù)從磁盤中的塊存儲提取出來,封裝一下,網(wǎng)絡(luò)傳過去,此時scp更快,如果是更大的文件,比如說40G,帶寬只支持100M的帶寬,scp想要傳輸,需要拆分數(shù)據(jù),一段一段傳輸。而rsync會根據(jù)一個邏輯意義上的空間,把數(shù)據(jù)劃分出來,把數(shù)據(jù)先壓縮再傳輸,所以這種方式而言,帶寬校,文件大,這個時候先壓縮再傳輸會比較快。此時適合用rsync遠程同步。
6、rsync同步源
在遠程同步任務(wù)中,負責發(fā)起 rsync 同步操作的客戶機稱為客戶端,而負責響應(yīng)來自客戶端的 rsync 同步操作的服務(wù)器稱為備份源,也稱之為同步源
在下行同步(下載)中,同步源負責提供文檔的原始位置,發(fā)起端應(yīng)對該位置有讀取權(quán)限
在上行同步(上傳)中,同步源負責提供文檔的目標位置,發(fā)起端應(yīng)對該位置具有寫入權(quán)限
發(fā)起端:負責發(fā)起rsync 同步操作的客戶機叫做發(fā)起端,通知服務(wù)器我要備份你的數(shù)據(jù);
備份源:負責響應(yīng)來自客戶機rsync 同步操作的服務(wù)器叫做備份源,需要備份的服務(wù)器;
服務(wù)端:運行rsyncd服務(wù),一般來說是需要備份的服務(wù)器;
客戶端:存放備份數(shù)據(jù)。
二、rsync命令
格式:rsync [選項] 原始位置 目標位置
1、常用選項
絕大多數(shù)的備份程序要求指定原始位置、目標位置,rsync 命令也一樣。最簡單的 rsync 用法類似于 cp 命令。
例如,可以將文件/etc/fstab、目錄/boot/grub 同步備份到/opt 目錄下,其中“-r”選項表示遞歸整個目錄樹,“-l”選項用來備份鏈接文件。
[root@localhost ~]# rsync /etc/fstab /opt
[root@localhost ~]# rsync -rl /etc/fstab /boot/grub /opt
常用選項 | 解釋 |
---|---|
-v,–verbose | 詳細模式輸出 |
-q,–quiet | 精簡輸出模式 |
-c,–checksum | 打開校驗開關(guān),強制對文件傳輸進行校驗 |
-a,–archive | 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件樹形 |
-z | 在傳輸文件時進行壓縮 |
-r,–recursive | 對子目錄以遞歸模式處理,包含目錄及子目錄中的所有文件 |
-H,–hard-links | 保留硬鏈接 |
-l, --links | 保留軟鏈接 |
–delete | 刪除目標位置有而原始位置沒有的文件(一致性) |
–delete-after | 傳輸結(jié)束以后再刪除 |
-A | 保留ACL屬性信息 |
2、實例:本地復制對比
rsync -avz test/ /opt/:只會拷貝test目錄下面的文件,而不會拷貝test這個目錄
rsync -avz /test?/opt/:會連著目錄一起拷貝到/opt下
#驗證rsync -avz test/ /opt/ 效果
mkdir /test
cd /test/
touch 1.txt 2.txt
cd /
rsync -avz test/ /opt/
cd /opt/
ls
#驗證rsync -avz /test /opt/ 效果
cd /opt/
rm -rf *
rsync -avz /test /opt/
ls
3、配置源的兩種表示方法
第一種:
#用戶名@主機地址: :共享模塊名
rsync -avz backuper@192.168.79.210: :wwwroot /root
#backuper指的是我在同步的時候用的哪個用戶身份
#wwwroot代表的是模塊,模塊下面會寫同步的默認路徑和一些特性,所以我們只需要寫模塊就好了
#/root指的是本地節(jié)點
第二種:
#rsync:/用戶名@主機地址/共享模塊名
rsync -avz rsync: //backuper@192.168.7.210/wwwroot /root
URL:具體的位置點,例如:http://www.baidu.com./class1/men/id01.html
URI:標識的是擁有同一類特性或類型的一個集合 ,例如http://www.baidu.com./class1/men
三、配置rsync下行同步
1、環(huán)境準備
主機 | 操作系統(tǒng) | IP 地址 | 主要軟件 |
---|---|---|---|
Master | CentOS7 | 192.168.59.210 | rsync、httpd |
Slave | CentOS7 | 192.168.59.220 | rsync |
2、將 Master 服務(wù)器數(shù)據(jù)備份到 Slave 服務(wù)器
2.1 配置master主機(192.168.79.210)
第一步:關(guān)閉防火墻并安裝所需軟件
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#關(guān)閉防火墻及安裝機制
yum install -y httpd rsync
#rsync系統(tǒng)一般已默認安裝,安裝httpd是為了生成/var/www/html目錄
(后續(xù)會用到作為共享目錄)
第二步:編輯rsync配置文件
vim /etc/rsyncd.conf
#編輯rsync配置文件
uid = root
gid = root
use chroot = yes
address = 192.168.79.210
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.79.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.zhuo.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
----------------------詳解-------------------------------
uid = root #用戶id,表示共享權(quán)限能執(zhí)行的身份
gid = root #組id
use chroot = yes #開啟,禁錮在源目錄,表示允許在訪問我備份的目錄或文件的時候,使用的角色是root,同時你訪問本地目錄時擁有的也是root權(quán)限
address = 192.168.79.210 #監(jiān)聽地址
port 873 #默認端口號為873
log file = /var/log/rsyncd.log #日志文件存放位置
pid file = /var/run/rsyncd.pid #存放進程id的文件位置
hosts allow = 192.168.79.0/24 #允許訪問的主機網(wǎng)段,有點類似于黑白名單
[wwwroot] #共享模塊的名稱,rsync默認調(diào)用該模塊,默認我調(diào)用的路徑是該模塊指定的路徑
path = /var/www/html #源目錄路徑
comment = Document Root of www.zhuo.com #
read only = yes #是否為只讀
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的文件類型,因為同步時,-avz已經(jīng)進行壓縮
auth users = backuper #授權(quán)用戶,使用wwwroot模塊的用戶是哪個用戶,多個賬戶以空格隔開
secrets file = /etc/rsyncd_users.db #存放賬號信息的數(shù)據(jù)文件,一行一個
第三步:編輯用戶賬號文件并賦權(quán)
vim /etc/rsyncd_users.db
backuper:123123
#編輯用戶賬號文件,固定格式為[名稱:密碼],一行一個
chmod 600 /etc/rsyncd_users.db
#官方要求,最好只是賦權(quán)600!
第四步:開啟服務(wù)
rsync --daemon
#開啟服務(wù)
netstat -natp | grep rsync
#檢測端口號,確認服務(wù)是否成功開啟
cd /var/www/html
#切換至共享目錄下
touch meng.html zhu.html
ls
2.2?配置slave主機(192.168.79.220)
第一步:關(guān)閉防火墻并安裝所需軟件
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#關(guān)閉防火墻及安裝機制
yum install -y rsync
#安裝rsync
?第二步:查看同步
mkdir /abc
cd /abc/
#創(chuàng)建一個目錄/abc,用來同步
rsync -avz backuper@192.168.79.210::wwwroot /abc
#使用rsync同步備份源的同步文件
ls
#查看同步是否成功
第四步:設(shè)置免交互
vim /etc/server.pass
123123
#編輯免交互密鑰文件,第一行為密碼
chmod 600 /etc/server.pass
#給密鑰文件賦權(quán)600
rsync -az --delete --password-file=/etc/server.pass backuper@192.168.79.210::wwwroot /abc
#rsync,使用密鑰文件/etc/server/pass對應(yīng)backuper用戶,IP地址為192.168.59.111的共享模塊文件進行壓縮,并歸檔同步至當前服務(wù)器的/abc目錄下,同時刪除差異內(nèi)容,如果原目標有的,會增加,原目標沒有的,會刪除。保持一致性。
ls /abc
#查看下行同步是否成功
四、rsync實時同步(inotify工具)
1、定期同步的不足
-
執(zhí)行備份的時間固定,延遲明顯、實時性差
-
當同步源長期不變化時,密集的定期任務(wù)是不必要的
2、實時同步的優(yōu)點
- 一旦同步源出現(xiàn)變化,立即啟動備份
- 只要同步源無變化,則不執(zhí)行備份
3、Linux內(nèi)核的inotify機制
- 從版本2.6.13開始提供
- 可以監(jiān)控文件系統(tǒng)的變動情況,并做出通知響應(yīng)
- 輔助軟件:inotify-tools
4、inotify簡介
監(jiān)控文件系統(tǒng)的變動情況,并做出通知響應(yīng)
#調(diào)整inotify內(nèi)核參數(shù)(優(yōu)化)
letc/ sysctl.conf(內(nèi)核參數(shù)配置文件)
inotifywait: ? ?#用于持續(xù)監(jiān)控,實時輸出結(jié)果
inotifywatch: ? #用于短期監(jiān)控,任務(wù)完成后再輸出結(jié)果
max_queue_events ? #監(jiān)控事件隊列大小
max_user instances ? ? ?#最多監(jiān)控實例數(shù),可以看成最多可以監(jiān)控多少個實例
max_user_watches ? ? ? ?#每個實例最多監(jiān)控文件數(shù)#inotifywait格式參數(shù)
常見參數(shù)????????說明
-m??????????????????持續(xù)進行監(jiān)控
-r? ? ? ? ? ? ? ? ? ? 遞歸監(jiān)控所有子對象
-q? ? ? ? ? ? ? ? ? ?簡化輸出信息
-e? ? ? ? ? ? ? ? ? ?指定要監(jiān)控哪些事件類型(*)
5、rsync+Inotify介紹
Linux 內(nèi)核從 2.6.13 版本開始提供了 inotify 通知接口,用來監(jiān)控文件系統(tǒng)的各種變化情況,如文件存取、刪除、移動、修改等。利用這一機制,可以非常方便地實現(xiàn)文件異動告警、 增量備份,并針對目錄或文件的變化及時作出響應(yīng)。
將 inotify 機制與 rsync 工具相結(jié)合,可以實現(xiàn)觸發(fā)式備份(實時同步)——只要原始位 置的文檔發(fā)生變化,則立即啟動增量備份操作;否則處于靜默等待狀態(tài),如下圖所示。這樣,就避免了按固定周期備份時存在的延遲性、周期過密等問題。
因為 inotify 通知機制由 Linux 內(nèi)核提供
因此主要做本機監(jiān)控,在觸發(fā)式備份中應(yīng)用時更適合上行同步
四、配置inotify(上行同步)+rsync 實時同步
1、環(huán)境準備(已配置下行 不影響)
主機 | 操作系統(tǒng) | IP 地址 | 主要軟件 |
---|---|---|---|
rsync源服務(wù)器 | CentOS7 | 192.168.59.210 | rsync、httpd |
rsync客戶機(發(fā)起端) | CentOS7 | 192.168.59.220 | rsync、inotify-tools |
2、配置rsync源服務(wù)器主機(192.168.79.210)
vim /etc/rsyncd.conf
read only = no
#關(guān)閉只讀模式,否則將不可寫入
kill `cat /var/run/rsyncd.pid`
#修改完配置文件需要重啟服務(wù),這里采用直接殺掉進程號的方式
netstat -natp | grep rsync
#檢查一下服務(wù)是否已被終止
rsync --daemon
netstat -natp | grep rsync
#再次開啟服務(wù)并檢查端口號確認
2、優(yōu)化rsync客戶機(發(fā)起端)內(nèi)核參數(shù)(192.168.79.220)
cat /proc/sys/fs/inotify/max_queued_events #監(jiān)控事件隊列
cat /proc/sys/fs/inotify/max_user_instances #最多監(jiān)控實例數(shù)
cat /proc/sys/fs/inotify/max_user_watches #每個實例最多監(jiān)控文件數(shù)
vim /etc/sysctl.conf #加大每個參數(shù)
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
#當要監(jiān)控的目錄、文件數(shù)據(jù)量較多或者變化頻繁時,建議加大參數(shù)值
sysctl -p
#刷新
3、rsync客戶機(發(fā)起端)編譯安裝 inotify-tools???????(192.168.79.220)
yum install -y gcc gcc-c++
#安裝gcc gcc-c++
cd /opt
rz -E
#切換至/opt上傳inotify-tools安裝包
tar zxf inotify-tools-3.14.tar.gz
#解壓
cd /opt/inotify-tools-3.14/
./configure
make -j 4 && make install
#編譯安裝
4、客戶機啟動監(jiān)聽(192.168.79.220)
用 inotify 機制安裝 inotify-tools,提供 inotifywait、inotifywatch 輔助工具程序。
- inotifywait:可監(jiān)控modify(修改)、create(創(chuàng)建)、move(移動)、delete(刪除)、attrib(屬性更改)等各種事件,一有變動立即輸出結(jié)果
- inotifywatch:可用來收集文件系統(tǒng)變動情況,并在運行結(jié)束后輸出匯總的變化情況
#持續(xù)監(jiān)聽對/abc的modify,create,move,delete操作
inotifywait -mrq -e modify,create,delete /abc
#客戶端再開啟一個終端進行操作
首先經(jīng)歷的zhu.html還沒被更改,所以現(xiàn)在交換分區(qū)中先復制一份到內(nèi)存中,等修改后,落地到磁盤,刪除虛擬內(nèi)存、交換分區(qū)
5、客戶機編寫觸發(fā)同步腳本(192.168.79.220)
5.1 編寫腳本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.79.210::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
----詳解----
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/ "
#INOTIFY_CMD變量:持續(xù)監(jiān)控 /opt/abc目錄中的創(chuàng)建,刪除,移動,修改,改變時間的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ xixi@192.168.79.210::wwwroot"
#RSYNC_CMD變量:使用戶xixi,/etc/server.pass 密鑰文件,將 /opt/xcf1 目錄下的文件進行壓縮,歸檔,保留硬鏈接文件同步至 192.168.79.210 的共享模塊定義的目錄 /var/www/html 下,并刪除差異性內(nèi)容,保持一致性
$INOTIFY_CMD | while read DIRECTORY EVENT FILE #持續(xù)監(jiān)控...
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果服務(wù)并未啟動,則執(zhí)行同步
$RSYNC_CMD
fi
done
5.2 賦權(quán)并執(zhí)行
cd /opt/
chmod +x inotify.sh
#給腳本賦權(quán)
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
#設(shè)置開機自啟動
sh -x inotify.sh
#執(zhí)行腳本
6、驗證
#在客戶端手動執(zhí)行腳本
./inotify.sh
#再開啟一個客戶端終端/var/www/html/ 目錄下創(chuàng)建文件test.txt
cd /var/www/html
echo 'this is a test' >> test.txt
#在源服務(wù)器查看是否實時同步
cd /var/www/html
ls
cat test.txt
#在客戶端創(chuàng)建文件、賦予權(quán)限和刪除文件測試
echo 'this is test2' >> test2.txt
chmod 777 test2.txt
rm -rf test.txt
#在源服務(wù)器查看是否實時同步
ls
cat test2.txt
ll
① 手動執(zhí)行腳本,然后再重新開一個終端
?② 在客戶端第二個終端/var/www/html/ 目錄下創(chuàng)建文件test.txt
?③ 在源服務(wù)器進程查看是否完成實時同步
?④ 賦予權(quán)限和刪除文件測試
五、使用rsync來實現(xiàn)快速刪除大量文件
假如要在Linux下刪除大量文件,比如100萬、1000萬,像?/usr/local/nginx/proxy_ temp?
的nginx緩存等,那么?rm -rf *?
可能就不好使了,因為要等待很長一段時間。
在這種情況下我們可以使用rsync來巧妙處理。rsync實際用的是替換原理。
格式:
rsync --delete-before -a -H -v --progress --stats 空文件夾 目標清空文件夾
選項說明:
–delete-before :接收者在傳輸進行刪除操作
-a :歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性
-H :保持硬連接的文件
-v :詳細輸出模式
–progress :在傳輸時顯示傳輸過程
–stats :給出某些文件的傳輸狀態(tài)
實驗過程如下:?
1、新建一個文件夾并創(chuàng)建1w個文件
2、新建一個空文件夾
3、使用rsync刪除目標目錄文件
rsync --delete-before -a -H -v --progress --stats /usr/local/new/ /usr/local/old/
4、驗證:/usr/local/old文件夾已經(jīng)為空文章來源:http://www.zghlxwxcb.cn/news/detail-597355.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-597355.html
到了這里,關(guān)于rsync遠程同步實現(xiàn)快速、安全、高效的異地備份的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!