NFS+RSYNC+INOTIFY完整實時雙向同步測試

來源:本站原創 Linux 超過1,076 views圍觀 0條評論

 

———-安裝NFS服務————-

[[email protected] ~]# yum install -y nfs-utils rpcbind
Downloading Packages:
(1/4): libtirpc-0.2.1-13.el6_9.x86_64.rpm                                                              
(2/4): nfs-utils-1.2.3-75.0.3.el6.x86_64.rpm                                                           
(3/4): python-argparse-1.2.1-2.1.el6.noarch.rpm                                                        
(4/4): rpcbind-0.2.0-13.el6_9.1.x86_64.rpm                                                             
——————————————————————————————————–

mkdir -p /home/rsyncuser/weavertest
cd /home/rsyncuser/weavertest
chown 3333:3333 1

[[email protected] nfs]# vim /etc/exports

/home/rsyncuser/weavertest 192.0.0.0/8(rw,no_root_squash,all_squash,sync,anonuid=3333,anongid=3333)

注:配置文件說明:
/home/rsyncuser/weavertest 為共享目錄
172.0.0.0/16  可以為一個網段,一個IP,也可以是域名,域名支持通配符 如: *.qq.com
rw:read-write,可讀寫;
ro:read-only,只讀;
sync:文件同時寫入硬盤和內存;
async:文件暫存于內存,而不是直接寫入內存;
no_root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,也擁有root權限。顯然開啟這項是不安全的。
root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份;
all_squash:不論NFS客戶端連接服務端時使用什么用戶,對服務端分享的目錄來說都是擁有匿名用戶權限;
測試如下 匿名無寫權限 touch: cannot touch ‘1’: Permission denied
anonuid:匿名用戶的UID值,可以在此處自行設定。
anongid:匿名用戶的GID值。
————權限完整測試————–
測試配置
/root/weavertest/nfs 192.0.0.0/8(rw,no_root_squash,all_squash,sync,anonuid=3333,anongid=3333)

[[email protected] nfs]# id 3333 ———3333定義為匿名用戶
id: 3333: No such user
[[email protected] nfs]# mkdir 1 ——創建1目錄
[[email protected] nfs]# chown 3333:3333 1  ——權限負給3333用戶
[[email protected] nfs]# ll
total 103668
drwxr-xr-x. 2 3333 3333      4096 Sep 28 15:32 1    —確認
-rw-r–r–. 1 root root 106070960 Sep 28 15:26 locale-archive
[[email protected] nfs]# ll
total 103668
drwxr-xr-x. 2 3333 3333      4096 Sep 28 15:33 1   
-rw-r–r–. 1 root root 106070960 Sep 28 15:26 locale-archive —–ROOT權限才能寫
[[email protected] nfs]#
[[email protected] 1]# ll
total 103664
-rw-r–r–. 1 3333 3333         0 Sep 28 15:33 1   —從客戶端寫過來的數據,用戶ID 全為3333
-rw-r–r–. 1 3333 3333 106070960 Sep 28 15:33 locale-archive   ——同上

————–開啟NFS服務—————————–
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable  nfs
showmount -e 127.0.0.1

 

[[email protected] nfs]# exportfs -r  —–使生效,修改配置后都需要刷新

[[email protected] nfs]# showmount -e 127.0.0.1
clnt_create: RPC: Program not registered   —–服務沒開
[[email protected] nfs]# service rpcbind start  —開服務
[[email protected] nfs]# service nfs start  —開服務
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
[[email protected] nfs]# chkconfig rpcbind on  —開機啟動
[[email protected] nfs]# chkconfig nfs on  —開機啟動
[[email protected] nfs]# showmount -e 127.0.0.1  查看能掛載的目錄
Export list for 127.0.0.1:
/weaver/nfs 172.0.0.0/16

LINUX客戶端掛載
[[email protected] ~]# showmount -e 172.16.1.29    —-默認無命令
-bash: showmount: command not found
[[email protected] ~]# yum install -y nfs-utils    ——安裝客戶端
mount -t nfs  172.16.1.29:/weaver/nfs /mountnfs/   —掛載

