文件同步 單向rsync 雙向unison 監控inotifywait 免密登陸

一、負載均衡中文件同步必不可少,我這邊選擇rsync來實現文件同步shell

  rsync同步文件機制更適用於單向文件同步,可配合unison實現雙向同步功能。vim

實現同步的兩種方法bash

一:ssh方法服務器

  rsync -avz 用戶名@服務器ip /文件地址 本地目錄負載均衡

  回車ssh

  input passwordui

  

二:rsync同步spa

  首先安裝yum install rsynccode

  建立 /etc/rsyncd.confblog

uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
 
 [data]
         path = /home/cloud-user/rsync
         comment = ftp export area
         read only = yes
         auth users = username
         secrets file = /etc/rsync_user.pas
                                                  

建立用戶密碼文件

vim /etc/rsync_user.pas

username:password

啓動同步功能

rsync --daemon

 

另外一臺服務器同步

rsync -acz username@ip::data 本地目錄
回車
input password

注意:對於auth 失敗;最可能的緣由是rsync_user.pas的權限 必須爲600

對於上行同步和下行同步失敗還有多是由於權限的問題,對於權限有兩道檢測;1:rsync配置文件的對於該用戶的權限爲只讀;2:服務器對於rsync用戶在同步的文件夾的權限不夠;

上行同步

rsync -avz 本地目錄 username@ip:服務器目錄

 

免密登錄

方式一:ssh免密登陸

ssh-keygen -t rsa
//回車、回車、回車

系統會生成.ssh目錄 ,該目錄下有三個文件

  id_rsa : 生成的私鑰文件

  id_rsa.pub : 生成的公鑰文件

  know_hosts : 已知的主機公鑰清單

提交本身的用戶名和密碼去服務器

ssh-copy-id username@ip //回車
input password

而後能夠經過ssh登陸

ssh username@ip

二:rsync免密同步

系統中有一個環境變量RSYNC_PASSWORD 初始爲空

設置RSYNC_PASSWORD密碼

export RSYNC_PASSWORD=password

而後經過rsync同步

rsync -acz username@ip::data 本地目錄

 

若是要實現實時同步須要先監控文件夾中的變化

使用inotifywait

編譯安裝inotify-tools-3.13

開始監控

//監控;監控/home/cloud-user/rsync/ 的增長和刪除操做

inotifywait -mrq -e create,delete /home/cloud-user/rsync/
//同步;將本地home/cloud-user/rsync中的文件同步到改ip下的home/cloud-user/rsync中
rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync

編寫inotifywait.sh腳本文件

#!bin/bash
inotifywait="inotifywait -mrq -e create,delete /home/cloud-user/rsync/"
rsync="rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync"
$inotifywait | while read directory event file
do
    $rsync
done
//執行腳本
bash inotifywait.sh

 rsync 更適合單向同步

若是要實現雙向同步,可以使用unison

yum install unison

編寫腳本inotifywait_unison.sh

#!bin/bash
inotifywait="inotifywait -mrq -e create,delete,modify,move /home/cloud-user/rsync/"
unison="unison -batch /home/cloud-user/rsync/ ssh://IP//home/cloud-user/rsync"
$inotifywait | while read directory event file
do
         $unison
done

注意shell文件權限

執行:

nohup bash inotifywait_unison.sh &

另外一臺服務也是相同操做,注意修改腳本文件中的ip

相關文章
相關標籤/搜索