天天看點

​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的權限

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

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

    在浏覽器通路這個标紅的url,然後輸入code,整個過程和cli以及linux下的powershell其實是一樣的

​Azure Storage系列之使用AzCopy在blob之間同步資料

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

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

​Azure Storage系列之使用AzCopy在blob之間同步資料

    之後我們直接使用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

​Azure Storage系列之使用AzCopy在blob之間同步資料

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

​Azure Storage系列之使用AzCopy在blob之間同步資料

    速度之是以可以達到這麼快,是因為AzCopy 使用伺服器到伺服器 api,是以直接在存儲伺服器之間複制資料。 這些複制操作不會使用計算機的網絡帶寬。

    再來看第二種場景:

    在blob之間同步資料,因為這種同步很可能并不止是一次性同步,很可能之後要定期運作,是以源端和目标端我們都用SAS做身份驗證

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

​Azure Storage系列之使用AzCopy在blob之間同步資料
​Azure Storage系列之使用AzCopy在blob之間同步資料

    之後使用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

​Azure Storage系列之使用AzCopy在blob之間同步資料

    可以在目标端看到資料已經過來了

​Azure Storage系列之使用AzCopy在blob之間同步資料

    之後我們在源端上傳一個新檔案

​Azure Storage系列之使用AzCopy在blob之間同步資料

    再次運作指令,可以看到這次隻同步了一個檔案

​Azure Storage系列之使用AzCopy在blob之間同步資料

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

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