掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
rsync(remote sync)?遠程同步,rsync?是linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復(fù)制,或者與其他SSH、rsync主機同步。已支持跨平臺,可以在Windows與Linux間進行數(shù)據(jù)同步。rsync監(jiān)聽端口:873?,rsync運行模式:C/S。
官網(wǎng):https://rsync.samba.org/官方文檔:https://www.samba.org/ftp/rsync/rsync.htmlGitHub地址:https://github.com/WayneD/rsync
解決方法:rsync+inotify
|
IP |
主機名 |
角色 |
|
192.168.0.113 |
k8s-master-168-0-113 |
rsync、 inotify-tools【數(shù)據(jù)源】 |
|
192.168.0.116 |
k8s-master2-168-0-116 |
rsync【備份節(jié)點】 |
yum -y install rsync
cat >/etc/rsyncd.conf<uid = root
gid = root
#禁錮在源目錄
use chroot = yes
#監(jiān)聽地址,在另外的機器上,記得修改
address = 192.168.0.113
#監(jiān)聽地址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
#指定客戶端是否可以上傳文件,默認(rèn)對所有模塊為 true
read only = false
#同步時不再壓縮的文件類型
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#授權(quán)賬戶,多個賬號以空格分隔,不加則為匿名,不依賴系統(tǒng)賬號
auth users = backuper
#存放賬戶信息的數(shù)據(jù)文件
secrets file = /etc/rsyncd_users.db
EOF
rsyncd.conf 常用參數(shù)詳解
|
rsyncd.conf 參數(shù) |
參數(shù)說明 |
|
uid=root |
rsync 使用的用戶。 |
|
gid=root |
rsync 使用的用戶組(用戶所在的組) |
|
use chroot=no |
如果為 true,daemon 會在客戶端傳輸文件前“chroot to the path”。這是一種安全配置,因為我們大多數(shù)都在內(nèi)網(wǎng),所以不配也沒關(guān)系 |
|
max cnotallow=200 |
設(shè)置最大連接數(shù),默認(rèn) 0,意思無限制,負值為關(guān)閉這個模塊 |
|
timeout=400 |
默認(rèn)為 0,表示 no timeout,建議 300-600(5-10 分鐘) |
|
pid file |
rsync daemon 啟動后將其進程 pid 寫入此文件。如果這個文件存在,rsync 不會覆蓋該文件,而是會終止 |
|
lock file |
指定 lock 文件用來支持“max connections”參數(shù),使得總連接數(shù)不會超過限制 |
|
log file |
不設(shè)或者設(shè)置錯誤,rsync 會使用 rsyslog 輸出相關(guān)日志信息 |
|
ignore errors |
忽略 I/O 錯誤 |
|
read notallow=false |
指定客戶端是否可以上傳文件,默認(rèn)對所有模塊為 true |
|
list=false |
是否允許客戶端可以查看可用模塊列表,默認(rèn)為可以 |
|
hosts allow |
指定可以聯(lián)系的客戶端主機名或和 ip 地址或地址段,默認(rèn)情況沒有此參數(shù),即都可以連接 |
|
hosts deny |
指定不可以聯(lián)系的客戶端主機名或 ip 地址或地址段,默認(rèn)情況沒有此參數(shù),即都可以連接 |
|
auth users |
指定以空格或逗號分隔的用戶可以使用哪些模塊,用戶不需要在本地系統(tǒng)中存在。默認(rèn)為所有用戶無密碼訪問 |
|
secrets file |
指定用戶名和密碼存放的文件,格式;用戶名;密碼,密碼不超過 8 位 |
|
[backup] |
這里就是模塊名稱,需用中括號擴起來,起名稱沒有特殊要求,但最好是有意義的名稱,便于以后維護 |
|
path |
這個模塊中,daemon 使用的文件系統(tǒng)或目錄,目錄的權(quán)限要注意和配置文件中的權(quán)限一致,否則會遇到讀寫的問題 |
|
配置/etc/rsyncd_users.db,跟auth users對應(yīng) |
cat >/etc/rsyncd_users.db<backuper:123456
EOF
#官方要求,必須賦權(quán)600,要不然會有問題
chmod 600 /etc/rsyncd_users.db
rsync常用命令參數(shù)詳解
rsync --help
rsync [選項] 原始位置 目標(biāo)位置
常用選項 說明
-r 遞歸模式,包含目錄及子目錄中的所有文件
-l 對于符號鏈接文件仍然復(fù)制為符號鏈接文件
-v 顯示同步過程的詳細信息
-z 在傳輸文件時進行壓縮goD
-p 保留文件的權(quán)限標(biāo)記
-a 歸檔模式,遞歸并保留對象屬性,等同于-rlpt
-t 保留文件的時間標(biāo)記
-g 保留文件的屬組標(biāo)記(僅超級用戶使用)
-o 保留文件的屬主標(biāo)記(僅超級用戶使用)
-H 保留硬鏈接文件
-A 保留ACL屬性信息
-D 保留設(shè)備文件及其他特殊文件
--delete 刪除目標(biāo)位置有而原始位置沒有的文件
--checksum 根據(jù)對象的校驗和來決定是否跳過文件
rsync --daemon --cnotallow=/etc/rsyncd.conf
netstat -tnlp|grep :873
# 在192.168.0.116節(jié)點上測試手動同步
# 從遠端【拉取】數(shù)據(jù)
rsync -avz [email protected]:/opt/nfsdata/* /opt/nfsdata/
# 在192.168.0.113節(jié)點上測試手動同步
# 從【推送】數(shù)據(jù)
rsync -avz /opt/nfsdata/* [email protected]:/opt/nfsdata/
### 在192.168.0.116節(jié)點上測試手動同步,通過【拉取】數(shù)據(jù),配置文件配置的模塊,這里走的是rsync協(xié)議,上面走的是ssh協(xié)議,只要做了免密就直接推送或拉取數(shù)據(jù)了。這里就會用到配置文件里配置的users用戶了,也是secrets file文件里配置的其中一個用戶。
#【方式一】
rsync -avz [email protected]::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://[email protected]/nfsdata /opt/nfsdata/
# 在192.168.0.113節(jié)點上執(zhí)行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用戶的密碼,且文件權(quán)限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* [email protected]::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://[email protected]/nfsdata
在192.168.0.113機器上安裝
在/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
# 安裝inotify-tools之前,先安裝一下automake和libtool這兩個依賴,不然編譯安裝inotify-tools的時候會報錯。
yum install automake libtool -y
# 當(dāng)然也得安全編譯工具
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
cd /opt/software/inotify-tools-3.14
# 編譯安裝
./configure && make && make install
vi /opt/software/inotify-tools-3.14/inotify_rsync.sh
#!/bin/bash
#監(jiān)聽/opt/nfsdata/ 目錄:
#INOTIFY_CMD變量:持續(xù)監(jiān)控 /opt/nfsdata/ 目錄中的創(chuàng)建,刪除,移動,修改,改變時間的操作
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/nfsdata"
# 注意/tmp/user.pass文件里只有backuper對應(yīng)的密碼,而且文件權(quán)限只能是600
RSYNC_CMD="rsync -avzH --delete --password-file=/opt/backuper.pass /opt/nfsdata/* [email protected]::nfsdata"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
$RSYNC_CMD
done
inotifywait命令常用參數(shù):
執(zhí)行
cd /opt/software/inotify-tools-3.14/
chmod +x inotify_rsync.sh
# 啟動腳本
nohup ./inotify_rsync.sh &

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流