Azure Storage系列之使用AzCopy在blob之間同步數據

    AzCopy使用的場景其實非常多,也能幫助我們解決很多問題,這次就來分享兩個不同場景下,AzCopy是如何幫我們解決問題的

    首先先來看下兩個場景分別是什麼

    1.需要下載存儲在Azure Global上的blob

    2.需要在Azure Global和Azure China之間同步blob數據



    這兩個都是實際的案例,首先來看第一個

    背景是在Azure Global的storage上有一個60T的vhd文件,這個文件是第三方廠商公開分享的,任何人都可以直接下載,而不需要經過身份驗證,而我們需要做的就是要把這個放在Global的vhd文件遷移到中國區,然後再進行部署

    我們嘗試了很多種方法    

    1.直接下載 -- 速度維持在kB級別,極不穩定

    2.使用各大網盤和下載工具離線下載 -- 根本下不動

    3.使用不可描述的工具科學下載 -- 開始時速度很客觀,但一段時間後速度變爲0   

    4.直接在Global Azure創建一臺VM進行下載 -- 速度位置在MB級別,穩定性尚可,但等待一段時間後,下載中斷


    以上幾種方法最終都被認定爲不可行,最終還是使用AzCopy解決了這個問題

    

    首先我們先安裝好azcopy,然後在中國區建一個storage和container,以存放拷貝來的數據

    以上這些都屬於前期準備工作


    之後我們就來看如何進行數據的拷貝,首先在源端和目標端都是azure blob的時候,azcopy會有一些限制

  •     必須向每個源 URL 追加一個 SAS 令牌。 

  •     如果使用 Azure Active Directory (AD)提供授權憑據,則只能從目標 URL 中省略 SAS 令牌。


    所以,我們的源端必須是用SAS進行認證的,而我們的情況是源端是直接開放的,所以也不需要SAS了

    而目標端我們就需要使用Azure AD進行身份驗證了


    Azure AD進行身份驗證我們已經說了很多次了,具體如何操作呢,azcopy v10是可以讓用戶進行login的,所以這也就說明我們可以用我們的azure賬戶進行登錄,而azure 用戶現在是可以被直接賦予對blob的讀寫權限的,相關的role主要有以下幾個

  • Storage Blob Data Reader

  • Storage Blob Data Owner

  • Storage Blob Data Contributor


    概念和常規的role有點類似吧,我們這裏是需要寫入文件的,所以肯定不能用reader,我們直接assign一個owner的權限

    2.png

    

    

    之後我們就開始進行遷移,首先先登錄目標端環境

    azcopy login --aad-endpoint https://login.partner.microsoftonline.cn

    在瀏覽器訪問這個標紅的url,然後輸入code,整個過程和cli以及linux下的powershell其實是一樣的

    3.png


    4.png


    5.png



    登錄完成,我們嘗試list下container裏的內容,可以看到已經能列出相應的內容了

    azcopy list https://mxy.blob.core.chinacloudapi.cn/test

    6.png


    之後我們直接使用copy命令將在Global的vhd文件copy到container裏

    azcopy copy https://xxxxx.blob.core.windows.net/release/xxxxx.vhd https://.blob.core.chinacloudapi.cn/sms/sms-connector.vhd

    7.png


    整個過程半小時就完成了,平均速度能達到400-500Mbps

    8.png

    

    速度之所以可以達到這麼快,是因爲AzCopy 使用服務器到服務器 api,因此直接在存儲服務器之間複製數據。 這些複製操作不會使用計算機的網絡帶寬。

    



    再來看第二種場景:

    在blob之間同步數據,因爲這種同步很可能並不止是一次性同步,很可能之後要定期運行,所以源端和目標端我們都用SAS做身份驗證

    

    關於SAS,這裏篇幅有限就不多贅述了,我們直接生成一個storage級別的SAS

    9.png


    10.png


    之後使用azcopy sync命令進行同步   


    azcopy sync 'https://mxxxc.blob.core.windows.net/$web?sv=2019-02-02&ss=bfqt&srt=sco&sp=rwdlacuxxxxxx&st=2020-02-10T03:42:25Z&spr=https,http&sigxxxxxxc%3D' 'https://xxx.blob.core.chinacloudapi.cn/global?sv=2019-02-02&ss=bfqt&srt=sco&xxxxx5:59Z&st=2020-02-10T04:35:59Z&spr=https,http&sigxxxxxx3D' --recursive --s2s-preserve-access-tier=false

    11.png



    可以在目標端看到數據已經過來了

    12.png


    之後我們在源端上傳一個新文件

    13.png



    再次運行命令,可以看到這次只同步了一個文件

    14.png


    通過這種方法,很快就可以把gloabl的數據同步到中國區,並且安全性也可以得到保障


    以上就是azcopy使用的兩個案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章