於 Windows Azure Virtual Machines 上安裝 SQL Server 2012

本文將介紹如何於 Windows Azure Virtual Machines 上安裝 SQL Server 2012,並從另外一台 VM 遠端存取 SQL Server。

情境描述

前幾天小章哥和筆者討論到為什麼在 Windows Azure Virtual Machine (以下簡稱 VM)中的 Windows Server 2012 無法安裝繁體中文版的 SQL Server 2012,初步看來是 OS 的語系和 SQL Server 不同所致,為了確保正確性筆者趁這機會順便練習一下如何在 Windows Azure 上建立 VM 並安裝 SQL Server 2012,詳細步驟請見下一節。

實作步驟

1. 建立 SQL Server 伺服器所使用的 VM

登入 Windows Azure 管理入口網站後,點選頁面左側 VIRTUAL MACHINES 節點,於 virtual machines 頁面中點選【CREATE A VIRTUAL MACHINE】,或是您也可以直接按下方的 NEW 來建立新的 VM。

image

接著您會看到如下圖的畫面,您可以選擇以【QUICK CREATE】或是【FROM GALLERY】的方式建立 VM,若您不是要以自己的 IMAGE 或 DISK 建立 VM 選哪一種似乎差異不大,筆者就簡單以【QUICK CREATE】來做示範。

image

輸入建立 VM 的必要資訊後按【CREATE A VIRTUAL MACHINE】,筆者以下列內容作示範:

1. DNS NAME:ws2k12-1。
2. IMAGE:Windows Server 2012 Datacenter。
3. SIZE :Large。
4. USER NAME:預設是 Administrator,到時候您利用遠端桌面連線連接 VM 所使用的帳號。
5. NEW PASSWORD、CONFIRM:為 Administrator 帳號設定密碼。
6. LOCATION:選擇您的 VM 要建立在哪個資料中心。
7. SUBSCRIPTION:選擇您要使用哪個 Windows Azure 訂閱。

image

接著 Windows Azure 就會開始幫您建立 VM。

image

當 VM 的 STATUS 為 Running 時,您就可以點選下方的【CONNECT】來透過遠端桌面連接到 VM。

image

預設 VM 對外的 PORT 並不會使用遠端桌面服務預設的 3389 通訊埠,如果您不是利用 Windows Azure 管理入口網站的 CONNECT 來連接 VM,可以從您要連線的 VM 中點選【ENDPOINTS】來查看 Windows Azure 幫您設定的 PORT Number。

image

連線到 VM 之後您看到的當然是英文版的介面,因為預設 VM  裡的 Windows Server 2012 Datacenter 是英文版,首先我們先打開 File Explorer 查看內建的硬碟,您會看到目前 VM 中有兩個磁碟,系統槽 C 槽預設大小為 30 GB,D 槽是 Temporary Storage,從磁碟名稱看來就知道這是暫存用的磁碟,因此強烈建議若您的資料很重要不希望被清掉,千萬不要放在 D 槽。

image

接著在 VM 中下載 SQL Server 2012,您會看到 VM 對外網路的可怕頻寬,4G 的安裝程式不到兩分鐘就下載完畢。

image

下載完畢之後利用 Windows 內建的功能將 ISO 檔 Mount 為光碟機然後執行 F:\Setup.exe,接著果然看到小章哥所說的錯誤訊息,原因在於繁體中文的 SQL Server 2012 不能安裝在英文版的 Windows Server 2012。

image

接著我們到【Control Panel > Add a Language】嘗試新增繁體中文。

image

於【Language】視窗中點選【Add a language】。

image

於 Search 文字方塊中輸入【chinese】後,點選【中文(繁體)】再按 open。

image

於【Regional variants】視窗中選擇【中文(台灣)】然後按 Add。

image

新增好繁體中文之後於【Language】視窗中點選 Move Up,一般而言選擇好語言之後將之移到最上面重新開機即可,但這邊有個小問題,您可以點選【Options】進去查看。

image

