rsync 推送數據 rsync+inotify實時同步

 

 

把[root@localhost 1 ~] 源服務器上的/var/www/html目錄時實同步到[root@localhost ~2]目標主機上的/web-back目錄中。html

 

概述linux

Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各類變化狀況,如文件存取、刪除、移動等。利用這一機制,能夠很是方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時做出響應。使用rsync工具與inotify機制相結合,能夠實現觸發式備份(實時同步),只要原始位置的文檔發生變化,則當即啓動增量備份操做,不然處於靜態等侍狀態,這樣一來,就避免了按固定週期備份進存在的延遲性、週期過密等問題。git

 

環境  系統centos/6.9github

inotify-tools源端:xuegod-63   IP:192.168.153.128web

目標 端:[root@localhost ~2]   IP:192.168.153.133vim

rsync  包  http://mirrors.163.com/centos/6.9/os/x86_64/Packages/rsync-3.0.6-12.el6.x86_64.rpmcentos

inotify 包  http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
 bash

查看是否支持inotify,從kernel 2.6.13開始正式併入內核。服務器

 

 

[root@localhost 1 ~]# uname -rssh

2.6.32-220.el6.x86_64

[root@localhost 1 ~]# ls /proc/sys/fs/inotify/

max_queued_events  max_user_instances  max_user_watches

注:

在linux內核中,默認的inotify機制提供了三個調控參數:

max_queued_events   #表示監控事件隊列

max_user_instances  #表示最多監控實例數

max_user_watches   #表示每一個實例最多監控文件數

 

查看具體參數值:

[root@localhost 1 ~]# cat  /proc/sys/fs/inotify/max_queued_events 

16384

[root@localhost 1 ~]# cat  /proc/sys/fs/inotify/max_user_instances 

128

[root@localhost 1 ~]#  cat  /proc/sys/fs/inotify/max_user_watches

8192

注:當要監控的目錄、文件數量較多或者變化較頻繁時,要加大這三個參數的值。

例如:可直接修改/etc/sysctl.conf配置文件,將管理隊列設爲32768,實例數設爲1024,監控數設爲9000000(建議大於監控目標的總文件數)

安裝 rsync

[root@localhost 1 ~]# tar zxvf rsync-3.1.2.tar.gz 
[root@localhost 1 ~]# cd rsync-3.1.2
[root@localhost rsync-3.1.2]# ./configure && make  && make install

自改配置文件

[root@localhost 1 ~]# vim /etc/syscrl.conf  #以文件最後,添加如下內容

fs.inotify.max_queued_events = 32768

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 90000000

[root@localhost 1 ~]# sysctl -p  #使修改後的sysctl.conf文件生效

 

安裝inotify-tools-3.13.tar:將擁有inotifywait、inotifywatch輔助工具程序,從而來監控、彙總文件系統改動狀況。

[root@localhost 1 ~]# tar -zxvf inotify-tools-3.13.tar.gz #進行都文件的解壓

