1. 程式人生 > >linux:使用rsync和inotify-tools實現檔案實時同步

linux:使用rsync和inotify-tools實現檔案實時同步

首先手頭有兩臺linux伺服器
系統為CentOS
1臺作為主伺服器,另1臺作為同步伺服器(主伺服器上新增/修改/刪除檔案後將會同步給同步伺服器)

首先先檢查主伺服器是否安裝所需的工具

1.檢查rsync是否已經安裝

rpm -qa | grep rsync

這裡寫圖片描述

如果沒有安裝則進行安裝

yum -y install rsync

這裡寫圖片描述
2.檢查 xinetd 是否安裝

rpm -qa | grep xinetd

這裡寫圖片描述
如果沒有安裝則進行安裝

yum -y install xinetd

然後上傳到主服務上,我這裡放在 /home目錄下
解壓

tar zxvf inotify-tools-3.14
.tar.gz

進入資料夾

cd inotify-tools-3.14

配置(我這裡直接安裝在 /home/inotify中了)

./configure --prefix=/home/inotify

編譯安裝

make & make install

如下出現Done就安裝完畢了
這裡寫圖片描述

4.信任連線配置
登入同步伺服器
新建使用者 user-rsync , 密碼隨意

useradd -m user-rsync
passwd user-rsync

然後登入主伺服器,生成祕鑰檔案,注意別漏掉最後的''

ssh-keygen -t rsa -P ''

這裡寫圖片描述

然後把生成的id_rsa.pub拷貝到同步伺服器上,xx.xx.xx.xx為同步伺服器ip
在這之前先在同步伺服器上新建user-rsync資料夾,我放在了 /home 目錄下

cd /root/
scp .ssh/id_rsa.pub [email protected].xx.xx.xx:/home/user-rsync/id_rsa.pub

會提示輸入密碼,輸入剛才建立user-rsync使用者時的密碼。
拷貝完畢後修改使用者許可權,把祕鑰檔案輸入到authorized_keys中(需要我們先自己在user-rsync下建立.ssh資料夾)

chmod 700 /home/lms-rsync/.ssh
cat /home/user-rsync/id_rsa.pub >> /home/user-rsync/.ssh/authorized_keys
chmod 600 /home/user-rsync/.ssh
/authorized_keys

然後登入主伺服器嘗試連線同步伺服器,xx.xx.xx.xx為同步伺服器

ssh [email protected].xx.xx.xx

出現如下圖就表示連線上了,輸入exit退出(我這裡用的使用者名稱是bms-rsync)
這裡寫圖片描述

能夠成功連線同步伺服器後
5.配置檔案同步伺服器
在同步伺服器上也安裝rsync和xinetd
(1) rsync 配置

mkdir /etc/rsyncd                       #建立配置目錄
touch /etc/rsyncd/rsyncd.conf           #建立主配置檔案
chmod 600 /etc/rsyncd/rsyncd.conf     #修改使用者檔案許可權

編輯配置檔案

vi /etc/rsyncd/rsyncd.conf 

內容如下
設定需要同步的目錄改成自己需要進行同步的,我這裡是 /home/filetest

#pid檔案的存放位置
pid file = /var/run/rsync.pid
#日誌檔案位置,啟動rsync後自動產生這個檔案,無需提前建立
log file = /var/log/rsync.log
#支援max connections引數的鎖檔案
lock file=/var/run/rsync.lock
#rsync啟動時歡迎資訊頁面檔案位置
motd file = /etc/rsyncd/rsyncd.motd
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
#自定義名稱
[filetest]
#設定需要同步的目錄
path = /var/filetest/
#模組名稱與[case]自定義名稱相同
comment = filetest
#預設埠
port = 873
#設定rsync執行許可權為root
uid = root
#設定rsync執行許可權為root
gid = root
#設定超時時間
timeout = 600
#最大連線數
max connections = 200
#預設為true,修改為no,增加對目錄檔案軟連線的備份
use chroot = no
#設定rsync服務端檔案為讀寫許可權
read only = no
#不顯示rsync服務端資源列表
list = no

(2)CentOS 預設以 xinetd 方式執行 rsync 服務。rsync 的 xinetd 配置檔案在 /etc/xinetd.d/rsync。
要配置以 xinetd 執行的 rsync 服務需要執行如下的命令:

chkconfig rsync on
vim /etc/xinetd.d/rsync

內容如下

service rsync
{
        disable=no
        socket_type=stream
        wait=no
        user=root
        server=/usr/bin/rsync
        server_args=--daemon --config=/etc/rsyncd/rsyncd.conf 
log_on_failure += USERID
}

