linux伺服器文件實時同步 1 背景說明 在做系統集群部署時,涉及到兩個或多個伺服器之間文件同步.在軟體層面linux服務環境找到以下兩種同步方式 利用linux NFS功能將網路共用文件掛載成本地目錄 採用文件監聽,實時推送 伺服器資源如下 伺服器1 10.2.4.51 ,作為主伺服器 伺服器2 ...
linux伺服器文件實時同步
1 背景說明
在做系統集群部署時,涉及到兩個或多個伺服器之間文件同步.在軟體層面linux服務環境找到以下兩種同步方式
- 利用linux NFS功能將網路共用文件掛載成本地目錄
- 採用文件監聽,實時推送
伺服器資源如下
- 伺服器1 10.2.4.51 ,作為主伺服器
- 伺服器2 10.2.4.52 ,作為從伺服器
2 NFS網路共用配置
2.1 主伺服器
2.1.1 安裝應用包
yum install -y nfs-utils rpcbind #nfs安裝命令 author: herbert qq:464884492
systemctl enable nfs #將nfs設置開機啟動
systemctl enable rpcbind #將rpcbind設置開機啟動
2.1.2 共用配置
主服務建立需要共用的文件夾
mkdir /home/nfs_data # 主服務需要共用的目錄
配置從服務可以訪問主伺服器
vi /etc/exports #author: herbert qq:464884492
設置內容為
/home/nfs_data/ 10.2.4.52(rw,sync,no_root_squash)
重啟服務,註意一定要先啟動 rpcbind
systemctl stop nfs
systemctl stop rpcbind
systemctl start rpcbind
systemctl start nfs
showmount -e # 可以檢查NFS配置是否生效
# 配置正確後,會有一下提示信息
Export list for hk51:
/home/nfs_data 10.2.4.52
2.1.3 防火牆配置
如果伺服器需要開啟防火牆,需要在防火牆添加服務,可以通過firewall-cmd --state
防火牆開啟狀態
firewall-cmd --add-service=nfs --permanent --zone=public
firewall-cmd --add-service=mountd --permanent --zone=public
firewall-cmd --add-service=rpc-bind --permanent --zone=public
firewall-cmd --reload #重新載入配置,使其生效
2.2 從伺服器
2.2.1 應用包安裝
yum -y install nfs-utils
2.2.2 掛載配置
在相同的路徑建立同樣的目錄
mkdir /home/nfs_data # 從服務需要共用的目錄
掛載目錄
mount -t nfs -o sync,noac 10.2.4.51:/home/nfs_data /home/nfs_data #目錄掛載
檢查掛載
df -h #查看掛載
配置開機啟動掛載
vi /etc/fstab #追加內容 10.2.4.51:/home/nfs_data /home/nfs_data/ nfs sync,noac 0 0
3 文件實時監聽同步
3.1 SSH互信配置
主伺服器和從服務分別生成自己的公鑰,命令如下
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 生成證書
cd ~/.ssh/ #切換目錄
touch authorized_keys #生成認證文件
cat id_rsa.pub >>authorized_keys #複製公鑰到認證文件
scp authorized_keys 10.2.4.52:/root/.ssh #遠程複製自己公鑰到對方伺服器
service sshd restart #重啟SSH服務
主伺服器和從伺服器 authorized_keys 文件,保存所有需要免密登錄伺服器的公鑰信息即id_rsa.pub
文件中的值
3.2 同步軟體安裝
主伺服器和從伺服器同時安裝應用包
yum -y install inotify-tools
yum -y install unison #author: herbert qq:464884492
主伺服器從伺服器在相同路徑建立需要實時共用的目錄
mkdir /home/sync_data
3.3 同步腳本編寫
主伺服器(10.2.4.51)監聽同步腳本,文件名 /home/runfilesync.sh
#/bin/bash
dstIp="10.2.4.52"
src="/home/sync_data"
dst="/home/sync_data"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/bin/unison -batch $src ssh://$dstIp/$dst
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
從伺服器(10.2.4.52)監聽同步腳本,文件名 /home/runfilesync.sh
#/bin/bash
dstIp="10.2.4.51"
src="/home/sync_data"
dst="/home/sync_data"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/bin/unison -batch $src ssh://$dstIp/$dst
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
3.4 運行腳本,開機自起
腳本需要後臺運行,啟動命令如下
nohup sh /home/runfilesync.sh &
ps -aux | grep runfilesync #檢查腳本是否在運行
#設置開機啟動 author: herbert qq:464884492
crontab -e #追加內容 @reboot /home/runfilesync.sh
4 效果測試
- 在主伺服器 /home/nfs_data 和 /home/sync_data 兩個文件夾中分別添加
touch 地心俠士.txt
,然後ssh到從服務,可以在從伺服器這兩個文件夾中找到地心俠士.text
- 在從伺服器 /home/nfs_data 和 /home/sync_data 兩個文件夾中分別添加
touch 小院不小.txt
,然後ssh到主服務,可以在主伺服器這兩個文件夾中找到小院不小.text
5 總結
通過軟體或者協議實現實時同步,以上兩種方法各有優劣.採用NFS網路共用協議,必須指定一個網路主節點.採用inotify+unison方式,有點分散式的感覺,無需指定主節點,但同步效果方面和穩定性方面會差一些
文件監聽同步軟體inotify
和 unison
安裝需要編譯環境,安裝時比較麻煩.我這裡提供了rpm
安裝包以及對應依賴包(安裝命令rpm -ivh xxx.rpm
).如果需要請關註公眾號[小院不小],回覆sync
獲取下載連接,或者添加QQ:464884492,獲取
閑暇之餘,做了一款有趣耐玩的消除類微信小游戲地心俠士
,有興趣可到微信搜索地心俠士玩玩,感謝支持
- 轉載請註明來源
- 作者:楊瀚博
- QQ:464884492