使用rsync服務+nas方案解決伺服器儲存安全性問題的一種方案

myskies發表於2022-11-22

當前伺服器上了滿速的nvme(970 EVO Plus(MZ-V7S1T0B),但卻不敢把重要應用(比如gitlab)放在上面跑,因為這玩意一旦哪天罷了工,資料的可恢復性為0。

或許我們可以使用nvme的raid1卡來解決這個問題,但又不好確認raid1卡是否能成功的被vmware esxi識別,同時價格也是需要考慮的因素。

順便說一句:970 EVO Plus在vmware esxi 6.7.0上表現良好,即插即用。
image.png

rsync

而rsync恰好能夠解決這個問題,基本的思路很簡單:

  1. 在nas端開啟rsync服務
  2. 在客戶端啟用rsync,並設定需要同步的資料夾

nas端

nas我們可以使用群暉或是FreeNAS,或是使用FreeBSD的zfs系統來打造。本文以群暉為例。

群暉的官方網站有關於如何啟用rsync的說明這為我們實現此功能降低了難度。

按上文我們建立一個備案專用資料夾(比如bak),然後建立一個只有當前資料夾讀寫許可權的使用者(使用者組建議先選擇為管理員,避免一些ssh認證問題),設定一個複雜點的密碼,在應用設定上,僅勾選rsync。

另外建議使用個非22埠,這個應該是更安全一點。

客戶端

nas就緒後,我們開始在客戶端上安裝rsync服務。

debian

系統不重要,重要的是是否可以成功安裝rsync服務。

# su -
# bash
# apt install sshpass
# pat install rsync

接下來我們先使用ssh連線一下主機,避免產生rsync Host key verification failed錯誤。

# ssh -p yoursshport rsyncuser@your.nas.domain.name

安裝完畢後,開始嘗試進行同步:

# sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername

FreeBSD

首先按官網指導安裝rsync客戶端

[root@nfs /yzpool/data/hosts]# pkg install sshpass
[root@nfs /yzpool/data/hosts]# pkg install rsync
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
--
Some scripts provided by rsync such as rrsync requires
python which is not installed by default

最後提示我們還需要安裝python

# pkg install python

定時任務

rsync有個非常大的優點在於其同步的時候,會進行差異化同步,這極好的保證了備份的效率。
結合定時任務,我們便可以實現按一定週期進行同步的目的。

debain

我先建議個批處理檔案(比如為: rsync.sh),並儲存在/home/username下,內容就是我們前面執行的命令:

#/bin/bash
sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log

儲存後為其增加執行許可權:#chmod -x rsync.sh,然後執行一遍看是否報錯:#./rsync.sh。沒有錯誤的話把nas中的同步使用者使用者組設定為普通使用者後再執行一遍#./rsync.sh

最後執行crontab -e便可以設定定時任務了:

# crontab -e

然後輸入以下內容:

0 */1 * * * /home/panjie/rsync.sh

上述定義了一個每1小時執行一次的策略。可以藉助crontab.gura來快速生成相關的計劃任務。

FreeBSD

我先建議個批處理檔案(比如為: rsync.sh),並儲存在/home/username下,內容就是我們前面執行的命令:

#/bin/bash
/usr/local/bin/sshpass -p "rsyncpassword" /usr/local/bin/rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log
注意:一定在要.sh中使用命令的全路徑,所以其不會自動執行成功。如果我們只為sshpass使用了全路徑,卻忘了給rsync全路徑,則會出現Failed to run command: No such file or directory錯誤.

儲存後為其增加執行許可權:#chmod -x rsync.sh,然後執行一遍看是否報錯:#./rsync.sh。沒有錯誤的話把nas中的同步使用者使用者組設定為普通使用者後再執行一遍#./rsync.sh

最後執行crontab -e便可以設定定時任務了:

# crontab -e

然後輸入以下內容:

0 */1 * * * /home/panjie/rsync.sh

上述定義了一個每1小時執行一次的策略。可以藉助crontab.gura來快速生成相關的計劃任務。

FreeBSD系統要求自動任務中的命令是全路徑,為了保證計劃任務順利被執行,需要使用$ env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/panjie NAME=panjie /home/panjie/rsync.sh來測試。注意上述命令中的panjie應該換成你自己的使用者名稱。

NEXT

FreeBSD啟用ZFS快照功能
FreeBSD系統打造安全可靠的ZFS儲存池
FreeBSD系統安裝NFS(Network File System)服務並啟用基於 IP 認證的機制
FreeBSD啟用ZFS快照功能

相關文章