任務需求
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.網路不通
其它情況看報錯資訊排查