跨網路複製檔案的簡單實踐
在實際的專案中可能要訪問生產環境是需要各種安全驗證和設定的,畢竟客戶的資料是最寶貴的資源。一般來說,客戶會把一部分訪問的許可權開放出來。這樣在系統出現問題的時候,能夠更快更高效的處理問題。
下面是一個簡單的圖表,能夠說明一下其中一個專案的網路訪問情況。
右邊的綠色區域是公司內部的環境,其中生產問題復現環境的許可權較高,這個許可權只會分配給部分的人,而開發測試環境是公開環境,開發測試人員都可以訪問。
左邊的區域是現場環境,生產環境包括現網環境和容災切換環境,這個是根據需求可以切換的。同時現場測試環境是客戶開發給我們的一個訪問環境,我們可以透過公司的網路直接訪問到現場的測試環境,然後透過現場測試環境來逐步的切換,直到連線到生產環境。
在系統升級和業務問題較多的時候,會嘗試從生產環境中抽取很小的一部分資料,把資料以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的時候就不用輸入密碼了。
總體來說,這種實現要方便一些。而且很大程度上把我的工作解放出來不少。
下面是一個簡單的圖表,能夠說明一下其中一個專案的網路訪問情況。
右邊的綠色區域是公司內部的環境,其中生產問題復現環境的許可權較高,這個許可權只會分配給部分的人,而開發測試環境是公開環境,開發測試人員都可以訪問。
左邊的區域是現場環境,生產環境包括現網環境和容災切換環境,這個是根據需求可以切換的。同時現場測試環境是客戶開發給我們的一個訪問環境,我們可以透過公司的網路直接訪問到現場的測試環境,然後透過現場測試環境來逐步的切換,直到連線到生產環境。
在系統升級和業務問題較多的時候,會嘗試從生產環境中抽取很小的一部分資料,把資料以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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跨網路拷貝檔案的簡單實踐
- 簡單實踐實現 MySQL 主從複製MySql
- 簡單的多執行緒複製檔案執行緒
- OSS高速通道跨國複製最佳實踐
- C++檔案系統操作6 - 跨平臺實現檔案和資料夾的複製C++
- 最簡單的螢幕複製程式(象素複製) (轉)
- VMware複製檔案產生的快取路徑快取
- nc複製檔案
- 複製檔案githubGithub
- 檔案複製(Go語言實現)Go
- Java實現檔案複製的四種方式Java
- 【C#入門超簡單】簡單的專案實踐C#
- MySQL 的主從複製實踐MySql
- Qt之課外實踐——檔案操作(簡單清道夫)QT
- Chainer 使複雜神經網路變的簡單AI神經網路
- 簡單配置mysql的主從複製MySql
- ubuntu下檔案複製Ubuntu
- 隱藏檔案複製
- mysql 複製原理與實踐MySql
- FaaS的簡單實踐
- asm下的控制檔案的複製ASM
- python多程式實現檔案海量複製Python
- postgresql 9.4 流複製簡單配置SQL
- 簡單搭建MySQL主從複製MySql
- GoldenGate簡單複製環境的搭建Go
- mongoDB的主從複製簡單測試MongoDB
- 簡單的網頁製作網頁
- linux中實現檔案的複製(c程式碼實現)LinuxC程式
- mysql檔案複製遷移MySql
- Java-IO:複製檔案Java
- Go語言複製檔案Go
- Java NIO複製檔案功能Java
- Java: 複製檔案最快方法Java
- C# 批量複製檔案C#
- unix下複製檔案(轉)
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- 使用RMAN複製活動資料庫(檔案路徑相同)資料庫
- 使用RMAN複製活動資料庫(檔案路徑不同)資料庫