網站首頁 編程語言 正文
一、rsync簡介
一款快速增量備份工具
- Remote Sync,遠程同步
- 支持本地復制、遠程復制、遠程守護進程式復制,或者與其他SSH、rsync主機同步
- 官方網站:https://rsync.samba.org/
- 以其delta-transfer算法聞名。
- rsync監聽端口:873
- rsync運行模式:C/S
二、rsync同步源
在遠程同步任務中, 負責發起rsync同步操作的客戶機稱為客戶端,而負責 響應來自客戶端的rsync同步操作的服務器稱為備份源, 也稱之為同步源;
- 下行同步(下載)中, 同步源負責提供文檔的原始位置,發起端對該位置有讀取權利;
- 上行同步(上傳)中,同步源負責提供文檔的目標位置,發起端對該位置有寫入權利;
三、rsync特點
可以鏡像保存整個目錄和文件系統
可以很容易做到保持原文件的權限、時間、軟硬連接等
無須特殊權限即可安裝
快速
第一次同步時rsync會復制全部內容,但在下一次只傳輸修改過的文件
rsync在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的寬帶
安全
可以使用scp、ssh等方式來傳輸文件
也可通過直接socket連接
支持匿名傳輸,以方便進行網站鏡像
四、配置rsync源
1、基本思路
建立rsyncd.conf配置文件、獨立的賬號文件
啟用rsync的 --daemon模式
2、配置文件rsyncd.conf
認證配置auth users、secrets file,不加則為匿名
3、獨立的賬號文件
用戶名:密碼
每行一個用戶記錄
獨立的賬號數據,不依賴系統賬號
4、啟用rsync服務
通過 --daemon獨自提供服務,rsync --daemon
執行kill $(cat /var/run/rsyncd.pid)關閉服務
五、同步方式
① 完整備份
每次備份都是從備份源將所有的文件或目錄備份到目的地。
②差量備份
備份上次完全備份以后有變化的數據(針對的是上次的完全備份,備份過程中不清楚存檔屬性)
③增量備份
備份上次備份以后有變化的數據(會清楚存儲屬性)
六、rsync命令
命令使用語法
rsync 【選項】原始位置 目標位置
常用選項
常用選項 | 說明 |
---|---|
-r | 遞歸模式,包含目錄及子目錄中的所有文件 |
-l | 對于符號鏈接文件仍然復制為符號鏈接文件 |
-v | 顯示同步過程的詳細信息 |
-z | 在傳輸文件時進行壓縮 |
-a | 歸檔模式,遞歸并保留對象屬性,等同于-rlptgoD |
-p | 保留文件的權限標記 |
-t | 保留文件的時間標記 |
-g | 保留文件的屬組標記(僅超級用戶使用) |
-o | 保留文件的屬主標記(僅超級用戶使用) |
-H | 保留硬鏈接文件 |
-A | 保留ACL屬性信息 |
-D | 保留設備文件及其他特殊文件 |
–delete | 刪除目標位置有而原始位置沒有的文件 |
–checksum | 根據對象的校驗和來決定是否跳過文件 |
七、配置源的方法
格式一:
#用戶名@主機地址: :共享模塊名
rsync -avz backuper@192.168.4.200: :wwwroot /root
#backuper指的是我在同步的時候用的哪個用戶身份
#wwwroot代表的是模塊,模塊下面會寫同步的默認路徑和一些特性,所以我們只需要寫模塊就好了
#/root指的是本地節點
格式二:
#rsync:/用戶名@主機地址/共享模塊名
rsync -avz rsync: //backuper@192.168.4.200/wwwroot /root
URL:具體的位置點,例如:http://www.baidu.com./class1/men/id01.html
URI:標識的是擁有同一類特性或類型的一個集合 ,例如http://www.baidu.com./class1/men
?
八、配置rsync下行同步
環境配置
主機 | 操作系統 | IP地址 | 軟件 / 安裝包 / 工具 |
---|---|---|---|
Master | CentOS7 | 192.168.61.22 | rsync |
Slave | CentOS7 | 192.168.61.33 | rsync / inotify-tools-3.14.tar.gz |
- 安裝包鏈接:inotify-tools-3.14.tar.gz
- 下行同步:將master服務器數據備份到slave服務器
?
1、Master(192.168.61.22)
#基礎環境配置
systemctl stop firewalld.service
setenforce 0
#配置rsync源服務器
rpm -q rsync
yum -y install rsync
#建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf #添加以下配置
uid = nobody #root
gid = nobody #root
use chroot = yes #禁錮在源目錄
address = 192.168.184.50 #監聽地址
port 873 #監聽端口 tcp/udp 873,可通過 cat /etc/services | grep rsync 查看
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放進程ID的文件位置
hosts allow = 192.168.184.0/24 #允許訪問的客戶機地址
[wwwroot]
path = /var/www/html #源目錄的實際路徑
comment = Document Root of www.ljm.com
read only = yes #是否為只讀
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的文件類型
auth users = backuper #授權賬戶,多個賬號以空格分隔
## secrets file = /etc/rsyncd_users.db #存放賬戶信息的數據文件
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.61.22
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.184.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.wdc.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = wdc
secrets file = /etc/user.db
#如采用匿名的方式,只要將其中的 “auth users” 和 “secrets file”配置項去掉即可
#為備份賬戶創建數據文件
vim /etc/user.db
wdc:123123 #無需建立同名系統用戶
chmod 600 /etc/user.db
#保證所有用戶對源目錄 /var/www/html 都有讀的權限
mkdir -p /var/www/html
chmod +r /var/www/html/
ls -ld /var/www/html/
#啟動 rsync 服務程序
rsync --daemon
netstat -natp | grep rsync
cd /var/www/html
touch aaa.html bbb.html
ls
#關閉 rsync 服務
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
#關閉防火墻及安裝機制
#rsync系統一般已默認安裝,安裝httpd是為了生成/var/www/html目錄(后續會用到作為共享目錄)
#編輯rsync配置文件
#編輯用戶賬號文件,固定格式為[名稱:密碼],一行一個
#官方要求,最好只是賦權600!
#開啟服務、檢測端口號,確認服務是否成功開啟
#切換至共享目錄下,創建文件
2、slave(192.168.61.33)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#關閉防火墻及安裝機制
yum install -y rsync
#安裝rsync
mkdir /abc
cd /abc/
#創建一個目錄/abc,用來同步
rsync -avz backuper@192.168.61.22::wwwroot /abc
#使用rsync同步備份源的同步文件
ls
#查看同步是否成功
vim /etc/server.pass
20210311
#編輯免交互密鑰文件,第一行為密碼
chmod 600 /etc/server.pass
#給密鑰文件賦權600
rsync -az --delete --password-file=/etc/server.pass backuper@192.168.61.22::wwwroot /abc
#rsync,使用密鑰文件/etc/server/pass對應backuper用戶,IP地址為192.168.61.22的共享模塊文件進行壓縮,并歸檔同步至當前服務器的/abc目錄下,同時刪除差異內容,如果原目標有的,會增加,原目標沒有的,會刪除。保持一致性。
ls /abc
#查看下行同步是否成功
#關閉防火墻及安裝機制
#安裝rsync
#創建一個目錄/abc,用來同步
#使用rsync同步備份源的同步文件,并查看是否完成
#編輯免交互密鑰文件,第一行為密碼
#給密鑰文件賦權600
九、發起端(客戶端)配置 rsync+inotify
- 使用inotify通知接口,可以用來監控文件系統的各種變化情況,如文件存取、刪除、移動、修改等。利用這一機制,可以非常方便地實現文件異動告警、增量備份,并針對目錄或文件的變化及時作出響應。
- 將inotify機制與rsync工具相結合,可以實現觸發式備份(實時同步),即只要原始位置的文檔發生變化,則立即啟動增量備份操作;否則處于靜默等待狀態。這樣,就避免了按固定周期備份時存在的延遲性、周期過密等問題。
- 因為 inotify 通知機制由 Linux 內核提供,因此主要做本機監控,在觸發式備份中應用時更適合上行同步。
1.Master 關閉只讀模式并為共享目錄賦權
Master(192.168.61.22)
vim /etc/rsyncd.conf
read only = no
#關閉只讀模式,否則將不可寫入
kill `cat /var/run/rsyncd.pid`
#修改完配置文件需要重啟服務,這里采用直接殺掉進程號的方式
netstat -natp | grep rsync
#檢查一下服務是否已被終止
rsync --daemon
netstat -natp | grep rsync
#再次開啟服務并檢查端口號確認
2.優化 Slave 內核參數
Slave(192.168.61.33)
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.客戶端(192.168.61.33):編譯安裝 inotify-tools
yum install -y gcc gcc-c++
#安裝gcc gcc-c++
cd /opt
#切換至/opt上傳inotify-tools安裝包
tar zxf inotify-tools-3.14.tar.gz
#解壓
cd /opt/inotify-tools-3.14/
./configure
make -j 4 && make install
#編譯安裝
4.客戶端啟動監聽
#持續監聽對/abc的modify,create,move,delete操作
inotifywait -mrq -e modify,create,delete /abc
5、編寫觸發同步腳本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/abc/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/abc/ backuper@192.168.59.111::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 /opt/abc/"
#INOTIFY_CMD變量:持續監控 /opt/abc目錄中的創建,刪除,移動,修改,改變時間的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/abc/ xixi@192.168.59.111::wwwroot"
#RSYNC_CMD變量:使 xixi 用戶,/etc/server.pass 密鑰文件,將 /opt/xcf1 目錄下的文件進行壓縮,歸檔,保留硬鏈接文件同步至 192.168.61.22 的共享模塊定義的目錄 /var/www/html 下,并刪除差異性內容,保持一致性
$INOTIFY_CMD | while read DIRECTORY EVENT FILE #持續監控...
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果服務并未啟動,則執行同步
$RSYNC_CMD
fi
done
----
cd /opt/
chmod +x inotify.sh
#給腳本賦權
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
#設置開機自啟動
sh -x inotify.sh
#執行腳本
cd /opt/abc
touch jingjing.html
rm -rf jiang.html
#創建一個新的html文件并刪除之前的qwe
ls
#再次確認一下
原文鏈接:https://blog.csdn.net/m0_61744194/article/details/125608880
- 上一篇:ELK 日志分析系統的部署
- 下一篇:Python中常用序列數據結構
相關推薦
- 2022-06-10 FreeRTOS實時操作系統隊列基礎_操作系統
- 2024-04-06 @Delete通過批量刪除的方法
- 2022-03-14 C語言撲克牌游戲示例(c語言紙牌游戲)
- 2023-02-10 Docker?跨主機容器間相互訪問的實現_docker
- 2022-08-03 Redis生成全局唯一ID的實現方法_Redis
- 2022-04-08 從頭學習C語言之指針和數組_C 語言
- 2022-06-29 C語言實例梳理講解常用關鍵字的用法_C 語言
- 2022-11-21 Python?Flask框架開發之運用SocketIO實現WebSSH方法詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支