跨網路複製檔案的簡單實踐

yuntui發表於2016-11-03
在實際的專案中可能要訪問生產環境是需要各種安全驗證和設定的,畢竟客戶的資料是最寶貴的資源。一般來說,客戶會把一部分訪問的許可權開放出來。這樣在系統出現問題的時候,能夠更快更高效的處理問題。

下面是一個簡單的圖表,能夠說明一下其中一個專案的網路訪問情況。
右邊的綠色區域是公司內部的環境,其中生產問題復現環境的許可權較高,這個許可權只會分配給部分的人,而開發測試環境是公開環境,開發測試人員都可以訪問。
左邊的區域是現場環境,生產環境包括現網環境和容災切換環境,這個是根據需求可以切換的。同時現場測試環境是客戶開發給我們的一個訪問環境,我們可以透過公司的網路直接訪問到現場的測試環境,然後透過現場測試環境來逐步的切換,直到連線到生產環境。



在系統升級和業務問題較多的時候,會嘗試從生產環境中抽取很小的一部分資料,把資料以dump的形式複製到公司內部環境中的生產問題復現環境中。這樣可以並行的排查很多不同的問題。
在問題比較多的時候,總是會收到比較多的郵件請求來複製dump檔案,其實明白了原理無非就是透過scp/sftp等形式把檔案一步一步的複製。做多了就感覺是體力活了。而且如果大半夜出現緊急問題,需要排查,需要複製檔案的時候自己雖然比較忙乎,但是這種複製檔案的工作還是比較苦悶的。

自己下決心來改進一下。    
首先是訪問生產環境的許可權,我們申請了一個只讀使用者,只有許可權可以訪問到一個指定的目錄。這樣這個賬戶就可以開放給開發測試人員,不至於出現一些人為操作,他們只能夠從生產指定的目錄下複製檔案到現場測試環境。
沒法修改任何檔案。從某種程度上就杜絕了一些潛在的問題。
其次是現場測試環境和公司內部環境之間的訪問是單向的,意思就是隻能透過公司內部網路來連線現場測試環境,不能夠透過現場測試環境來連線公司內部環境。這樣的話,如果要把檔案從現場測試環境複製到生產問題復現環境的話,使用scp的時候就會有問題。因為生產問題復現環境是不能隨便開放給開發測試人員的。所以考慮設定開發測試環境和生產問題復現環境是單向訪問。開發測試環境和現場測試環境之間是單向訪問。
按照這個思路一個dump檔案要從生產環境複製的流程就是
生產環境->現場測試環境->開發測試環境->生產問題復現環境  整個流程都是單向的,需要配置單向的信任關係。這樣就可以使用shell指令碼來動態的實現了。

-->透過開發測試環境來獲取現場測試環境的檔案
這個部分是關鍵環節。可以在開發測試環境中使用下面的形式來呼叫
scp xxxx@現場測試環境:xxxxxx  .
我寫了如下的指令碼來做了進一步的校驗。
check_file_valid=`ssh xxxxx@10.196.28.xx "ksh check_file.sh ~/copyban_dump_copy/$1"`
file_not_exist_code=`echo $check_file_valid |grep WARNING|wc -l`
#echo $file_not_exist_code
if [[ $file_not_exist_code -eq 1 ]]
then
  echo 'WARNING- source file doesnt exist,please check and try again!'
else
  scp xxxx1@現場測試環境:~/dump_copy/$1 .
  scp $1 xxxxx2@生產問題復現環境:~/dump_copy
fi

對應的指令碼check_file.sh也需要複製到現場測試環境中
if [ -f $1 ]
then
 echo 'file '$1'  exists!'
else
 echo 'WARNING -file '$1 ' doesnt  exist!'
fi


這樣的話,我如果輸入的檔案不存在或者名字不正確。就會先做校驗。
$ ksh scpuat.sh aaa
WARNING- source file doesnt exist,please check and try again!

如果檔案存在,就開始把檔案先複製到開發測試環境中,然後複製到生產問題復現環境中。
一個簡單例子如下,檔案在內網傳輸會快很多,之間基本沒有多少的延遲。
$ ksh scpuat.sh test
test                                                                                                                                             100%   37     0.0KB/s   0.0KB/s   00:00
test                                                                                                                                             100%   37     0.0KB/s   0.0KB/s   00:00


關於單向信任關係的建立,可以使用ssh-keygen -t rsa來實現。
需要把id_rsa.pub的內容複製從開發測試環境中複製到生產問題復現環境中
然後在生產問題復現環境中把id_rsa.pub的內容追加到.ssh/authorized_keys中。
這樣使用scp,ssh的時候就不用輸入密碼了。
總體來說,這種實現要方便一些。而且很大程度上把我的工作解放出來不少。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127777/,如需轉載,請註明出處,否則將追究法律責任。

相關文章