檔案共享服務之實時備份(inotify+rsync)

先ping一下网关發表於2024-11-15

任務需求

1.對NFS伺服器上的靜態資源實時備份(inotify+rsync)

主機列表

# 外網地址                內網地址          主機名
192.168.122.207   172.16.1.207  web-test-209
192.168.122.231  172.16.1.231  nfs-test-231
192.168.122.241  172.16.1.241  rsync-test-241

架構圖


開始實操


1.在rsync-test-241伺服器上搭建rsync

1.1.安裝rsync

[root@rsync-test-241 ~]# yum install rsync -y

1.2.修改配置檔案/etc/rsyncd.conf

[root@rsync-test-241 ~]# vim /etc/rsyncd.conf 
[root@rsync-test-241 ~]# cat /etc/rsyncd.conf 
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup-nfs]
comment = This is nfs backup!
path = /backup/

配置檔案解讀

配置引數 引數說明
uid = rsync 指定rsync服務執行的時候,向磁碟進行讀取和寫入操作的操作者
gid = rsync 指定rsync服務執行的時候,向磁碟進行讀取和寫入操作的操作者
use chroot = no 進行資料同步儲存時,安全相關引數,預設內網進行資料同步,可以關閉
max connections = 200 定義向備份伺服器進行資料儲存的併發連線數
timeout = 300 定義與備份伺服器建立的網路連線,在多長時間沒有資料傳輸時,就釋放連線
pid file = /var/run/rsyncd.pid 服務程式執行時,會將程序的pid資訊儲存到一個指定的pid檔案中
lock file = /var/run/rsync.lock 定義鎖檔案,主要用於配合max connections 引數,當達到最大連線就禁止繼續訪問
log file = /var/log/rsyncd.log 定義服務的日誌檔案儲存路徑資訊
[backup] 指定備份目錄的模組名稱資訊
path = /backup 指定資料進行備份的目錄資訊
ignore errors 在進行資料備份傳輸過程過程中,忽略一些I/O產生的傳輸錯誤
read only = false 設定對備份的目錄的具有讀寫許可權,即將只讀模式進行關閉
list = false 確認是否可以將服務配置的模組資訊,在客戶端可以檢視顯示
hosts allow = 172.16.1.0/24 設定備份目錄允許進行網路資料備份的主機地址或網段資訊,即設定白名單
hosts deny = 0.0.0.0/32 設定備份目錄禁止進行網路資料備份的主機地址或網段資訊,即設定黑名單
auth users = rsync_backup 指定訪問備份資料目錄的認證使用者資訊,為虛擬定義的使用者,不需要進行建立
secrets file = /etc/rsync.password 設定訪問備份資料目錄進行認證使用者的密碼檔案資訊,會在檔案中設定認證使用者密碼資訊
[backup] 指定模組名稱,便於日後維護
path=/backup 在當前模組中,Daemon使用的檔案系統或目錄,注意目錄許可權和配置檔案許可權一直,防止讀寫出問題
#exclude= 排除檔案或目錄,相對路徑
[ftp] 還可以新增其他模組

1.3.根據配置檔案裡定義的資訊,建立使用者,檔案等

建立使用者

[root@rsync-test-241 ~]# useradd rsync -s /sbin/nologin -M
[root@rsync-test-241 ~]# id rsync
uid=1000(rsync) gid=1000(rsync) 組=1000(rsync)

建立目錄,修改屬性