您會發現 Windows display language 下方顯示 A language pack isn't available,所以就算你把繁體中文移到 Change your language preferences 的最上方,也會因為 Language Pack 無法使用而沒辦法正常顯示繁體中文。

image

2. 下載並安裝繁體中文語言套件至VM

既然內建的 Language Pack 無法使用,那就自己下載來安裝,筆者是到 MSDN 訂閱下載網站中來下載 Windows Server 2012 繁體中文的語言套件,下載完畢之後一樣把 ISO 檔 Mount 起來,接著於開始畫面中輸入【lpksetup】後於右側搜尋結果中點選【lpksetup】。

image

於【Install or uninstall display languages】視窗點選【Install display languages】。

image

於【Select the display languages to install】步驟中點選【Browse】,找到您的語言套件檔案(lp.cab),然後按 Next。

image

於【Review and accept the Microsoft Software License Terms】步驟中點選【I accept the license terms】,接著按 Next。

image

待安裝完語言套件後重新進到 Control Panel 將繁體中文移到 language preferences 的最上方然後重開機。

image

image

3. 安裝SQL Server 2012

若您的步驟正確待 Windows Server 2012 重新啟動後,您將看到的是繁體中文介面的作業系統,接著再重新把 SQL Server 2012 的 ISO 檔掛接成光碟機,重新執行 F:\Setup.exe 的安裝程式,即可看到 SQL Server 安裝中心已經正常啟動,接著您就可以依照過去安裝 SQL Server 2012 的步驟於 VM 中安裝 SQL Server,這部分筆者就不再多做介紹,您可以參考德瑞克老師的這篇文章,其中有詳細的解說及步驟。

image

4. 新增防火牆規則

假設您想從 Windows Azure Virtual Machines 中建立另外一台 VM ,來存取 ws2k12-1 這台 VM 上的 SQL Server  您可以怎麼做?

首先請於 ws2k12-1 這台 VM 上的開始畫面中輸入【】,就會搜尋到【具有進階安全性的 Windows 防火牆】,請點選該圖示以開啟【具有進階安全性的 Windows 防火牆】設定畫面。

image

於【具有進階安全性的 Windows 防火牆】的輸入規則節點上按滑鼠右鍵,選擇【新增規則】。

image

於【規則類型】步驟選擇您想要建立的規則類型,筆者選擇以預設值【程式】做示範,原因在於配合後續設定 SQL Server TCP/IP 通訊協定所使用的連接埠時,避免使用預設的 1433 PORT,選擇以程式作為輸入規則的類型,將來 SQL Server 對外的 PORT 變更,可以無需再調整防火牆的輸入規則。

image

於【程式】步驟輸入您的 SQL Server Database Engine 的執行檔路徑,以 64 位元的 SQL Server 2012 為例,其路徑為【%ProgramFiles%\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe】。

image

於【動作】步驟使用預設的【允許連線】,使得存取 SQL Server Database Engine 的連線得以通過防火牆。

image

於【設定檔】步驟選擇您要套用輸入規則至哪個網路設定檔,您可以依照您的需求自行選擇,筆者為簡化示範直接按下一步繼續。

image

最後則是輸入您的輸入規則名稱,然後按【完成】。

image

設定完成後應於輸入規則中看到上述步驟所建立的輸入規則。

image

5. 啟用TCP/IP通訊協定

設定好 Windows Server 的防火牆,接著便是開啟 SQL Server 的通訊協定,預設 SQL Server 安裝完畢後只會啟用 Shared Memory,您必須於 SQL Server 組態管理員中啟用 TCP/IP 通訊協定才可以讓其他 VM 連接。

image

於【Sql Server Configuration Manager】視窗的【SQL Server 組態管理員(本機)> SQL Server 網路組態 > TCP/IP】項目上按滑鼠右鍵,選擇【內容】後在【TCP/IP - 內容】視窗的【通訊協定】頁籤將【已啟用】選項設定為【】。

image

接著切換至【IP 位址】頁籤,將 IPAll 區塊的 TCP 通訊埠設定為 9080(說明:您可以依照您的需求調整 Port Number),然後按確定後重新啟動 Database Engine 服務,以使 SQL Server 網路組態變更生效。