(3)配置rsyncd.motd,開始傳送的時候會顯示(備份節點)

vi /etc/rsyncd.motd

內容如下

###############################
#   Hello my owner, file is tranfering.
###############################

(4)啟動服務

service xinetd restart

然後如果你是用root來建立的需要同步的目錄(我這裡是/home/filetest)則需要修改該目錄的許可權,因為我們在同步時是使用剛才建立的user-rsync使用者,這樣我們在同步時會出現許可權不足的問題

cd /home/filetest
chown -R user-rsync .

6.主伺服器測試
然後我在主服務 /home目錄下也新建了一個filetest資料夾
在主伺服器的資料夾 /home/filetest 資料夾中增加檔案 test.txt 。

touch /home/filetest/test.txt

測試同步檔案到同步伺服器
當然資料夾位置可以自己指定

rsync -avH --port=873 --progress --delete /home/filetest/ user-rsync@xx.xx.xx.xx:/home/filetest

這裡寫圖片描述

檢查下是否真的傳過去了
這裡寫圖片描述

7.配置 inotify-tools
當然我們實際使用時不可能上傳了一個檔案然後還要手動執行rsync命令,都是需要實時自動同步的,這時候就需要 inotify-tools了。
主伺服器
(1)修改核心引數(源節點)

vi /etc/sysctl.conf

修改引數,新增

# inotify queue max length
fs.inotify.max_queued_events=99999999
# includ file directory
fs.inotify.max_user_watches=99999999
# user create max instances
fs.inotify.max_user_instances=65535

(2)編寫監控指令碼 inotify.sh

mkdir /usr/local/shell
vi /usr/local/shell/inotify.sh

內容如下
/home/inotify/bin/inotifywait為之前安裝的 inotify-tools位置

#!/bin/bash
#源伺服器同步目錄
src=/home/filetest/
#目標伺服器rsync同步目錄模組名稱
dst=/home/filetest/
/home/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e modify,create,delete,attrib $src | while read file
do
rsync -avH --port=873 --progress --delete $src [email protected]:$dst
done

設定指令碼許可權並啟動指令碼(源節點)

chmod 777 /usr/local/shell/inotify.sh

設定開機啟動(源節點)

echo "/usr/local/shell/inotify.sh &">>/etc/rc.local

重啟主伺服器後測試(當然也可以不重啟,這裡重啟只是檢驗下設定的開機啟動是否有效)
先把之前傳到同步伺服器上的test.txt刪除
然後主伺服器執行

touch /home/filetest/test.txt

再檢視下同步伺服器上是否同步到了該檔案,以後只要往主伺服器上的/home/filetest中放檔案/修改檔案/刪除檔案都會實時自動同步到同步伺服器。我們不需要做其他任何操作。

相關推薦

linux使用rsyncinotify-tools實現檔案實時同步

首先手頭有兩臺linux伺服器 系統為CentOS 1臺作為主伺服器,另1臺作為同步伺服器(主伺服器上新增/修改/刪除檔案後將會同步給同步伺服器) 首先先檢查主伺服器是否安裝所需的工具 1.檢查rsync是否已經安裝 rpm -qa | grep rs

rsync+inotify-toos實現檔案實時同步引數詳解

文章摘自:http://lxw66.blog.51cto.com/5547576/1331048 文章摘自:http://www.cnblogs.com/smail-bao/p/5667287.html rsync 幫助文件:http://man.linuxde.ne

Rsync+inotify實現檔案實時同步#附shell指令碼

強烈推薦先仔細看此文 https://segmentfault.com/a/1190000002427568 實驗環境 centos 7.3 vm2:192.168.221.128 同步伺服器 vm1:192.168.221.129 上傳伺服器 關閉seliunx 關閉防火牆 同步伺服器vm2的配置 yum

【Windows】Windows伺服器之間實現檔案實時同步

Windows伺服器之間實現檔案實時同步? 做公安專案,要實現內外網檔案同步,需要用到同步工具。有一個工具叫 “前置機”。 前置機的原理不是很清楚,應該是通過地址對映過去,然後跟公安內網某個內網IP伺

linuxrsync+inotify實現兩臺伺服器檔案實時同步

假設兩個伺服器: 192.168.0.1 源伺服器  有目錄 /opt/test/ 192.168.0.2 目標伺服器  有目錄 /opt/bak/test/ 實現的目的就是保持這兩個伺服器某個檔案目錄保持實時同步 實現方式: 通過rsync+inotify-too

