Linux 實現本、異地遠端資料實時同步功能

大雄45發表於2020-05-06
這篇文章主要介紹了  透過Rsync+Inotify實現本、異地遠端資料實時同步功能,需要的朋友可以參考

Linux 實現本、異地遠端資料實時同步功能Linux 實現本、異地遠端資料實時同步功能

0x0 測試環境
總部生產伺服器與分部備份伺服器要求實現異地資料備份,環境如下
**centos 6.5**
生產伺服器目錄: /home/zytest/files
備份伺服器目錄: /home/zytest/files
使用者 / 密碼: zytest / zytest
0x1 生產伺服器環境搭建
0x1.1 安裝gcc編譯器和rsync
yum install gcc rsync -y
0x1.2 複製inotify到伺服器並解壓
cd /root 
tar xfvz inotify-tools-3.13.tar.gz
0x1.3 進入inotify 目錄安裝
cd inotify-tools-3.13
./configure
make
make install     
 
/usr/local/bin/inotifywait ##檢查是否安裝成功
0x2 備份伺服器環境搭建
0x2.1 安裝 xinetd 和 rsync
yum install xinetd rsync -y
0x3 以下內容兩臺伺服器同步操作
useradd -u 600 zytest 
 passwd zytest    
 zytest
 su - zytest -c 'mkdir /home/zytest/files' ##建立同步目錄
0x4 備份伺服器上配置rsyncd
0x4.1 編輯/etc/xinetd.d/rsync按照以下內容修改
disable  = yes  ==> disable  = no
flags        = IPv6  ==> flags       = IPv4
server_args = --daemon ==> server_args = --daemon --config=/etc/rsyncd.conf
0x4.2 編輯/etc/rsyncd.conf 並新增以下 資訊
uid = root
gid = root
use chroot = no
max connections = 1000
strict mode = yes
port = 873
pid file = /var/run/rsyncd.pid 
lock file = /var/run/rsyncd.lock 
log file = /var/log/rsyncd.log
# following for user "zytest", change for other users
[zytest]
path = /home/zytest
ignore errors
auth users =zytest
secrets file = /home/rsync-dst.ps
read only = no
list = false

Ps: rsyncd 配置檔案在 xinetd上,所以備份伺服器安裝xinetd

0x4.3 把密碼寫入呼叫的密碼檔案並賦予許可權
echo zytest:zytest >> /home/rsync-dst.ps
chmod 600 /home/rsync-dst.ps
0x4.4 透過xinetd啟動rsync
/etc/rc.d/init.d/xinetd restart
0x5 主伺服器上配置inosync 檔案
** ##編輯/root/inosync新增指令碼程式碼**
#!/bin/sh
#chkconfig: 3 78 10
 
#This file exist from compile
if [ ! -f /usr/local/bin/inotifywait ]
then
 echo "cannot start. file inotifywait NOT exist!"
 exit
fi
 
#This file is runnable shell script
if [ ! -f /usr/local/bin/inosync.so.1 ]
then
 echo "contact administrator. inosync.so.1 NOT exist!"
 exit
fi
 
case "$1" in
 'start')
 /usr/local/bin/inosync.so.1 &
;;
 
'stop')
 pid=`ps -ef | grep -v grep | grep "inotifywait" | awk '{print $2}'`
 kill -9 $pid 2>&1
;;
 
'restart')
 $0 stop
 $0 start
;;
 
esac
0x5.2 賦予指令碼許可權,設定開機啟動
chmod a+x /root/inosync
 cp /root/inosync /etc/rc.d/init.d
0x5.3 配置呼叫的主指令碼檔案 /root/inosync.so.1
rhost=**備份伺服器IP**
user=zytest
src=/home/zytest/files
dst=zytest
#dst corresponding to [zytest] in file /etc/rsyncd.conf on dst server
log=/root/inosync.log
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M:%S' --format '%T %w%f %e' -e close_write,create,move,delete,attrib $src | while read files
 do
 echo == rsync begin == >> $log
 rsync -avP --password-file=/home/rsync-src.ps --delete $src $user@$rhost::$dst >> $log 2>&1
 echo -- rsyncd -- >> $log
 date >> $log
 echo "${files} was rsynced " >> $log 2>&1
 done

PS: %T後面有空格 %f和%e之間也有空格

0x5.4 賦予inosync.so.1指令碼許可權,複製到/usr/local/bin
chmod a+x /root/inosync.so.1
cp /root/inosync.so.1 /usr/local/bin
0x5.5 把密碼寫入呼叫的密碼檔案並賦予許可權
echo zytest >> /home/rsync-src.ps
chmod 600 /home/rsync-src.ps
0x6 目標伺服器設定inosync自動啟動並開啟inosync服務
chkconfig --level 3 inosync on
/etc/rc.d/init.d/inosync start
0x7 測試 END

在生產伺服器/home/zytest/files目錄下建立檔案和資料夾,檢視備份儲存是否也同步了檔案和資料夾,同步即成功。
過程可透過日誌檢視

tail -f /root/inosync.log
總結

到此這篇關於Linux 透過Rsync+Inotify實現本、異地遠端資料實時同步功能的文章就介紹到這了

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2690216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章