rsync-inotify 數據實時同步介紹與 K8s 實戰應用

本文轉自大數據老司機的博客,原文:https://www.cnblogs.com/liugp/p/16618055.html,版權歸原作者所有。歡迎投稿,投稿請添加微信好友:cloud-native-yang

rsync 概述

rsync(remote sync) 遠程同步rsync 是 linux 系統下的數據鏡像備份工具。使用快速增量備份工具 Remote Sync 可以遠程同步,支持本地複製,或者與其他 SSH、rsync 主機同步。已支持跨平臺,可以在 Windows 與 Linux 間進行數據同步。rsync 監聽端口:873,rsync 運行模式:C/S

rsync 優缺點

1)優點

2)缺點

解決方法:rsync+inotify

rsync+inotify 配置與安裝

b4nNCA

1)rsync 安裝

yum -y install rsync

2)rsync 配置

cat >/etc/rsyncd.conf<<EOF
uid = root
gid = root
#禁錮在源目錄
use chroot = yes
#監聽地址,在另外的機器上,記得修改   
address = 192.168.0.113
#監聽地址tcp/udp 873,可通過cat /etc/services | grep rsync查看     
port 873
#日誌文件位置
log file = /var/log/rsyncd.log
#存放進程 ID 的文件位置
pid file = /var/run/rsyncd.pid
#允許訪問的客戶機地址
hosts allow = 192.168.0.0/16
#共享模塊名稱
[nfsdata]
#源目錄的實際路徑           
path = /opt/nfsdata
comment = Document Root of www.kgc.com
#指定客戶端是否可以上傳文件,默認對所有模塊爲 true
read only = false
#同步時不再壓縮的文件類型
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#授權賬戶,多個賬號以空格分隔,不加則爲匿名,不依賴系統賬號
auth users = backuper
#存放賬戶信息的數據文件
secrets file = /etc/rsyncd_users.db
EOF

rsyncd.conf 常用參數詳解

zi32Fu

cat >/etc/rsyncd_users.db<<EOF
backuper:123456
EOF
#官方要求,必須賦權600,要不然會有問題
chmod 600 /etc/rsyncd_users.db

rsync 常用命令參數詳解

rsync --help

rsync [選項]  原始位置   目標位置

常用選項    說明
-r    遞歸模式,包含目錄及子目錄中的所有文件
-l    對於符號鏈接文件仍然複製爲符號鏈接文件
-v    顯示同步過程的詳細信息
-z    在傳輸文件時進行壓縮goD
-p    保留文件的權限標記
-a    歸檔模式,遞歸併保留對象屬性,等同於-rlpt
-t    保留文件的時間標記
-g    保留文件的屬組標記(僅超級用戶使用)
-o    保留文件的屬主標記(僅超級用戶使用)
-H    保留硬鏈接文件
-A    保留ACL屬性信息
-D    保留設備文件及其他特殊文件
--delete  刪除目標位置有而原始位置沒有的文件
--checksum  根據對象的校驗和來決定是否跳過文件

3)啓動 rsync 服務

rsync --daemon --config=/etc/rsyncd.conf
netstat -tnlp|grep :873

4)測試驗證

# 在192.168.0.116節點上測試手動同步
# 從遠端【拉取】數據
rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/

# 在192.168.0.113節點上測試手動同步
# 從【推送】數據
rsync -avz /opt/nfsdata/* root@192.168.0.116:/opt/nfsdata/

### 在192.168.0.116節點上測試手動同步,通過【拉取】數據,配置文件配置的模塊,這裏走的是rsync協議,上面走的是ssh協議,只要做了免密就直接推送或拉取數據了。這裏就會用到配置文件裏配置的users用戶了,也是secrets file文件裏配置的其中一個用戶。
#【方式一】
rsync -avz backuper@192.168.0.113::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://backuper@192.168.0.113/nfsdata /opt/nfsdata/

# 在192.168.0.113節點上執行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用戶的密碼,且文件權限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.113::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.113/nfsdata

5)編譯安裝 inotify-tools

1、inotify-tools 概述

在 192.168.0.113 機器上安裝

2、優化 inotify 內核參數

/proc/sys/fs/inotify 目錄下有 max_queued_events、max_user_instances、max_user_watches 這三個文件

echo 65535 > /proc/sys/fs/inotify/max_user_instances
echo 99999999 > /proc/sys/fs/inotify/max_queued_events
echo 99999999 > /proc/sys/fs/inotify/max_user_watches

3、inotify-tools 下載

# 安裝inotify-tools之前,先安裝一下automake和libtool這兩個依賴,不然編譯安裝inotify-tools的時候會報錯。
yum install automake libtool -y

# 當然也得安全編譯工具
yum -y install gcc gcc-c++ make wget

mkdir  /opt/software ; cd /opt/software
wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# 解壓
tar -zxvf inotify-tools-3.14.tar.gz

4、inotify-tools 編譯安裝

cd /opt/software/inotify-tools-3.14
# 編譯安裝
./configure && make && make install

5、編寫觸發式同步腳本

vi /opt/software/inotify-tools-3.14/inotify_rsync.sh

#!/bin/bash
#監聽/opt/nfsdata/ 目錄:
#INOTIFY_CMD變量:持續監控 /opt/nfsdata/ 目錄中的創建,刪除,移動,修改,改變時間的操作
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/nfsdata"
# 注意/tmp/user.pass文件裏只有backuper對應的密碼,而且文件權限只能是600
RSYNC_CMD="rsync -avzH --delete --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.116::nfsdata"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
     $RSYNC_CMD
done

inotifywait 命令常用參數:

執行:

cd /opt/software/inotify-tools-3.14/
chmod +x inotify_rsync.sh
# 啓動腳本
nohup ./inotify_rsync.sh &

rsync+inotify 數據實時同步介紹與實戰就到這裏了,有疑問的小夥伴歡迎給我留言哦~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/VxnDEQ8e3yQOLJi0JwtyjA