Rsync+inotify 實現實時同步數據文件

什麼是Rsync?shell

rsync能夠實現增量備份,配合inotify能夠實現時事的數據備份vim


Rsync的三種工做模式安全

1)本地備份,至關於 cp 命令bash

將 /etc/hosts 文件拷貝到 /tmp/ 目錄下網絡

rsync -avz /etc/hosts /tmp/ssh

刪除一個目錄ide

先新建一個空目錄,而後使用 rsync 命令同步測試

mkdir /zhaoui

添加 --delete參數,目錄 zhao 爲空spa

rsync --delete /zhao/ /tmp/

命令解釋:之前面的目錄爲準,前面目錄有啥後面目錄有啥,前面目錄沒有的,後面目錄也不能有

2)經過網絡遠程 shell

push(推)

將本地的 /tmp/ 目錄中的內容推到 192.168.133.130 的 /opt/ 目錄下

rsync -avzP -e 'ssh -p 22' /tmp/ root@192.168.133.130:/opt/

pull(拉)

將 192.168.133.130 的 /tmp/ 目錄下的文件拉到本地的 /opt/ 目錄下

若是下面的命令 /tmp/ 寫爲 /tmp 則拉去的是 tmp 的整個目錄

rsync -avzP -e 'ssh -p 22' root@192.168.133.130:/tmp/ /opt/

3)daemon模式

daemon是咱們平時工做中最長用的一種模式,本篇文章也主要是介紹的daemon模式


rsync 客戶端的經常使用參數

-a 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性

-v 詳細模式輸出,傳輸時的進度等信息

-z 傳輸時進行壓縮以提升傳輸效率

-r 對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸,注意是小寫r

-t 保持文件時間信息

-o 保持文件屬主信息

-p 保持文件權限

-g 保持文件屬組信息

-P 顯示同步的過程及傳輸時的進度等信息

-D 保持設備文件信息

-l 保留軟鏈接


配置 daemon 模式

在配置 daemon 模式前須要準備兩臺虛擬機,個人虛擬機是CentOS6.7 64位

兩臺的系統都同樣,詳細截圖以下

uname -r

cat /etc/redhat-release      

p_w_picpath

正常狀況下系統默認就已經安裝 rsync,因此咱們須要先檢查一下兩臺機器是否已經安裝

這裏我只截圖了一張,可是兩臺必須都有 rsync 哈

rpm -qa | grep rsync

p_w_picpath


rsync daemon 端操做以下

rsync 默認沒有配置文件,那麼咱們就手動在 daemon 端建立配置文件

touch /etc/rsyncd.conf

編輯 rsyncd.conf 文件

vim /etc/rsyncd.conf

文件內容以下

#Rsync server

#yuci

uid = rsync

gid = rsync

use chroot = no

max connections = 2000

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 192.168.0.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

###################################

[backup]

comment = www by yuci

path = /backup


添加 rsync 用戶

useradd -s /sbin/nologin -M rsync

啓動 rsync

rsync --daemon

檢查 873 端口是否開啓

netstat -tlunp | grep 873

p_w_picpath


建立共享目錄

mkdir /backup

並將 /backup 目錄的屬主改成 rsync 用戶

chown -R rsync /backup/

Image

由於後面還須要用到 inotify 配合腳本作實時同步,因此須要建立一個密碼文件

用戶就是以前 rsyncd.conf 文件中的 auth rsync 用戶

echo "rsync_backup::123456" > /etc/rsync.password

Image

安全考慮還須要更改該文件的權限

chmod 600 /etc/rsync.password

Image

將該服務加到開機自動中

echo "rsync --daemon" >> /etc/rc.local

tail -1 /etc/rc.local

Image

到此爲止,rsync 的 daemon 端操做完成


rsync 客戶端的操做

仍是在 client 端查看系統中安裝了 rsync 軟件

rpm -qa | grep rsync    