CentOS6.8使用Rsync+Inotify-tools實現數據實時同步

rsync inotify 說明: 操作系統:CentOS release 6.8 (Final) x86_64 服務器IP:rsync_server(數據源) 10.15.43.100 rsync_client (目標端)

linuxrsync + inotifywait 實現【準實時同步

直接上指令碼 #!/bin/bash export PATH=./sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATH src=/tmp1 #dest[email protected]192.168.0.18::dest des=/t

Linux命令中rsynccp之間的區別

rsync:只拷貝那些更新的檔案; cp -u:也可以實現類似效果; 兩者都基本可以滿足備份的需求; 只是一般情況下,用rsync做這類備份之類的事情,更多見; 在備份的操作中,拷貝,過期檔案的刪除是經常要做的事情。 拷貝也有本機拷貝,拷貝到別的伺服器等。常用

Linux下的C語言程式設計——系統呼叫readwrite函式實現檔案拷貝

 系統呼叫read和write函式實現檔案拷貝 #include <stdio.h> #include <sys/types.h> #include <sys/st

centos6.5 rsync+inotify實現伺服器之間檔案實時同步

1. rsync的優點與不足 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支援增量備份等優點,通過rsync可以解決對實時性要求不高的資料備份需求,例如定期的備份檔案伺服器資料到遠端伺服器,對本地磁碟定期做資料映象等。 隨著應用系統規模的不斷擴大,對資料的安全性和可靠性也提出的更好的

rsync+inotify實現伺服器之間檔案實時同步

之前做了“ssh信任與scp自動傳輸指令碼”的技術文件,此方案是作為公司裡備份的方法,但在實際的執行中,由於主伺服器在給備份伺服器傳輸的時候,我們的主伺服器需要備份的檔案是實時、不停的產生的,造成不知道主伺服器給備份伺服器傳輸了多少檔案,磁碟空間就那麼大,做備份的原因:一個是為了保持檔案,另外一個是解決主伺

keepalived + rsync +inotify-tools實現雙機熱備

## 1.需求 實現資料交換系統的主備自動切換功能,當資料交換的master主機故障,網路故障以及資料交換mysql服務出現故障時,能自動切換到備機執行。 ## 2.實現思路 採用keepalived+rsync+ inotify雙backup模式,並設定不搶佔資源。當ma

linuxbash: ./*.exe 找不到檔案或目錄找不到libg2c.so.0問題

bash: ./*.exe 找不到檔案或目錄和找不到libg2c.so.0問題 剛剛接觸ubuntu,給自己每次碰到的錯誤留下點痕跡吧。我是win10+ubuntu16.10雙系統,使用天文軟體starlight,第一句話就出錯,執行 ./StarlightCh

rsync+inotify實現上行實時同步

watch data all pre tro 使用 delet 權限 rec rsync:一款開源備份工具;實現不同主機間鏡像同步整個目錄樹;支持增量備份、權限、壓縮等 rsync角色 發起端:負責發起rsync同步,操作客戶機(相當於C端) 備份源:負責響應rsync

rsync+inotify實現資料實時同步

主伺服器192.168.222.4 CentOS7 從伺服器192.168.222.5 CentOS6 實時同步/home/data1目錄到從伺服器 從伺服器192.168.222.5操作 # yum -y install rsync* 建立rsyncd.conf檔案 vim /et

inotify+rsync檔案實時同步

需要程式碼釋出伺服器與需要同步的伺服器 釋出伺服器上下載 在程式碼釋出伺服器上安裝inotify,執行如下命令 wget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz ta

Linux伺服器間檔案實時同步實現

使用場景 現有伺服器A和伺服器B,如果伺服器A的指定目錄(例如 /home/paul/rsync/ )中的內容發生變更(增刪改和屬性變更),實時將這些變更同步到伺服器B的目標目錄中(例如 /home/paul/rsync/ )。 資料映象備份工具Rsync Rsy

Linux 之 使用者組的配置檔案

使用者配置檔案(使用者資訊):/etc/passwd 含義:使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登陸shell 組配置檔案(組資訊):/etc/group 含義:組名:口令:組標識號:組內使用者列表(使用者列表被處理,這裡不顯示) 口

伺服器架構inotify+rsync檔案實時同步

釋出伺服器上下載 wget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 在程式碼釋出伺服器上安裝inotify,執行如下命令 tar xzvf inotify-tools-3.14.t

linux下docker主機之間的檔案拷貝

從主機複製到容器sudo docker cp host_path containerID:container_path 從容器複製到主機sudo docker cp containerID:container_path host_path