[root@rsync-test-241 ~]# mkdir /backup
[root@rsync-test-241 ~]# chown -R rsync.rsync /backup/
[root@rsync-test-241 ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 11月 15 16:19 /backup/

建立認證檔案,授權

[root@rsync-test-241 ~]# echo "rsync_backup:mima666" > /etc/rsync.password
[root@rsync-test-241 ~]# cat /etc/rsync.password 
rsync_backup:mima666
[root@rsync-test-241 ~]# chmod 600 /etc/rsync.password
[root@rsync-test-241 ~]# ll /etc/rsync.password 
-rw------- 1 root root 21 11月 15 16:22 /etc/rsync.password

1.4.啟動rsync服務,開機自啟

[root@rsync-test-241 ~]# systemctl start rsyncd
[root@rsync-test-241 ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.

1.5.檢查rsync

[root@rsync-test-241 ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2024-11-15 16:24:12 CST; 41s ago
 Main PID: 2411 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─2411 /usr/bin/rsync --daemon --no-detach

11月 15 16:24:12 rsync-test-241 systemd[1]: Started fast remote file copy program daemon.
[root@rsync-test-241 ~]# 
[root@rsync-test-241 ~]# ps -ef|grep rsync
root      2411     1  0 16:24 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      2450  1928  0 16:26 pts/1    00:00:00 grep --color=auto rsync
[root@rsync-test-241 ~]# netstat -tnlp | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2411/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      2411/rsync          
[root@rsync-test-241 ~]# 

2.在nfs-test-231伺服器上執行rsync

2.1安裝rsync

[root@nfs-test-231 ~]# yum install rsync -y

2.2.建立密碼檔案,只寫密碼即可

[root@nfs-test-231 ~]# echo 'mima666' > /etc/rsync.password
[root@nfs-test-231 ~]# cat /etc/rsync.password 
mima666

2.3.必須要給密碼檔案授權,去掉other的許可權,否則rsync會報錯

[root@nfs-test-231 ~]# chmod 600 /etc/rsync.password 
[root@nfs-test-231 ~]# ll /etc/rsync.password 
-rw------- 1 root root 8 11月 15 16:34 /etc/rsync.password

2.4.測試rsync資料同步是否正確

client > server 、資料推送

[root@nfs-test-231 ~]# rsync -avzP network_init.sh rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password 
sending incremental file list
network_init.sh
            496 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 381 bytes  received 35 bytes  277.33 bytes/sec
total size is 496  speedup is 1.19
-avzP 
-a  保持檔案原有屬性
-v    顯示傳輸細節情況
-z    對傳輸資料壓縮傳輸
-P    顯示檔案傳輸的進度資訊
也可以直接使用密碼變數,進行同步

tail -1 /etc/bashrc
export RSYNC_PASSWORD=mima666

驗證rsync服務端接收到了檔案

[root@rsync-test-241 ~]# cd /backup/
[root@rsync-test-241 backup]# ls
network_init.sh
[root@rsync-test-241 backup]# 

3.在nfs-test-231伺服器上部署inotify

3.1.安裝inotify-tools

[root@nfs-test-231 ~]# yum install inotify-tools -y

3.2.編寫指令碼,完成資料同步

檢測共享資料夾,只要有了資料變化,立即觸發rsync備份
[root@nfs-test-231 ~]# vim rsync_nginx.sh
[root@nfs-test-231 ~]# cat rsync_nginx.sh

#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move  /nfs-web-share/  | while read line
do
    rsync -a --delete  /nfs-web-share/  rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password 
    echo "`date +%F\ %T`出現事件$line" >> /var/log/rsync.log 2>&1
done
[root@nfs-test-231 ~]# 

3.3.執行指令碼,放入後臺執行

[root@nfs-test-231 ~]# bash rsync_nginx.sh &
[1] 13040
[root@nfs-test-231 ~]# jobs
[1]+  執行中               bash rsync_nginx.sh &
[root@nfs-test-231 ~]# 

4.驗證同步情況

4.1.在web-test-207伺服器上更新檔案

[root@web-test-207 ~]# cd /usr/share/nginx/html/
[root@web-test-207 html]# vim index.html 
[root@web-test-207 html]# cat index.html 
<meta charset=utf8> 這是一個網頁
hello world
<h1>其實我來自nfs服務端</h1>
<h2>哈哈哈,你好inotify</h2>
[root@web-test-207 html]# 

4.2.在nfs-test-231上檢視同步日誌

[root@nfs-test-231 ~]# tail -f /var/log/rsync.log
2024-11-15 17:28:11出現事件/nfs-web-share/ MODIFY index.html
2024-11-15 17:28:11出現事件/nfs-web-share/ MODIFY index.html
2024-11-15 17:28:12出現事件/nfs-web-share/ ATTRIB index.html

4.3.在rsync-test-241上檢視是否同步

[root@rsync-test-241 backup]# pwd
/backup
[root@rsync-test-241 backup]# ll
總用量 4
-rw-r--r-- 1 rsync rsync 123 11月 15 17:28 index.html
[root@rsync-test-241 backup]# cat index.html 
<meta charset=utf8> 這是一個網頁
hello world
<h1>其實我來自nfs服務端</h1>
<h2>哈哈哈,你好inotify</h2>
[root@rsync-test-241 backup]# 
如果過程裡出現了失敗,大部分原因是
1.防火牆未關
2.nfs配置許可權不對
3.網路不通
其它情況看報錯資訊排查

相關文章