image

6. 變更SQL Server驗證模式

預設 SQL Server 使用 Windows 驗證,若您想要變更驗證模式,讓遠端機器透過 SQL Server 的登入名稱 來存取資料庫。請開啟 SSMS 連接到本機的執行個體,於物件總管視窗中執行個體上按滑鼠右鍵選擇【屬性】。

image

在【伺服器屬性】視窗中選取【安全性】頁面,將伺服器驗證設定為【SQL Server 及 Windows 驗證模式】,按下確定後重新啟動 Database Engine 服務。

image

或是執行下列 T-SQL 指令碼也可以達到變更伺服器驗證類行為【SQL Server 及 Windows 驗證模式】的目的。


USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer'
, N'LoginMode', REG_DWORD, 2
GO

7. 建立Endpoints

當您建立 VM 時,Windows Azure 會幫您建立一組 Endpoint,用來讓您透過遠端桌面連線管理 VM,而 SQL Server 遠端連接所要用的 Endpoint 需要自行建立,才能讓您從其他機器透過 TCP/IP 通訊協定連接到 Database Engine,請於 Window Azure 管理入口網站點選左側的 VIRTUAL MACHINES 節點,接著點選 SQL Server 伺服器(ws2k12-1)。

image

當您進入 ws2k12-1 的管理頁面後,點選【ENDPOINTS > ADD ENDPOINT】。

image

在【Add an endpoint to a virtual machine】步驟中使用預設值【ADD ENDPOINT】來新增SQL Server所要使用的 Endpoint。

image

接著【Specify the details of the endpoint】步驟,您必須設定 Endpoint 的名稱(NAME),並選擇您要使用的通訊協定(PROTOCOL),在此使用預設的 TCP 即可,然後是設定 PUBLIC PORT 及 PRIVATE PORT,其中 PUBLIC PORT 是 VM 開放給外部連接所使用的通訊埠,您可以設定 PUBLIC PORT 和 PRIVATE PORT 使用不同的埠號(如下圖)。

image

也可以設定使用相同埠號(如下圖),不管您 PUBLIC PORT 及 PRIVATE PORT 設定是否相同,重點在於 PRIVATE PORT 必須和您 SQL Server 設定的TCP通訊埠一致才行。

image

 

如此一來所有遠端連接安裝在 Windows Azure Virtual Machine 上的 SQL Server 所需的相關設定均已完成。

8. 測試遠端連接SQL Server

接下來以下列 T-SQL 在 SQL Server 伺服器(ws2k12-1)建立測試用的登入名稱。


USE [master]
GO
CREATE LOGIN [WADbUser] WITH PASSWORD=N'12345', DEFAULT_DATABASE=[Northwind]
, DEFAULT_LANGUAGE=[繁體中文], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [Northwind]
GO
CREATE USER [WADbUser] FOR LOGIN [WADbUser]
GO
USE [Northwind]
GO
ALTER USER [WADbUser] WITH DEFAULT_SCHEMA=[db_datareader]
GO

執行結果如下:

image

建立登入名稱後請以遠端桌面連線來連接到 ws2k12-2,下載並安裝 SSMS 2012 Express,接著開啟 SSMS 於【Connect to Server】視窗中輸入下列資訊,然後按 Connect。
- Server name:SQL Server伺服器的DNS, Endpoint Public Port。以本文為例ws2k12-1.cloudapp.net,9080。。
- Authentication:SQL Server Authentication。
- Login:WADbUser。
- Password:12345。

image

若以上步驟都沒問題,您將可以順利在 Object Explorer 上看到類似下圖的結果。

image

致謝

特別感謝小朱大對筆者文章內容的指正,以及分享有關 Windows Azure Virtual Machine Endpoints 的正確觀念。

參考資料

- Provisioning a SQL Server Virtual Machine on Windows Azure

- Data Series: SQL Server in Windows Azure Virtual Machine vs. SQL Database

- 下載與安裝 SQL Server 2012 中文版本

- Load Balancing Virtual Machines

- How to Set Up Communication with a Virtual Machine