Rsync的企業工作場景說明
利用rsync+inotify 實現遠程實時同步配置與文件併發測試
Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。您還可以跟蹤活動的源頭和目標等細節。
使用 inotify 很簡單:創建一個文件描述符,附加一個或多個監視器(一個監視器 是一個路徑和一組事件),然後使用 read 方法從描述符獲取事件。read 並不會用光整個週期,它在事件發生之前是被阻塞的。
可以監控文件系統中添加,刪除,修改,移動等各種事件
inotify邏輯
環境:需要二臺服務器,inotify安裝在master的服務器
master:192.168.0.110 255.255.255.0
slave:192.168.0.111 255.255.255.0
操作步驟:
1.rsync服務端的相關設置
2.檢查系統的內核,查看是否有匹配的文件
3.master上下載inotify的源碼包
4.手動測試創建文件
5.手動測試刪除文件
6.編寫一個實時監控的腳本
1. rsync服務端的相關設置
新建rsync用戶及模塊目錄並更改其用戶組
useradd lizheng -s /sbin/nologin #添加用戶
greplizheng /etc/passwd #查看用戶
mkdir/risehome/ #創建rsync工作模式的模塊目錄
chownlizheng.lizheng /risehome/ #更改模塊目錄的用戶組
創建rsyncd.conf文件
vi/etc/rsyncd.conf
寫入內容
#server configure start
port = 873
uid = root
gid = root
use chroot = no
max connections = 300
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
[risehome] #設置模塊名
path = /risehome/
ignore errors
read only = false
list = false
hosts allow = * #所有網段
hosts deny = 0.0.0.0/32
auth users = lizheng #用戶
secrets file = /etc/rsync.password
#rsync_config___________________end
注意點:rsync--daemon 客戶端開啓873端口
rsync服務端(slave)
vi /etc/rsync.password
lizheng:lizheng123
更改權限
chmod 600/etc/rsync.password
查看rsync是否開啓
netstat -lnpe |grep rsync
rsync服務端(master)
vi /etc/rsync.password
lizheng123
更改權限
chmod 600/etc/rsync.password
加入開機啓動
echo"/usr/bin/rsync --daemon" >> /etc/rc.local
2.查看系統是否可以安裝inotify服務,內核要在2.6.1版本以上
查看master是否有下列三個選項
ls -l/proc/sys/fs/inotify
查看slave是否有下列三個選項
事件相關參數的大小 /proc/sys/fs/inotify/
可直接修改/etc/sysctl.conf配置文件,將管理隊列設爲32768,實例數設爲1024,監控數設爲9000000(建議大於監控目標的總文件數)。
[root@xuegod63~]#vim/etc/sysctl.conf#以文件最後,添加以下內容
fs.inotify.max_queued_events=32768
fs.inotify.max_user_instances=1024
fs.inotify.max_user_watches=90000000
sysctl -p#使修改後的sysctl.conf文件生效
查看是否修改成功:
[root@xuegod63~]# cat /proc/sys/fs/inotify/max_user_watches
3.master上下載源碼安裝包
進入源碼包存放的路徑
mkdir -p/home/lizheng/tools
cd/home/lizheng/tools
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvfinotify-tools-3.14.tar.gz
進入inotify目錄並編譯安裝(./congifure --help可以查看參數)
cdinotify-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-tools #給安裝路徑做一個軟鏈接,去掉版本號
ll/usr/local/inotify-tools #查看文件
4.關於create的測試
1.新建一個backup的文件
mkdir /backup
執行命令
/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create/backup
5.關於delete的測試
/usr/local/inotify-tools-3.14/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete/backup
6.編寫腳本
在/server/scripts/路徑下新建一個inotify.sh的腳本
mkdir -p/server/scripts
vim/server/scripts/inotify.sh
腳本內容
#!/bin/bash
#written bylizheng
#about inotofy
#para
host01=192.168.0.111 #定義的變量,slave的ip地址
src=/backup/ #master數據的目錄
dst=backup #rsync中定義的模塊
user=lizheng #rsync中設置的用戶
rsync_passfile=/etc/rsync.password #密碼文件
inotify_home=/usr/local/inotify-tools-3.14/ #inotify的路徑
#judge
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 --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -eclose_write,create,attrib,delete $src \
| while read file
do
# rsync -avzP --delete --timeout=100--password-file=${rsync_passfile} $src $user@$host01::$dst > /dev/null2>&1
執行後臺運行
sh inotify.sh&
查看後臺執行
ps -ef |grep ino
關於錯誤
@ERROR: authfailed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]
檢查服務器A存儲密碼文件和服務器B密碼文件。
服務器A密碼文件/etc/rsyncd.secrets 格式爲: username:password
服務器B密碼文件password.rsync 格式爲:password
文件權限錯誤
password filemust not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)[receiver=3.0.6]
檢查服務器A存儲密碼文件和服務器B密碼文件。
服務器A密碼文件 /etc/rsyncd.secrets權限爲600: chmod 600/etc/rsyncd.secrets
服務器B密碼文件 password.rsync 權限爲600:chmod 600 password.rsync
附錄:關於參數
inotifywait命令參數
-m
:
是要持續監視狀態。
-r
:
遞歸查詢目錄。
-q
:
打印監控事件的信息。
-e
:
指定要監視的事件列表。
--timefmt
:
是指定時間的輸出格式。
--format
:
指定文件變化的詳細信息。
--excludei<pattern>:排除文件和目錄時,不區分大小寫
可監聽的事件
-e|--event<event1>....
事件 | 描述 |
access | 訪問,讀取文件。 |
modify | 修改,文件內容被修改。 |
attrib | 屬性,文件元數據被修改。 |
move | 移動,對文件進行移動操作。 |
create | 創建,生成新文件 |
open | 打開,對文件進行打開操作。 |
close | 關閉,對文件進行關閉操作。 |
delete
| 刪除,文件被刪除。 |