天天看點

rsync+inotify實時資料同步

1.yum 安裝rsync

備份伺服器端:

yum install -y rsync

vi /etc/xinetd.d/rsync

<a href="http://s2.51cto.com/wyfs02/M00/8C/27/wKioL1hjsUjRX-9YAABbRJmQ7aE848.png" target="_blank"></a>

yum install -y xinet*

/etc/init.d/xinetd start

<a href="http://s2.51cto.com/wyfs02/M00/8C/27/wKioL1hjsXqxdNZjAAAWFWNhYp0929.png" target="_blank"></a>

以上是安裝服務,很多情況隻用這個指令就可以了,不需要安裝這個服務

 vim /etc/rsyncd.conf      //該rsyncd.conf不存在,需要自己手動建  

port=873

log file=/var/log/rsync.log  #指定日志

pid file=/var/run/rsyncd.pid  #指定pid

[test]    #為子產品名,自定義

path=/root/rsync  # 指定該子產品對應在哪個目錄下

use chroot=true #是否限定在該目錄下,預設為true,當有軟連接配接時,需要改為fasle

max connections=4  # 指定最大可以連接配接的用戶端數

read only=no  //yes指定用戶端對該共享目錄隻有隻讀權限隻能下載下傳,no有讀寫和上傳權限,共享目錄必須有W寫權限才能上傳 

list=true  #是否可以列出子產品名

uid=victor #以哪個使用者的身份來傳輸

gid=victor  #以哪個組的身份來傳輸

auth users=victor #指定驗證使用者名,可以不設定

secrets file=/etc/rsyncd.passwd #指定密碼檔案,如果設定驗證使用者,這一項必須設定

hosts allow=104.193.95.0/24

hosts allow = 104.193.95.63  (也可以寫一個IP,不用寫使用者名跟密碼,) 

mkdir -p /root/rsync

chown victor:victor /root/rsync

/etc/init.d/xinetd restart

rsync --daemon 

vi /etc/rsyncd.passwd

victor:SX3edc!23

chmod 600 /etc/rsyncd.passwd

主伺服器:

SX3edc!23

rsync -avP --password-file=/etc/rsyncd.passwd /etc/passwd [email protected]::test

<a href="http://s3.51cto.com/wyfs02/M00/8C/32/wKiom1hkxlqh467CAABSe-fXua4181.png" target="_blank"></a>

錯誤:

使用者密碼錯誤

檢查主伺服器密碼檔案和從伺服器密碼檔案。

主伺服器密碼檔案 /etc/rsyncd.secrets 格式為: username:password

從伺服器密碼檔案 password.rsync 格式為:password

2.inotify-tools安裝

inotify-tools 是為linux下inotify檔案監控工具提供的一套c的開發接口庫函數,同時還提供了一系列的指令行工具,這些工具可以用來監控檔案系統的事件。 inotify-tools是用c編寫的,除了要求核心支援inotify外,不依賴于其他。inotify-tools提供兩種工具,一是inotifywait,它是用來監控檔案或目錄的變化,二是inotifywatch,它是用來統計檔案系統通路的次數。如果列出的核心版本不低于 2.6.13,系統就支援 inotify。還可以檢查機器的 /usr/include/sys/inotify.h 檔案。如果它存在,表明核心支援 inotify。

下載下傳位址:

1.wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

<a href="http://s4.51cto.com/wyfs02/M00/8C/2F/wKioL1hkzTuj0NxSAAAcFWBdCGw932.png" target="_blank"></a>

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

-rw-r--r-- 1 root root 0 4月  29 08:53 max_queued_events  表示監控事件隊列  (長度)

-rw-r--r-- 1 root root 0 4月  29 08:53 max_user_instances  表示最多監控執行個體數

-rw-r--r-- 1 root root 0 4月  29 08:53 max_user_watches    表示每個執行個體最多監控檔案數

<a href="http://s3.51cto.com/wyfs02/M00/8C/2F/wKioL1hkze_yc3cPAAAu9EoL1sU192.png" target="_blank"></a>

inotify修改數值

vi /etc/sysctl.conf

<a href="http://s3.51cto.com/wyfs02/M01/8C/33/wKiom1hkzo3Ru4z0AAA-ewxqGKw298.png" target="_blank"></a>

在最後

sysctl -p生效

tar xzf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

 ./configure --prefix=/usr/local/inotify-tools

<a href="http://s4.51cto.com/wyfs02/M02/8C/2F/wKioL1hk0GmxeObMAAAQVW_k2VU965.png" target="_blank"></a>

以下就是安裝完成了。

inotifywait 實時監控/home的所有事件(包括檔案的通路,寫入,修改,删除等)

inotifywatch統計檔案系統的事件

<a href="http://s4.51cto.com/wyfs02/M01/8C/3F/wKioL1hmUFTjvi7TAAAR2nfqlKw082.png" target="_blank"></a>

例:rsync+inotify腳本

host=103.242.109.12  #rsync伺服器IP

src=/victor/       #本地監控的目錄

dst1=test         #rsync伺服器上子產品名

user1=victor       #rsync伺服器上的虛拟使用者

<a href="http://s2.51cto.com/wyfs02/M02/8C/42/wKiom1hmUtPxPAYhAABRIN3Fckk318.png" target="_blank"></a>

#!/bin/bash

host=103.242.109.12

src=/victor/

dst1=test

user1=victor

/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src\

| while read files

do

/usr/bin/rsync -avPz --delete --password-file\=/etc/rsyncd.passwd  $src $user1@$host::$dst1

 echo "${files}was rsynced" &gt;&gt;/tmp/rsync.log 2&gt;&amp;1

done

\自動換行, \=轉義

 /root/ifyrsync.sh &amp;

将此腳本加入系統自啟動檔案:

echo /root/ifyrsync.sh &amp;”&gt;&gt;/etc/rc.local

在inotify伺服器的/victor/下建立目錄,看rsync伺服器上的test下是否會同步

錯誤資訊:

1.inotify伺服器上:

syntax or usage error (code 1) at main.c(1238) [sender=3.0.6]

這個一般是伺服器端的目錄不存在或無權限。我遇到的問題就是inotify手寫的腳本有問題,後來複制以前的腳本就解決了。

2.rsync伺服器的日志錯誤:

<a href="http://s1.51cto.com/wyfs02/M02/8C/43/wKioL1hncWiBzcsXAADTjVzDbtQ437.png" target="_blank"></a>

本文轉自 15816815732 51CTO部落格,原文連結:http://blog.51cto.com/68686789/1887088