rsync+inotify實現服務器數據同步

1、什麼是rsyncmysql

rsync,remote synchronize是一款實現遠程同步功能的軟件,它在同步文件的同時,能夠保持原來文件的權限、時間、軟硬連接等附加信息。rsync是用 「rsync算法」提供了一個客戶機和遠程文件服務器的文件同步的快速方法,並且能夠經過ssh方式來傳輸文件,這樣其保密性也很是好,另外它仍是免費的軟件。算法

2、rsync特色sql

一、能更新整個目錄和樹和文件系統;
二、有選擇性的保持符號鏈鏈、硬連接、文件屬於、權限、設備以及時間等;
三、對於安裝來講,無任何特殊權限要求;
四、對於多個文件來講,內部流水線減小文件等待的延時;
五、能用rsh、ssh 或直接端口作爲傳輸入端口;
六、支持匿名rsync 同步文件,是理想的鏡像工具;shell

3、搭建rsync服務器:vim

備份服務器信息:bash

server:192.168.1.161服務器

系統環境:CentOS release 6.5 (Final)ssh

內核版本:2.6.32-431.el6.x86_64工具

客戶端信息測試

rhel:192.168.1.162

系統環境:Red Hat Enterprise Linux Server release 6.5 (Santiago)內核版本:2.6.32-431.el6.x86_64

須要備份的目錄:將客戶端/backup中的內容備份到備份服務器的/backup中

一、數據同步rsync

二、本地打包腳本實現

三、配置定時任務

備份服務器的配置

# yum -y install rsync

rsync版本:rsync.x86_64 0:3.0.6-12.el6

配置文件

  rsync的主要有如下三個配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密碼文件)、rsyncd.motd(rysnc服務器信息)

  服務器配置文件(/etc/rsyncd.conf),該文件默認不存在,請建立它。

具體步驟以下:

# touch /etc/rsyncd.conf #建立rsyncd.conf,這是rsync服務器的配置文件。
# touch /etc/rsyncd.secrets #建立rsyncd.secrets ,這是用戶密碼文件。
# chmod 600 /etc/rsyncd.secrets #將rsyncd.secrets這個密碼文件的文件屬性設爲root擁有, 且權限要設爲600, 不然沒法備份成功!
# touch /etc/rsyncd.motd

編輯/etc/rsyncd.conf文件

# vim  /etc/rsyncd.conf

pid file = /tmp/rsyncd.pid

port = 873

address = 192.168.1.161

uid = root

gid = root

use chroot = yes

read only = yes

hosts allow=192.168.1.0/24

hosts deny=*

max connections = 5

motd file = /etc/rsyncd.motd

log format = %t %a %m %f %b

syslog facility = local3

log file = /tmp/rsync.log

transfer logging = yes

timeout = 300

[mysqldate]

  path = /backup

  list=no

  ignore errors

  auth users = root

  secrets file = /etc/rsyncd.secrets

  comment = zhushi

編輯/etc/ rsyncd.secrets文件

# vim rsyncd.secrets

root:fanjinbao

編輯/etc/rsyncd.motd文件

裏面內容想寫啥就寫啥

啓動rsync的服務

# /usr/bin/rsync -–daemon --config=/etc/rsyncd.conf

--daemon參數方式,是讓rsync以服務器模式運行

--config用於指定rsyncd.conf的位置,若是在/etc下能夠不寫

客戶端配置:

客戶端基本不用配置,直接備份就ok啦

# rsync -azP --delete /backup  root@192.168.1.161:/

常見的選項:

-a,--archive(存檔) 歸檔模式,表示以遞歸的方式傳輸文件,而且保持文件屬性,等同於加了參數-rlptgoD

-z , --compress 表示壓縮傳輸

-P 顯示傳輸進度

--delete 刪除那些目標位置有而原始位置沒有的文件

具體選項及參數說明:

rsync有六種不一樣的工做模式:

一、拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啓動這種工做模式。

二、使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啓動該模式。

三、使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啓動該模式。

四、 從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啓動該模式。

五、從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。