[[email protected] ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
172.16.1.29:/weaver/nfs  246G  390M  233G   1% /mountnfs  —-掛載成功

vi /etc/fstab
172.16.1.29:/weaver/nfs /mountnfs/ nfs defaults 0 0

 

————-安裝同步工具rsyncp————————–

[[email protected] nfs]# yum install rsync -y

創建密碼文件,采用這種方式不能使用系統用戶對客戶端進行認證,所以需要創建一個密碼文件,其格式為“username:password”,用戶名可以和密碼可以隨便定義,最好不要和系統帳戶一致,同時要把創建的密碼文件權限設置為600,這在前面的模塊參數做了詳細介紹。

測試
服務端配置
1.配置rsync
[[email protected] 1]# vim /etc/rsyncd.conf
uid = 3333
gid = 3333
max connections = 400
pid file = /var/run/rsyncd.pid
log file=/var/log/rsyncd.log

[nfsrsynctest]
        path = /root/weavertest/nfs/1/
         # 有錯誤時忽略
         ignore errors
         # 可讀可寫(true或false)
         read only = false
         # 阻止遠程列表(不讓通過遠程方式看服務端有啥)
         list = false
         # 允許IP
         hosts allow = 192.0.0.0/8
         # 禁止IP
         hosts deny = 0.0.0.0/32
         # 虛擬用戶,需與password文件一致
         auth users = cao
         # 存放用戶和密碼的文件
         secrets file = /etc/rsync.password
2.服務端配置RSYNC帳號密碼
只有服務端需要這格式 username:password
[[email protected] 1]# vim /etc/rsync.password
cao:caocaocao
修改文件權限。
chmod 600 /etc/rsync.password
重啟服務
systemctl restart rsyncd

注:客戶端的密碼文件只需要寫密碼
[[email protected] 2]# !vim
vim 1.pas
123456

 
客戶端測試
[[email protected] 2]# rsync -avz –progress [email protected]::nfsrsynctest .
Password:
receiving incremental file list
./
1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=6/8)
2
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=5/8)
3
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=4/8)
4
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=3/8)
5
           0 100%    0.00kB/s    0:00:00 (xfer#5, to-check=2/8)
6
           0 100%    0.00kB/s    0:00:00 (xfer#6, to-check=1/8)
222/

sent 182 bytes  received 384 bytes  226.40 bytes/sec
total size is 0  speedup is 0.00
[[email protected] 2]#

免密碼登陸

注:客戶端的密碼文件只需要寫密碼
[[email protected] 2]# !vim
vim 1.pas
123456

[[email protected] 2]# rsync -avz –password-file=/root/weavertest/nfs/2/1.pas . [email protected]::nfsrsynctest sending incremental file list
./

sent 111 bytes  received 12 bytes  246.00 bytes/sec
total size is 7  speedup is 0.06
[[email protected] 2]#

 

—————————RSYNC客戶端嘗試自己登陸報錯
[[email protected] 2]#  rsync -avz –progress [email protected]::nfsrsynctest –password-file=/etc/rsync.password .
ERROR: password file must not be other-accessible  ————–
rsync error: syntax or usage error (code 1) at authenticate.c(175) [Receiver=3.0.9]
[[email protected] 2]#

password file must not be other-accessible
continuing without password file
Password:
說明:這是因為rsyncd.pwd rsyncd.sec的權限不對,應該設置為600。如:chmod 600 rsyncd.pwd

修改后仍然有錯
[[email protected] 2]# chmod 600 /etc/rsync.password
[[email protected] 2]# ll !$
ll /etc/rsync.password
-rw——-. 1 root root 14 Nov  8 07:14 /etc/rsync.password
[[email protected] 2]#  rsync -avz –progress [email protected]::nfsrsynctest –password-file=/etc/rsync.password .
@ERROR: auth failed on module nfsrsynctest    ———————
rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.9]
[[email protected] 2]#
[[email protected] 2]#
[[email protected] 2]#

查看服務端日志
2017/11/08 08:20:36 [5945] name lookup failed for 192.168.142.139: Name or service not known  ———沒有寫hosts
2017/11/08 08:20:36 [5945] connect from UNKNOWN (192.168.142.139)
2017/11/08 08:20:36 [5945] auth failed on module nfsrsynctest from unknown (192.168.142.139): password mismatch

解決方法:
注:客戶端的密碼文件只需要寫密碼——————
[[email protected] 2]# !vim
vim 1.pas
123456

rsyncs故障匯總
http://www.jb51.net/article/31920.htm

—————-安裝inotify-tools

inotifywait -mrq –format ‘%w%f’ -e delete,close_write,create /root/weavertest/nfs/1/
輸入后,shell處于阻塞狀態(時時監控)

在另一個窗口的/data目錄進行創建,修改,刪除測試:
此時我們可以發現當前處于阻塞狀態的shell窗口會記錄所有目錄發生改變的情況

命令說明:
inotifywait:監控命令
-m:持續不斷的進行監控(處于阻塞狀態)
-r:遞歸監控,監控目錄及目錄的所有子目錄
-q:只輸出簡單的監控信息
–format:指定監控數據輸出的格式
-e:指定監控的事件類型
delete:刪除事件
close_write:文件寫入的關閉事件(其實就是監控修改文件)
create:創建事件

yum -y install inotify-tools
#開啟監控模式
[[email protected] 1]# inotifywait -mrq –format ‘%w%f’ -e delete,close_write,create /root/weavertest/nfs/1/
#以下為監控結果。
/root/weavertest/nfs/1/1
/root/weavertest/nfs/1/1
/root/weavertest/nfs/1/2
/root/weavertest/nfs/1/2
/root/weavertest/nfs/1/3
/root/weavertest/nfs/1/3

#對111進行修改
/root/weavertest/nfs/1/111
/root/weavertest/nfs/1/111
/root/weavertest/nfs/1/.111.swp
/root/weavertest/nfs/1/.111.swpx
/root/weavertest/nfs/1/.111.swpx
/root/weavertest/nfs/1/.111.swpx
/root/weavertest/nfs/1/.111.swp
/root/weavertest/nfs/1/.111.swp
/root/weavertest/nfs/1/.111.swp
/root/weavertest/nfs/1/4913
/root/weavertest/nfs/1/4913
/root/weavertest/nfs/1/4913
/root/weavertest/nfs/1/111
/root/weavertest/nfs/1/111
/root/weavertest/nfs/1/111~
/root/weavertest/nfs/1/.111.swp
/root/weavertest/nfs/1/.111.swp

#現在在遠端進行寫測試
[[email protected] 1]# touch {1..100}

———-NFS掛載無反應————–
mount -t nfs  172.16.1.29:/weaver/nfs /mountnfs/

檢查selinux iptables 無解
抓包  
showmount -e 172.16.1.29 有包,但掛載沒包.
15:16:41.010335 IP 172.16.9.64.983 > 172.16.1.29.111: UDP, length 56
15:16:41.012167 IP 172.16.1.29.111 > 172.16.9.64.983: UDP, length 28
15:16:41.930565 IP 172.16.9.64.984 > 172.16.1.29.111: UDP, length 56
15:16:41.931187 IP 172.16.1.29.111 > 172.16.9.64.984: UDP, length 28

檢查nfs服務器配置  配置錯誤
                     —這里是8不是16—-
/home/rsyncuser/weavertest 172.0.0.0/16(rw,no_root_squash,no_all_squash,sync,anonuid=11111,anongid=11111)

最新配置
/home/rsyncuser/weavertest 172.0.0.0/8(rw,no_root_squash,all_squash,sync,anonuid=3333,anongid=3333)

——–NFS+RSYNC+INOTIFY完整實時雙向同步測試————————
兩邊安裝NFS并開啟服務   配置參考樓上
兩邊安裝Rsync           配置參考樓上
兩邊安裝inotifywait     配置參考樓上

兩邊配置專用戶,這個是為了配合NFS
groupadd rsyngG -g 3333
useradd rsyncuser -G 3333 -g 3333 -u 3333

兩邊rsync配置

vim /etc/rsync.password
#格式 用戶:密碼
cao:123456
chmod 600 /etc/rsync.password

vim  /etc/rsyncd.conf
max connections = 400
pid file = /var/run/rsyncd.pid
log file=/var/log/rsyncd.log

[nfsrsynctest]
         uid = 3333
         gid = 3333
        path = /home/rsyncuser/weavertest
         # 有錯誤時忽略
         ignore errors
         # 可讀可寫(true或false)
         read only = false
         # 阻止遠程列表(不讓通過遠程方式看服務端有啥)
         list = false
         # 允許IP
         hosts allow = 192.0.0.0/8
         # 禁止IP
         hosts deny = 0.0.0.0/32
         # 虛擬用戶不是系統帳戶
         auth users = cao
         # 存放本地用戶及密碼的文件
         secrets file = /etc/rsync.password

兩邊服務器配置檢測目錄
mkdir -p /home/rsyncuser/weavertest
chown 3333:3333 -R /home/rsyncuser/

最終測試腳本
#!/bin/bash

Path=/home/rsyncuser/weavertest   
#—-檢測目錄
backup_Server=192.168.142.139     
#—-遠程服務器

#檢測并執行腳本
/usr/bin/inotifywait -mrq –format ‘%w%f’ -e create,close_write,delete /home/rsyncuser/weavertest | while read line
do
        if [ -f $line ];then
                rsync -az $line  [email protected]$backup_Server::nfsrsynctest –password-file=/etc/rsync.passwordcao2
        else
                cd $Path &&\
                rsync -az ./  [email protected]$backup_Server::nfsrsynctest –password-file=/etc/rsync.passwordcao2
        fi
done
#完

進入任一臺進行測試
su – rsyncuser
cd /home/rsyncuser/weavertest
touch {1..100}

進入另一臺。
su – rsyncuser
cd /home/rsyncuser/weavertest
ll 進行查看。

[[email protected] weavertest]# ll
total 0
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 2
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 200
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 201
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 202
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 203
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 204
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 205
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 206
-rw-r–r–. 1 rsyncuser rsyngG 0 Nov  9 09:16 207

出現即為正常。

[[email protected] weavertest]$ ls -lR|grep "^-"|wc -l
統計當前文件及子目錄中的文件個數

1027

——–rsync屬性————–
-v, –verbose 詳細模式輸出
-q, –quiet 精簡輸出模式
-c, –checksum 打開校驗開關,強制對文件傳輸進行校驗
-a, –archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, –recursive 對子目錄以遞歸模式處理
-R, –relative 使用相對路徑信息
-b, –backup 創建備份,也就是對于目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用–suffix選項來指定不同的備份文件前綴。
–backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, –update 僅僅進行更新,也就是跳過所有已經存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)
-l, –links 保留軟鏈結
-L, –copy-links 想對待常規文件一樣處理軟鏈結
–copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結
–safe-links 忽略指向SRC路徑目錄樹以外的鏈結
-H, –hard-links 保留硬鏈結
-p, –perms 保持文件權限
-o, –owner 保持文件屬主信息
-g, –group 保持文件屬組信息
-D, –devices 保持設備文件信息
-t, –times 保持文件時間信息
-S, –sparse 對稀疏文件進行特殊處理以節省DST的空間
-n, –dry-run現實哪些文件將被傳輸
-W, –whole-file 拷貝文件,不進行增量檢測
-x, –one-file-system 不要跨越文件系統邊界
-B, –block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, –rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
–rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
-C, –cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件
–existing 僅僅更新那些已經存在于DST的文件,而不備份那些新創建的文件
–delete 刪除那些DST中SRC沒有的文件
–delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
–delete-after 傳輸結束以后再刪除
–ignore-errors 及時出現IO錯誤也進行刪除
–max-delete=NUM 最多刪除NUM個文件
–partial 保留那些因故沒有完全傳輸的文件,以是加快隨后的再次傳輸
–force 強制刪除目錄,即使不為空
–numeric-ids 不將數字的用戶和組ID匹配為用戶名和組名
–timeout=TIME IP超時時間,單位為秒
-I, –ignore-times 不跳過那些有同樣的時間和長度的文件
–size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
–modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0
-T –temp-dir=DIR 在DIR中創建臨時文件
–compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
-P 等同于 –partial
–progress 顯示備份過程
-z, –compress 對備份的文件在傳輸時進行壓縮處理
–exclude=PATTERN 指定排除不需要傳輸的文件模式
–include=PATTERN 指定不排除而需要傳輸的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 綁定到特定的地址
–config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
–port=PORT 指定其他的rsync服務端口
–blocking-io 對遠程shell使用阻塞IO
-stats 給出某些文件的傳輸狀態
–progress 在傳輸時現實傳輸過程
–log-format=formAT 指定日志文件格式
–password-file=FILE 從FILE中得到密碼
–bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, –help 顯示幫助信息

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文鏈接:http://www.qdxgqk.live/?p=3605轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