p_w_picpath


建立一個密碼文件,內容只須要有密碼便可

由於咱們下面鏈接時,必需要指定鏈接的用戶,並修改這個文件的權限

echo "123456" > /etc/rsync.password

chmod 600 /etc/rsync.password


如今開始測試服務是否搭建成功,在測試前介紹一下環境

服務端:daemon  地址 192.168.133.131

客戶端:client  地址 192.168.133.130

如今我在 client 端測試推送功能,在 133.130 機器的 /tmp/ 目錄裏我建立了從1到5的5個目錄,嘗試推送到 133.131 的 /backup 目錄中

rsync -avz /tmp/ rsync_backup@192.168.133.131::backup --password-file=/etc/rsync.password

p_w_picpath

在 133.131 上查看 /backup 目錄

p_w_picpath

推送成功。      


繼續返回到 133.130 上測試拉取服務

我將 133.130 的 /tmp 目錄清空,嘗試拉取 133.131 上的 /backup 目錄中的文件

rsync -avz rsync_backup@192.168.133.131::backup /tmp/ --password-file=/etc/rsync.password

p_w_picpath

拉取成功。

能夠經過如下腳本配合定時任務完成簡單的數據備份


腳本內容以下

#!/bin/bash

path=/backup

dir="`ifconfig eth0 | awk -F '[ :]+' 'NR==2 {print $4}'`_$(date +%F)"

mkdir $path/$dir -p && \

/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) && \

/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) && \

rsync -az $path/ rsync_backup@192.168.133.131::backup/ --password-file=/etc/rsync.password

定時任務,每一小時同步一次增量備份(定時任務作好寫絕對路徑)

00 01 * * * /bin/sh /root/bak.sh > /dev/null 2>&1

每一小時同步一次,在某些狀況下彷佛達不到預期的標準,那麼就須要配合 inotify 進行實時同步了


安裝 inotify 軟件

安裝 inotify 軟件的前提 rsync 服務安裝成功,能夠在客戶端推送拉取數據

另外:inotify 是在客戶端配置安裝的軟件,別裝錯了

檢查系統的內核版本,必需要在 2.6.16 以上才能夠

uname -r

Image

查看是否有如下三個文件,有這三個文件才表示系統支持 inotify 服務

ls -l /proc/sys/fs/inotify/

Image(1)


編譯安裝 inotify

tar zxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

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

make && make install


作一個軟鏈接,取出版本號

ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify


inotify 安裝目錄下的各目錄介紹

bin   #inotify執行命令(二進制)

include   #inotify程序所需用的頭文件

lib   #動態連接的庫文件

share  #幫助文檔


手動測試監控,下面的實驗是在本機上操做

由於測試監控的是 133.130 上的 /backup 目錄,因此須要建立一個 backup 目錄,監控 create 命令

mkdir /backup

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup

(-m  持續監聽狀態)

在新開一個窗口,在 /backup 目錄下建立文件和目錄,在以前的窗口查看有無反應

在新窗口下操做

touch test.txt

mkdir zhao

Image(2)

在以前的窗口中查看

Image(3)

檢測成功。那麼咱們只須要結合 rsync 的經過推送命令,就能夠實現實時同步了。


最終的實時同步腳本命令

#!/bin/bash

host01=192.168.133.131

src=/backup

dst=backup/

user=rsync_backup

rsync_passfile=/etc/rsync.password

inotify_home=/usr/local/inotify/

#panduan

if [ ! -e "$src" ] \

|| [ ! -e "${rsync_passfile}" ] \

|| [ ! -e "${inotify_home}/bin/inotifywait" ] \

|| [ ! -e "/usr/bin/rsync" ];

then

   echo "Check File and Folder"

   exit 9

fi

${inotify_home}/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete,attrib $src | \

while read line

do

   cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} > /dev/null 2>&1

done

exit 0

相關文章
相關標籤/搜索