六、列遠程機的文件列表。這相似於rsync傳輸,不過只要在命令中省略掉本地機信息便可。
-a 以archive模式操做、複製目錄、符號鏈接 至關於-rlptgoD

 

rsync中的參數

-r 是遞歸;

-l 是連接文件,意思是拷貝連接文件;-p 表示保持文件原有權限;

-L 複製軟連接文件的原文件

-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 至關於塊設備文件;

-z 傳輸時壓縮;

-P 傳輸進度;

-v 傳輸時的進度等信息,和-P有點關係,本身試試。能夠看文檔;
-e ssh的參數創建起加密的鏈接。

-u只進行更新,防止本地新文件被重寫,注意二者機器的時鐘的同時

--progress是指顯示出詳細的進度狀況

--delete是指若是服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致

--exclude不一樣步的文件

--password-file=/password/path/file來指定密碼文件,這樣就能夠在腳本中使用而無需交互式地輸入驗證密碼了,這裏須要注意的是這份密碼文件權限屬性要設得只有屬主可讀。

4、使用ssh密鑰實現無交互備份。作成腳本,將rhel上的數據,按期備份到server上。

在rhel上生成密鑰對

# ssh-keygen

查看生成的公鑰和私鑰:

[root@rhel backup]# ls /root/.ssh/

id_rsa  id_rsa.pub  known_hosts

將公鑰上傳到server數據源

# ssh-copy-id root@192.168.1.161

或者

# scp /root/.ssh/id_rsa.pub  root@192.168.1.161:/root/.ssh/authorized_keys

注:若是使用scp命令必須兩臺機器均可以用scp命令,不然不能使用

5、配置rsync+inotify實現實時同步

inotify概述:

Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各類變化狀況,如文件存取、刪除、移動等。利用這一機制,能夠很是方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時做出響應。

使用rsync工具與inotify機制相結合,能夠實現觸發式備份(實時同步),只要原始位置的文檔發生變化,則當即啓動增量備份操做,不然處於靜態等侍狀態,這樣一來,就避免了按固定週期備份進存在的延遲性、週期過密等問題。

安裝inotify-tools-3.13.tar.gz

# tar zxvf inotify-tools-3.13.tar.gz

# cd inotify-tools-3.13

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

# make

# make install

設置inotify-tools的環境變量

# vim .bash_profile

加入imotify的路徑/usr/local/inotify-tools/bin

# source .bash_profile

執行監控:

# inotifywait -mrq -e create,move,delete,modify /backup

報錯:

error while loading shared libraries: libinotifytools.so.0

解決辦法:

# ln -sv /usr/local/inotify-tools/lib/libinotify* /usr/lib/

# ln -s /usr/local/inotify-tools/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

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

而後在執行監控

# inotifywait -mrq -e create,move,delete,modify /backup

就能夠了

同步腳本:

# vim backup.sh

#!/bin/bash

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

do

   rsync -azP --delete /backup root@192.168.1.161:/

done

# chmod 755 backup.sh

./backup.sh &

6、利用服務方式同步數據

編輯服務端的配置文件

# vim /etc/rsyncd.conf不用懷疑就用這個命令,沒有就增長

添加以下內容:

port=8730

log file=/var/log/rsync.log

pid file=/var/run/rsync.pid

[fanjinbao]

path=/backup

use chroot=true

max connection=4

read only=yes

list=yes

uid=root

gid=root

auth users=root

secrets file=/etc/rs.passwd

hosts allow=192.168.1.162

注意:修改文件後不須要重啓服務

建立密碼文件:

# vim /etc/rs.passwd

# chmod 400 /etc/rs.passwd

啓動服務:

# rsync --daemon

去客戶端測試:

# rsync -avzP --port 8730 test@192.168.1.161::test/ .

在客戶端指定密碼文件,無交互同步數據

# vim /etc/rsync_passwd編輯密碼文件

# chmod 400 /etc/rsync_passwd設置爲只讀

# rsync -avzP --port 8730 --password-file=/etc/rsync_passwd test@192.168.1.161::test/ .

相關文章
相關標籤/搜索