[[root@localhost 1 ~]# cd inotify-tools-3.13

[root@localhost ~1 inotify-tools-3.13]# ./configure 

[root@localhost ~1 inotify-tools-3.13]# make

[root@localhost ~1 inotify-tools-3.13]# make  install

 

測試:

使用inotifywait命令監控網站目錄/var/www/html發生的變化。而後在另外一個終端向/var/www/html目錄下添加文件、移動文件,查看屏幕輸出結果。

 

[root@localhost ~1 ]# inotifywait -h   

經常使用參數:

-e  用來指定要監控哪些事件。 

這些事件包括: create建立,move移動,delete刪除,modify修改文件內容,attrib屬性更改。

-m 表示持續監控

-r  表示遞歸整個目錄

-q 表示簡化輸出信息。

 

報錯

inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open

 

shared object file: No such file or directory

 

[root@localhost 1 ~]# find / -name libinotifytools.so.0

/root/inotify-tools-3.14/libinotifytools/src/.libs/libinotifytools.so.0

/usr/local/lib/libinotifytools.so.0

 

 

這裏有兩種可能

操做系統上沒有安裝

操做系統找不到該庫

如圖所示 明明有安裝 說明是操做系統找不到

方法一:
echo "/usr/lib64/mysol" >> /etc/ld.so.conf 

ldconfig

ld.so.conf動態連接庫裝載器,操做系統會根據這裏面寫的路徑去找庫。

ldconfig是告訴操做系統要引入新的變量了,須要從新識別一下。

方法二:

export LD_LIBRARY_PATH=/usr/local/inotify/lib:$LD_LIBRARY_PATH 

/usr/local/inotify/lib爲該源碼包要用的庫的路徑,引入該環境變量的時候操做系統就會去找該變量下的類庫。

 

如今就能找到了

 

 

1.1上打開兩個終端

1終端上開啓監控

[root@localhost ~1 ]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

#開啓的監控具備建立,移動,刪除和修改功能,監控到/var/www/html/下的數據變化‘

 

2終端上進行建立,移動,刪除等命令

[root@localhost 1 ~]# echo aaa > /var/www/html/a.htal

[root@localhost 1 ~]# mkdir /var/www/html/test

[root@localhost 1 ~]# cp /etc/passwd /var/www/html/test/

[root@localhost 1 ~]# rm -rf /var/www/html/test/passwd

 

查看1終端上的數據信息變化

[root@localhost 1 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

/var/www/html/test/ CREATE passwd

/var/www/html/test/ MODIFY passwd

/var/www/html/test/ DELETE passwd

#咱們能夠看到,剛纔在2終端上的命令意義在2終端上一一呈現出來了,這樣就成功的監視了/var/www/html/的數據變化狀況!使用inotifywait輸出的監控結果中,每行記錄中依次包括目錄、事件、文件。據此能夠識別變更狀況。

編寫觸發式同步腳本

 

第一步,

同步時不須要輸入密碼:

[root@localhost 1 ~]發生變化後,直接將發生變化的數據同步到[root@localhost ~2],同步時不須要輸入密碼

同步祕鑰

ssh-keygen -t rsa       ##生成本主機的公鑰

 

 

公鑰生成成功存放在 /root/.ssh/id_rsa.pub

 

生成以後會在用戶的根目錄生成一個 「.ssh」的文件夾 

 進入「.ssh」會生成如下幾個文件

 authorized_keys:存放遠程免密登陸的公鑰,主要經過這個文件記錄多臺機器的公鑰

  id_rsa : 生成的私鑰文件

  id_rsa.pub : 生成的公鑰文件

  know_hosts : 已知的主機公鑰清單

    若是但願ssh公鑰生效需知足至少下面兩個條件:

      1) .ssh目錄的權限必須是700 

     2) .ssh/authorized_keys文件權限必須是600

 

 

[root@localhost.ssh]# scp -p  /root/.ssh/id_rsa.pub root@192.168.153.133:/root/.ssh/authorized_keys

拷貝本身的公鑰到要登陸的服務器153.133上。

 

測試

[root@localhost .ssh]# ssh 192.168.153.133

Last login: Thu Sep 14 16:25:04 2017 from 192.168.153.128

[root@localhost ~]# exit

logout

Connection to 192.168.153.133 closed.

 

#已經成功無需密碼登錄遠程客戶端了

 

 

第二步:

編寫觸發式同步腳本

[root@localhost 1 ~]# vim a.sh

#!/bin/bash

inotifywait -mrq -e create,move,delete,modify /var/www/html/  | while read a b c

do

rsync -azP --delete /var/www/html/ root@192.168.153.133:/web-back

done

 

 

注意:

這裏的rsync連接是默認的ssh端口22 連接 因此ssh端口有改動這裏就要改變爲

rsync -azP --delete -e 'ssh -p xxx' /var/www/html/ root@192.168.153.133:/web-back

給腳本添加課執行權限

[root@localhost 1 ~]# chmod +x a.sh

 

清空一下/var/www/html/下的全部內容

[root@localhost 1 ~]# rm -rf  /var/www/html/*

 

1終端上執行腳本

[root@localhost 1 ~]# ./a.sh

 

2終端上測試—拷貝文件及建立目錄

[root@localhost 1 ~]# cp -r /boot/grub/ /var/www/html/

[root@localhost 1 ~]# mkdir /var/www/html/test

[root@localhost 1 ~]# mkdir /var/www/html/111

 

1終端上查看執行腳本

[root@localhost 1 ~]# ./a.sh

wKiom1j4b6qD1080AAA1X7CBDhA744.png 

看到

1.64上查看目錄

[root@localhost 2 ~]# ls /web-back/

111  grub  test

 

開機啓動監控

[root@localhost 1 ~]# echo '/root/a.sh &' >> /etc/rc.local

 

優化此腳本:

[root@localhost ~1 ]# vim a.sh 

#!/bin/sh

SRC=/var/www/html

DST=root@192.168.153.133:/web-back

inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F  

        do 

                /usr/bin/rsync -ahqzt --delete $SRC $DST

        done

[root@localhost ~1 ]# cp /root/a.sh /opt/inotify_rsync.sh

[root@localhost ~1 ]# echo '/opt/inotify_rsync.sh &'  >> /etc/rc.local

 

 

 另有更完整的 其餘操做 

https://www.linuxidc.com/Linux/2017-05/143462.htm

相關文章
相關標籤/搜索