• Azure HDInsight 中的 HBase 正式營運

    原文發表於 Azure HDInsight makes HBase (NoSQL database) a GA Feature

    在 2014 年 6 月,我們在 Azure HDInsight 中提供了 HBase 的預覽服務,而在 8 月 21 號,我們正式推出 HBase 的服務(同時也釋出了包含了像是 Azure DocumentDB、Azure Search 等服務)。Apache HBase 是 Apache Hadoop 生態系中,一個基於行式(columnar)的 NoSQL(Not only Structured Query Language)分散式資料庫的專案。

    HBase 在 Apache Hadoop 生態系中提供了資料交易操作的功能,讓用戶能夠迅速地在 Azure Blob 儲存體中儲存資料,以及從大筆的資料中進行查詢。由於是分散式的資料庫架構,HBase 能夠依據負載及效能的需求來延展,所以 HBase 非常適合需要處理數以幾百萬或幾十億資料量的用戶(正式營運後,Azure HDInsight 中的 HBase 能支援 Azure Blob 儲存體中 500 TB 的資料),當然,HBase 缺乏了一些像是優化功能、第二層索引、以及進階的查詢語法,所以無法取代現有的關聯式資料庫管理系統(RDBMS)。

    關於 HBase 一些常見的應用包括了:

    • 物聯網(IoT, Internet-of-Things)— HBase 能夠儲存由各式各樣的裝置、感測器、設備及社交網路來的大量即時資料,資料儲存在 Azure Blob 儲存體中,而 Azure HDInsight 及 HBase 則可以進行一些批次運算,來處理或分析這些大量的資料。
    • Web 記錄(Logs)— 可以用來處理網站的記錄檔(logs)或是一些點擊追蹤(clickstream)的資料,一樣由 Azure HDInsight 來處理及分析資料。
    • 社交網路資料 — 用來儲存從社交網路來的大量資料。

    我們在 Azure 的官方網站上提供了許多關於 HBase 的學習資料,歡迎您多加利用:

    另外,如果您想瞭解關於 Hadoop 以及 HDInsight 可以參考下列資料:

  • 使用客製化腳本擴展自動化 SQL Server VM 設定

    iStock_000001641990Small

    Azure VM 客製化腳本擴展 (Custom Script Extension) 將讓您可以從儲存體帳戶下載 PowerShell 腳本並執行之,透過這樣一個簡單的功能,您可以因應各種不同的 VM 客製化情境,彈性地自動化 VM 設定。在本篇文章中我們將帶您了解如何從 Azure VM Image Gallery 中使用客製化腳本擴展來客製一個 SQL Server 2014 VM,我們將使用 SQL Powershell 腳本來啟用 SQL Server Managed Backup 到 Microsoft Azure,這將讓您可以備份您的 SQL Server 2014 資料庫到 Azure Blob 儲存體服務上。

    SQL Server 設定腳本

    請參閱以下程式碼,您只需要將 [your Azure storage account][your Azure storage account key] 改為您 Azure 儲存體的帳戶及憑證即可,並另存此腳本為 CustomScriptSQLPS.ps1。

    #import SQL Server powershell module 
    import-module  sqlps -DisableNameChecking

    #global variables - replace storage account name and key
    $credentialName = "AzureStorageCredential_"+(RANDOM)
    $storageAccountName = "[your Azure storage account]"
    $storageAccountKey = "[your Azure storage account key]"

    #start SQL Agent Service           
    write-host "Starting SQL Server Agent service ..."
    Start-Service  sqlserveragent -verbose

    CD SQLSERVER:SQL\$env:COMPUTERNAME\DEFAULT

    write-host "Creating SQL credential ..."
    $secureString = convertto-securestring $storageAccountKey  -asplaintext -force   

    #Create Credential

    New-SqlCredential –name $credentialName –Identity $storageAccountName –secret $secureString

    $encryptionOption = New-SqlBackupEncryptionOption -NoEncryption

    write-host "Enabling Managed SQL Server Backup..."

    get-sqlsmartadmin | set-sqlsmartadmin -BackupEnabled $True
    -BackupRetentionPeriodInDays 7 -SqlCredential $credentialName -EncryptionOption
    $encryptionOption

    write-host "Managed SQL Server backup current configuration:"
    get-sqlsmartadmin | fl

    但是,我們無法直接提交此腳本,因客製化腳本擴展是使用 NTAUTHORITY\SYSTEM 帳戶來執行腳本,所以我們必須建立另個腳本,來扮演管理員帳戶腳色,才能執行上面這段腳本。

     

    利用另個認證來執行腳本

    首先我們建立另個腳本取名作 start.ps1,內容如下。為了方便解說,我在下方加了 Line Number。

    1: $password =  ConvertTo-SecureString "[your admin account user password]" -AsPlainText -Force
    2: $credential = New-Object System.Management.Automation.PSCredential("$env:COMPUTERNAME\[your admin account]", $password)
    3: $command = $file = $PSScriptRoot + "\CustomScriptSQLPS.ps1"
    4: Enable-PSRemoting –force
    5: Invoke-Command -FilePath $command -Credential $credential -ComputerName $env:COMPUTERNAME
    6: Disable-PSRemoting -Force

    Line 1: 將管理員密碼從 Plain text 轉換到 Secured string,當然將密碼直接放置於腳本中不是一個好的做法,這我們稍後再回來談。

    Line 2: 建立執行主要腳本的認證,您可以使用和預備用來建立 VM 相同的帳戶。

    Line 3: 指定主要腳本的確切路徑。

    Line 4 & 6: 要在一個仿造的認證中執行主要腳本,我們必須啟用 Windows Remote Management (WinRM),也就是 Line 4,而 Line 6 是關閉。

    Line 5: 使用 Invoke-Command cmdlet 來執行主要腳本 (會需要認證參數)。

     

    使用客製化腳本擴展

    現在我們已經準備好提交以上兩個腳本至客製化腳本擴展,將兩個腳本上傳至您儲存體帳戶下的腳本容器中,接下來在您的工作站上邊可執行以下腳本。

    1: $servicename = "[cloud service that hosts the VM]"
    2: $vmname = "[name of the VM]"
    3: $vm = Get-AzureVM -ServiceName $servicename -Name $vmname
    4: Set-AzureVMCustomScriptExtension -ContainerName scripts -StorageAccountName '[your storage account name]' -VM $vm -FileName 'start.ps1', 'CustomScriptSQLPS.ps1' -Run 'start.ps1' | Update-AzureVM -Verbose
    5: $status = Get-AzureVM -ServiceName $servicename -Name $vmname
    6: $result = $status.ResourceExtensionStatusList.ExtensionSettingStatus.SubStatusList | Select Name, @{"Label"="Message";Expression = {$_.FormattedMessage.Message }} 
    7: $result |fl

    最重要的是第4行,它確保了於VM上安裝客製化腳本擴展,並下載start.ps1 CustomScriptSQLPS.ps1,接著執行 start.ps1

     

    於外部檔案中讀取密碼

    我們都知道應避免於程式碼中寫入密碼,所以現在要介紹的是加解密服務,我們將假設您已經利用 private key 於目標 VM 部署了憑證,且利用相同憑證的 public key 來加密到 password.txt 檔案 (base-64 格式)

    $cert = Get-ChildItem Cert:\LocalMachine\My\[certificate thumbprint]
    $bytes = [Text.Encoding]::UTF8.GetBytes("abcdefg")
    $encrypted = $cert.PublicKey.Key.Encrypt($bytes, $true)
    $base64 = [Convert]::ToBase64String($encrypted)
    Set-Content .\password.txt $base64

    若您對於 VM 憑證管理還不太了解,可以參考這裡 (提供教學影片及命令提示字元下載)。

    修改start.ps1 並將以下程式碼複製取代原本的第一行:

    $cert = Get-ChildItem Cert:\LocalMachine\My\[certificate thumbprint]
    $base64 = Get-Content .\password.txt
    $encrypted = [Convert]::FromBase64String($base64)
    $bytes = $cert.PrivateKey.Decrypt($encrypted,$true)
    $password = [Text.Encoding]::UTF8.GetString($bytes) 

    最後,於檔案列表增加檔案名稱來確認 password.txt 檔案已傳送至客製化腳本擴展。

     Set-AzureVMCustomScriptExtension -ContainerName scripts -StorageAccountName '[your storage account 
    name]'
    -VM $vm -FileName 'start.ps1', 'CustomScriptSQLPS.ps1',
    'password.txt' -Run 'start.ps1' | Update-AzureVM -Verbose
  • Microsoft Azure SQL Database Basic, Standard 與 Premium 間之差異

    2014年4月宣布了新的 Microsoft Azure SQL Database 服務來取代既有的 Microsoft SQL Database Business/Web Edition。2014 年 8 月 26 日 SQL Server 產品主管 Eron Kelly 宣布新版本 Microsoft SQL Database Basic, Standard 與 Premium 版已經於 2014 年 9 月11日脫離技術預覽階段,開始正式營運 ( http://azure.microsoft.com/blog/2014/08/26/new-azure-sql-database-service-tiers-generally-available-in-september-with-reduced-pricing-and-enhanced-sla/ ),新的雲端資料庫服務,與過去版本相較有了以下的改善 :

    • 不停機服務水準 (SLA) 由 99.9% 提升為 99.99 %
    • 單一資料庫容量上限提高
    • 較可預期的執行效能
    • 用戶可以自行回存資料 (Self-service restore) ,依據不同等級版本可回溯資料庫時間從 7-35 天不等
    • 以小時為單位計價
    • 高階版本提供跨資料中心災難備援機制

    與傳統 Microsoft SQL Server 規劃相較,客戶 Microsoft Azure SQL Database 不同等級的選用,可以參考 http://msdn.microsoft.com/library/azure/dn369873.aspx,在此節錄最重要的表格。

    Azure SQL Database 等級

    Database Throughput Units (DTUs)

    單一資料庫容量上限 (GB)

    Worker Threads 上限

    Sessions 數上限

    評測交易處理速率(Benchmark Transaction Rate)

    預期效能

    Basic 5 2 30 300 每小時處理16,600 交易
    Standard/S0 10 250 60 600 每分鐘處理 521 交易 較好
    Standard/S1 20 250 90 900 每分鐘處理 934 交易 較好
    Standard/S2 50 250 120 1,200 每分鐘處理 2,570 交易 較好
    Premium/P1 100 500 200 2,400 每秒鐘處理 105 交易 最佳
    Premium/P2 200 500 400 4,800 每秒鐘處理 228 交易 最佳
    Premium/P3 800 500 1,600 16,000 每秒鐘處理 735 交易 最佳

     

    資料庫庫吞吐量單元(Database Throughput Unit ,DTU):這是一個綜合多項能力的單位,結合了 CPU,記憶體,資料讀寫能力成為一個單位。 理論上 5 DTU 的效能水準比 1 DTU 要多五倍,Worker thread 在邏輯上表示 Microsoft Azure SQL Database 允許的執行緒數量上限,可以視為是作業系統允許的執行緒數量上限,隱身在資料庫服務背後 ;Worker thread 默默地執行資料庫服務所指派的工作。而 Sessions 數則是指邏輯上伺服器端與用戶端所建立能夠交換資料的單位,Session 數實際上並不等同於實體上網路 Connection 連線數,但兩者間數量差異不大,可以視為是能夠允許的網路連線數量。雲端服務的特質在於資源共享,資源共享也意味著必須限制單一用戶的用量,以避免其他租戶使用時受到影響,因此在資料庫規劃上需要隨時注意相關資訊。

  • 如何在 Azure Cloud Services 和 Azure Virtual Machines 上保留對外 IP 位址

    感謝北科大劉建昌同學翻譯微軟公司 Microsoft Azure 主管 Mahesh Thiagarajan 所發表的文章 http://azure.microsoft.com/blog/2014/05/14/reserved-ip-addresses/

    微軟公司於 2014 年 5 月 12 日宣布正式推出 Microsoft Azure Cloud Services 與 Virtual Machines 保留對外 IP 位址 ( Reserve IP ) 功能。在這篇文章中,我們會介紹保留對外 IP 位址的相關資訊,並且如何在 Microsoft Azure Cloud Services 與 Virtual Machines 使用這項功能。除此之外,也會介紹收費標準和不支援保留 IP 位址的情況。您若想要閱讀關於保留對外 IP 位址 ( Reserve IP ) 的技術文件,可以到這個網站上取得

    甚麼是保留對外 IP 位址,我何時需要用到它?

    隨著最新版的 PowerShell 釋出,Microsoft Azure 允許您在既有的 Azure 訂閱帳戶上使用保留對外 IPv4 位址。您可以無限期的將這些 IP 位址保留您的 Azure 訂閱帳戶上,並用於此帳戶內的 Microsoft Azure Cloud Services 與 Virtual Machines 之服務。本篇文章主要著重於如何保留對外的公開之 IP 位址。至於如何固定虛擬網路 ( Virtual Network ) 內部各虛擬機器的 IP ,相關資料可參閱此篇文章

    您可能會需要用到保留對外 IP 位址的原因如下 :

    以 A-Record 設定 DNS 時不用擔心 IP 位址改變

    Microsoft Azure Cloud Services 或 Virtual Machines 預設在用戶關閉或是刪除一個虛擬機器之後,對外的 IP 位址就會釋出,下次再次啟動虛擬機器時對外 IP 就可能改變,這對 DNS 以 A Record 設定時造成困擾,如果用戶使用保留對外 IP 位址功能,就會持續保留同一個對外 IP 位址。可以避免虛擬機器再次啟動時重新分配新的 IP 位址,造成重新設定 DNS 的問題。

    企業內部網路安全考量

    有了保留對外 IP 位址功能,企業內部 Proxy 伺服器或防火牆即可針對此一固定 IP 位址進行存取控制 (ACL),而不再需要擔心當您重新啟動或是停止虛擬機器時,內部相關 Proxy 伺服器或防火牆又要新設定。

    下圖顯示了 IP 保留對外 IP ( Reserved IP ) 的運作方式,Azure 可以單一區域資料中心的範圍內提供保留對外 IP 位址 ( Reserved IP ) 的功能,在此資料中心的 Cloud Services 都可以運用所保留的 IP 位址。

    clip_image002

     

    如何在 Microsoft Azure 上保留一個對外的 IP 位址

    您可以在您的 Azure 訂閱上使用 Azure PowerShell cmdlets 或是 REST APIs 建立一個保留 IP 位址。您可以在多數微軟 Azure 資料中心使用保留 IP 位址的功能。除了以下地區資料中心 :

    • 巴西
    • 中國東部
    • 中國北部

    Azure 團隊會盡快讓這些地區未來也支援此項服務。

    請注意,Azure 目前尚未支援透過管理者入口網站直接設定留對外 IP 位址的功能。目前必須使用 PowerShell 或是 REST API,以下為使用 PowerShell cmdlets 建立一個全新並會保留對外 IP 位址的範例 :

    New-AzureReservedIP – ReservedIPName “MyWebsiteIP” –Label “WebsiteIP” –Location “Japan West”

    對於之前就已經建立好的雲端服務和虛擬機器所配發的 IP 位址,目前無法直接保留該 IP 位址,但相信在不久的將來,Auzre 團隊就會提供這這項功能。

    如何使用一個保留的 IP 位址建立虛擬機器

    一旦一個保留的 IP 位址已經建立完畢,您就可以使用該保留 IP 位址來建立虛擬機器。以下是運用 PowerShell cmdlet New-AzureVM 來使用保留 IP 位址建立虛擬機器的範例 :

    New-AzureVMConfig -Name "WebAppVM" -InstanceSize Small -ImageName $images[130].ImageName | Add-AzureProvisioningConfig -Windows -AdminUsername $username -Password $password | New-AzureVM -ServiceName "MaheshWebApp" -ReservedIPName "MyWebSiteIP" -Location "Japan West"

     

    當建立妥保留 IP 位址之後,即便遇到下列的情況,也不會釋放對外 IP 位址。

    關閉虛擬機器時

    過去當虛擬機器關閉時,對外 IP 位址立即被釋放,當虛擬機器重新開啟之後,Microsoft Azure 會再重新分配一個新的對外 IP 位址給虛擬機器使用。現在若用戶保留對外 IP 位址,當虛擬機器重新開啟仍會使用原本保留的 IP 位址。

    刪除虛擬機器時

    當您刪除使用保留 IP 位址的虛擬機器後,保留的 IP 位址依然會保存在您的 Azure 訂閱帳戶中,以利您於未來您會再次將虛擬機器佈署在此資料中心時使用該 IP 位址。

    您可以參考虛擬機器REST API文件

     

    如何使用一個保留的 IP 位址來建立雲端服務 (Web/Worker Roles)?

    除了虛擬機器可以使用保留對外 IP 位址之外,同時我們也可以將此功能應用在雲端服務 ( Cloud Services ) 的建置。您需要去下載 2.3 板之後之 Azure SDK 才能夠使用此項功能。

    以下為在您的服務定義檔 (.CSCFG) 中使用保留對外 IP 位址的範例 :

    <?xml version="1.0" encoding="utf-8"?><ServiceConfiguration serviceName="ReservedIPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">  <Role name="WebRole1">    <Instances count="1" />    <ConfigurationSettings>      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />    </ConfigurationSettings>  </Role>  <NetworkConfiguration>    <AddressAssignments>      <ReservedIPs>       <ReservedIP name="MyWebSiteIP"/>      </ReservedIPs>    </AddressAssignments>  </NetworkConfiguration></ServiceConfiguration>

    請注意,當 Web Role / Worker role 被刪除時,保留的 IP 位址還是會被放在您的 Azure 訂閱帳戶中,當下次在同一個區域資料中心要建置新的 Web/Worker Role 時,同樣的也可以使用此保留 IP 位址。

    如何將保留的 IP 位址從 Azure 訂閱上取消?

    若保留的 IP 位址已經沒有使用在任何一台虛擬機器或是雲端服務上時,微軟公司建議您最好將此保留的 IP 位址取消,這樣才不會有額外的費用產生。對於保留 IP 位址的計費方式,詳細資料請參考這裡

    以下指令為使用 PowerShell cmdlet 可以將保留的 IP 位址從您的訂閱中取消 :

    Remove-AzureReservedIP -ReservedIPName "MyWebSiteIP" –Force

     

    保留對外 IP 位址與虛擬網路內的同質群組 (Affinity Group)

    目前 Microsoft Azure 尚未支援在虛擬網路內的同質群組 (Affinity Group) 中建立保留對外 IP 位址的虛擬機器或是雲端服務。當您嘗試在虛擬網路內的同質群組中建立虛擬機器,您會得到下列的錯誤訊息

    New-AzureVM : BadRequest : The deployment contains VirtualNetwork DemoVNET that belongs to an Affinity Group and ReservedIP that belongs to a region. This combination is not allowed.

     

    保留對外 IP 位址與虛擬網路

    在這個版本中也支援在同一區域資料中心之虛擬網路 ( Virtual Network ) 中使用保留對外 IP 位址之功能,您可以在此 Blog 中找到更多的詳細資料。Microsoft Azure 支援在虛擬網路中使用保留對外 IP 位址的方式來建置雲端服務或是虛擬機器。

     

    保留對外 IP 位址的費用

    IPv4 址位是非常稀少的資源,且每個地區分配的數量不定,因此 Microsoft Azure 對於保留對外 IP 位址的收費在不同的地區有不同的定價。費用相關資訊可參閱收費常見問題。請注意雲端服務內至少應要有一個運行中的 Web Role / Worker Role 或虛擬機器實例。

    在您的帳單中,您會看到兩個部份是關於保留 IP 位址的 :

    保留 IP 位址的時間 :

    保留的IP位址在您的訂閱中保留的總時間數 (以小時為單位)

    包含 :

    1. 沒有用在任何運作中的雲端服務或是虛擬機器的保留 IP 位址
    2. 訂閱中額外使用的保留 IP 位址

    保留 IP 位址的重新映射 :

    每當 IP 位址要在一個新的雲端服務上使用時,就會被認為是一個重新映射。您可以在此參考重新映射計價的相關方式

    每個訂閱保留 IP 位址的上限 :

    每個 Azure 訂閱帳戶最多可以保留到五個 IP位址,但是若您需要在您的訂閱帳戶中使用保留更多的IP位址時,您可以透過點擊這裡申請,並可參考Azure訂閱限額文件

  • 我該選擇哪一種 Azure 的分散式快取 (Cache) 方案?

    本文主要內容譯自 http://msdn.microsoft.com/en-us/library/azure/dn766201.aspx

    在2014年5月12日,微軟宣布 Azure Redis Cache (技術預覽) 開始提供用戶測試使用。微軟公司建議 Azure 用戶所有的新開發的應用系統,未來皆採用 Azure Redis Cache。Azure Redis Cache 提供用戶一個由微軟管理,安全,專用的 Redis 快取服務。Microsoft Azure 提供了這項服務之後,用戶開始可以充分利用 Redis 目前在業界既有的生態系統與豐富的功能,並透過微軟穩定地營運與監管。

    Redis

    不同於只能使用 Key-Value 成對式的傳統的快取,Redis 之所以流行是因其具有多樣化且高效能之資料型別,Redis 所支援的各種資料型別可參閱 http://redis.io/topics/data-types。 Redis 也支援這些資料型別的運算操作 (atomic operation),例如用戶可以附加文字到一個 String; 可以遞增 Hash ; 可以推送一個資料至 List ; 可以計算兩個 Set 之間是否有交集的字串,差異的字串,與聯集的字串; 或是在 Sorted sets 內找到一個排序最高的成員。其他功能還包括支援運算不可部分完成的交易 (Transaction) ,發布/訂閱模式,Lua scripting,以及使 Redis 的表現更像一些傳統快取服務的相關功能,例如在 : 特定時間內 (time-to-live) 有效的 Key-Value 之配置與設置。

    另一個重要的原因,是因為 Redis 週邊已經成功建立了一健康,充滿活力的開放原始程式碼之生態系統。能夠提供跨多種程式語言之 Redis client 用戶端環境,這使得 Microsoft Azure 內的現有用戶,無倫使用何種作業系統或程式語言都可以適用。對於 Microsoft ASP.NET 的用戶而言,Azure Redis Cache 亦提供了 ASP.NET Session State Provider,可參閱 http://msdn.microsoft.com/en-us/library/azure/dn690522.aspx 步驟進行設定。如何取的 Redis Client Library for Microsoft .NET 可參閱 http://msdn.microsoft.com/en-us/library/azure/dn690471.aspx

    目前 Microsoft Azure Redis 的高速快取服務雖尚在技術預覽階段,目前在快取容量可達 26 GB。預計在 2014 年底前此服務即會正式推出,屆時 Microsoft Azure Redis 將會支援超過 26 GB 的快取容量,並提供 99.9% 不停機的高可用性服務水準合約 (SLA)。

    而目前既有的 Azure Managed Cache Service 同樣提供了 99.9% 高可用性服務水準合約 (SLA)。如果你是一個現有的 Azure Managed Cache Service 客戶,你仍可以繼續使用現有的服務或選擇未來遷移到 Microsoft Azure Redis ,以享用 Redis 所提供的各類新功能。同樣如果你是現有 Azure In-Role Cache 的客戶,你仍可以繼續使用現有的服務或選擇未來遷移到 Microsoft Azure Redis 以享用Redis 所提供的各類新功能。對於 Azure Shared Cache 的客戶,請注意 Azure Shared Cache 將於 2014年 9月1日終止服務,您應該盡快移植現有應用系統至其他快取服務,對於 Azure Shared Cache 移植相關指引文件可參閱: Migrate from Shared Caching.