2018年1月12日 星期五

如何在AWS EC2上以Windows Server 2016建立Microsoft Storage Spaces Direct(S2D)的架構

相信大家對S2D的架構或多或少都知道,其實在Windows 2012 R2的時候就已經有推出支援,但在Windows 2016上又有許多的更新,相關的安裝方式其實在網路上已有許多的參考,所以這篇我要特別整理如何在AWS EC2進行建立,當然安裝上沒有太大的落差,但在一些細部的設定上需要特別的注意,我在此整理出來,也提供給大家參考。

S2D系統架構圖

1、環境準備
AD Server -> Windows 2012 R2
Cluster Node1 -> Windows 2016
Cluster Node2 -> Windows 2016

另外在上述的二個節點上增加各二顆Disk,然後請注意在容量上請選擇相同的大小。

2、環境安裝
2-1 Instance Type選擇
在一開始的的Instance Type的部份,請注意目前測試C5可以進行,因為根據下列的S2D的需求項目一定要符合,要不然在最後建立完Cluster後,當進行Enable-ClusterS2D會出現下列的錯誤訊息,這部份需要再進行注意。


錯誤訊息:
Enable-ClusterS2D:No disks with supported bus types found to be used for S2D.
FullyQualifiedErrorId : HRESULT 0x80070490, Enable-ClusterStorageSpacesDirect

Driver:
Use local-attached SATA, SAS, or NVMe drives.

2-2 Private IP設定

在節點的部份,請特別注意最好設定Private IP在下列的位置上。


3、節點設定與確認
開機登入後,從系統 -> 裝置管理員 -> 確認目前的Disk Drives是否皆為NVMe的類型,如下圖所示。

在建立完成後,請將二個節點分別加入到Cluster中,並確認狀態皆為UP。


4、啟用與設定S2D
4-1 透過Administrator開啟一個PowerShell視窗,並輸入 Enable-ClusterS2D 的功能。

執行完成後,你就可以從 Failover Cluster Manager -> Storage -> Pools中看到已建立一個Cluster Pool。



4-2 透過下列的語法確認目前可能的磁碟。

get-StorageSubSystem Clus* | get-PhysicalDisk

4-3 透過下列的指令進行Volume的建立

New-Volume -StoragePoolFriendlyName S2D* -FriendlyName SQLDataDisk1 -FileSystem CSVFS_NTFS -AllocationUnitSize 65536 -Size 50GB -ProvisioningType Fixed -ResiliencySettingName Mirror

執行過程

4-4 最後建立完成,你就可以到Failover Cluster Manager -> Storage -> Disks的部份看到。



參考連結:
Microsoft SDS 軟體定義儲存技術(2) - S2D 運作架構
https://technet.microsoft.com/zh-tw/mt684933.aspx
Storage Spaces Direct hardware requirements
https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements

2018年1月2日 星期二

如何快速在AWS EC2與AWS Microsoft AD上建立SQL Server AlwaysOn。

在之前的文章,我介紹過許多安裝SQL Server AlwaysOn的方式,但現在我來介紹一個快速安裝的方式,可以在AWS EC2上快速的透過範本(CloudFormation)進行建立所需要的SQL Server AlwaysOn的架構。

另外在安裝上由於透過AWS Microsoft AD與SQL Server AlwaysOn這二個選項安裝時,在建立Availability Group Listener會遇到一些問題,所以本篇也特別說明如何排除,再請參考。

建立步驟:
一、環境安裝與建立
1、請先點選下列的網址 -> Launch Quick Start (for New VPC),進行建立。

SQL Server on the AWS Cloud: Quick Start Reference Deployment
https://docs.aws.amazon.com/quickstart/latest/sql/welcome.html


2、透過範本的方式快速的建立,在此請先確定你要建立的Regions為何,另外可以在下方看到範本的位址,當然如果你有興趣,也可以自行下載進行修改與調整。


3、在此由於我以簡單的二個節點進行安裝,所以在Availability Zones我只選擇二個,另外關於每個節點的劃分,如沒有特別的規劃,可以使用預設值即可。

4、選擇自已的Key Pair,此處可以選擇已存在此Regions的Key Pair,如果沒有新增的話,請記得先行設定。

5、在此處,我們選擇使用AWS Directory Service for Microsoft AD,當然你也可以選擇Microsoft AD on Amazon EC2的方式進行,此時系統會自行建立二台EC2 for AD進行。

6、選擇Microsoft SQL Server的版本,目前可以選擇的有2014、2016、2017的版本可以選擇。

7、最後勾選確認後,即可開始進行。

8、切換到CloudFormation,確認是否已建立完成,約不到30分鐘的時間,一個AD服務與四台EC2都已建立完成。

9、切換到EC2的頁面,你也可以看到4台EC2也確認都建立完成了。另外RDGW是主要負責對外連線的電腦,所以我們要透過此電腦進行連線。

10、透過RDGW,然後再連到Node1進行確認,你可以看到此時二台的SQL Server皆已安裝完成。


二、AlwaysOn建立與測試
1、請先手動建立一個測試用的資料庫,並請確認複原模式為Full,建立完成後也請手動進行一次完整備份。


2、此時如果你直接進行AlwaysOn安裝的話,由其是在建立Listener,你會遇到下列的錯誤,所以我們要先作一些設定。

錯誤訊息:
Create failed for Availability Group Listener 'carylistener'.

The WSFC cluster could not bring the Network Name resource with DNS name 'carylistener' online. The DNS name may have been taken or have a conflict with existing name services, or the WSFC cluster service may not be running or may be inaccessible. Use a different DNS name to resolve name conflicts, or check the WSFC cluster log for more information.


PS:此問題我原先是懷疑是否是已有存在相同的名稱,但是一來這是新建的AD,二來透過不同的名稱建立也是相同的情況,所以排除此情況的可能性。

3、此時我先透過RDGW的機器安裝AD的管理工具,藉以進行管理AWS Microsoft AD。

4、安裝完成後,請開啟Active Directory Users and Computers,並連線到AWS Microsoft AD -> AD的OU名稱 -> Computer。

5、選擇新增Computer物件。


5、啟用進階設定。

6、選擇建立好的Listener -> Properties -> Security -> Add -> Cluster Name -> 並請將下列的權限進行賦予,或是你也可以直接給予Full Control的權限。

建議權限:
Read
Allowed To Authenticate
Change Password
Receive As
Reset Password
Send As
Validate write To DNS Host Name
Validate Write To Service Principle Name
Read Account Restrictions
Write Account Restrictions
Read DNS Host Name Attributes
Read MS-TS-GatewayAccess
Read Personal Information
Read Public Information


7、連線到主要的節點上,選擇Availability Groups -> New Availability Group Wizard

8、在Replicas的部份請記得將二個節點都加入,然後切換到Listener的部份,名稱請使用在第5個步驟中設定的名稱,而IP請選擇各節點中的Secondary Proviate IPs中的第二個加入。

第一個節點


第二個節點


 9、確定建立完成。

10、檢查並確認Listener建立完成。


上述的方式提供給大家不同安裝AlwaysOn的方式,依照上述的設定,其實真的不用10分鐘就可以建立完成(不包含等待的30分鐘),而且跟自已手動建立的,真的沒有其他的不同,推鑑下次大家可以參考看看。


參考連結:
SQL Server on the AWS Cloud: Quick Start Reference Deployment
https://docs.aws.amazon.com/quickstart/latest/sql/welcome.html
Create Listener Fails with Message ‘The WSFC cluster could not bring the Network Name resource online’
https://blogs.msdn.microsoft.com/alwaysonpro/2014/03/25/create-listener-fails-with-message-the-wsfc-cluster-could-not-bring-the-network-name-resource-online/
Create Availability Group Listener Fails with Message 19471, ‘The WSFC cluster could not bring the Network Name resource online’
https://blogs.msdn.microsoft.com/alwaysonpro/2013/10/30/create-availability-group-listener-fails-with-message-19471-the-wsfc-cluster-could-not-bring-the-network-name-resource-online/

2017年12月22日 星期五

如何在AWS透過EC2建立自動彈性延伸的網站

在傳統的網站部份,如果針對特定的節日或進行行銷時,可能網站會有較多的流量,此時原先的主機可能無法承受負載,所以通常會進行網站設備上的擴充,但是在時間過了之後,可能就沒有這麼多的使用者與流量時,就會造成設備的閒置與浪費,所以此時雲端是一個很好的選擇。

在各家的雲端上建置IaaS的部份VM皆可以選擇不同的Instance Type,當然我們可以在不同的時間點進行切換,比如當有節日或活動要進行時,我們可以彈性的調整Instance Type,但目前在AWS EC2上有不同的選擇,您可以透過Auto Scaling與Load Balance的功能整合,藉以達到快速的Scale Out,來更合適的完成公司的商業需求。

建置方式:
1、建立環境所需的影像檔

1-1 先針對你的網站設計好需要的網頁與功能,然後制作成一個Image.
1-2 方法很簡單,請到EC2 -> Instances -> 選擇你要制作的Instance -> Image -> Create Image


輸入Image的名稱與預設的Disk

送出Create Image的請求,需至下一步驟進行確認是否已建立完成。

1-3 建立完成後,請到Images -> AMIS -> 確認Image是否已建立完成 。


2、建立Load Balancing

由於在後續上會有多個Instance Type自動進行建立,而且也需要進行負載平衡,所以此步驟我們建立一個Load Balanc er進行。

2-1 撰擇Load Balancing -> Load Balancers -> Create Load Balancer

2-2 在選擇Load Balancer時有三種項目可能選擇,這三種的選擇上看你的應用程式類型選擇Application Load Balancer或Network Load Balancer,基本上不建議再選擇第三種傳統模式,此部份我們選擇第二種高效能的Network Load Balancer進行。

2-3 決定NLB的名稱與開放的Port、如果您的網站有使用HTTPS的話,請將443也一同加入。

2-4 指定在Region中特定的AZ(Availability Zones)區域。

2-5 定義Target Group去指定特定的Instance。

2-6 指定特定的Instance到此Target Group中,但由於我們後續會由Auto Scaling自行啟動,所以此處不進行手動加入。
2-7 建立完成。



3、建立Auto Scaling

3-1 建立 Auto Scaling Lunch Configuration
3-1-1 選擇Auto Scaling -> Launch Configuration -> 建立Auto Scaling

3-1-2 進入後,頁面說明會有二個步驗,分別是建立設定檔與群組的部份,首先我們就先建立設定檔的動作。

3-1-3 選擇我們在步驟1-3之中所建立的Image。

3-1-4 選擇後續自動延伸時所建立的Instance Type

3-1-5 輸入Launch Configuration的名稱,建議也可以勾選透過CloudWatch進行監控。

PS:由於啟用CloudWatch進行監控時可能會有額外的費用產生,所以再請注意。

3-1-6 選擇啟動後的Instance上的Disk大小。

3-1-7 設定Security Group,此部份我只有開啟80(HTTP)與3389(RDP)二個,當然你也可以將443(HTTPS)加入,由於我之前已有設定的Security Group符合,所以我就將之前的加入。
3-1-8 再次檢示Launch Configuration的設定並確認建立。

3-1-9 設定你key pair的檔案,此處由於之前也設定過了,所以可以使用相同的檔案即可。

3-2 建立Auto Scaling Group

3-2-1 輸入Group Name與預計進行Scaling的網路區段,你可以將多個區段加入,藉以避免因單一區段發生問題時,整體無法運作,此區請至少加入一個Network與Subnet。

在進階設定的部份,請將第2步驟中建立的NLB加入,並將請將Health Check Type設定為預設的EC2,請為這樣我們就可以透過CPU與或網路流量來設定條件,藉以達到自動延伸的功能。

3-2-2 此部份由於我們要模擬當使用者過多時,CPU使用率過高,造成網站回應過慢,所以我先設定為1-5個Instance,當使用率超過50%的時候,就自動進行Scal Out。

3-2-3 設定警告通知,當遇到勾選的事件產生時,即會自動寄出通知。

3-2-4 最後檢示Auto Scaling Group的設定


3-2-5 建立完成

3-3 測試網站連結

3-3-1 建立完成後,我們可以到Auto Scaling -> Auto Scaling Groups 確認目前已自動啟動的Instance為何。

3-3-2 接下來我們同樣的透過Load Balancer的DNS來連線到網站,確認是否可以正常的連線。
請到Load Balancing -> Load Balancers -> 已建立的NLB -> Description中,即可看到。

3-3-3 測過此網址進行確認是否可以正常的連線。

 4、Auto Scaling測試

4-1 由於我們在3-2-2之中,設定Auto Scaling的規則為CPU使用率超過50%,所以最快的方式我使用了測試軟體(Intel Brun Test)去直接的快速提高CPU的使用率。


4-2 經過一段時間,系統就會自動再產生一個Instance,然後自動加入NLB中。

4-3 最後,由於CPU 使用率持續不斷的增加,所以Instance數量成長到我設定的最大值。


4-4 Instance 的成長區間圖
4-5 我透過NLB的DNS網址進行連結測試,你會發現五個Instance皆會輪序的進行訪問,當然如果你要確認他有連結到那一台Instance的話,你可以逐一連到Instance中,然後修改頁面即可確認。

上述的介紹,你可以透過Auto Scaling與Elastic Load Balancing的整合,藉以快速的達到Scale Out的需求,也可以達到效益的最佳化,當然此部份後續仍有其他可以研究的部份,如程式的修改與部署的部份,我們將會在後續的章節繼續再跟大家介紹,謝謝。


關鍵字:
Amazon EC2Elastic Load BalancingAuto ScalingAWS

參考連結:
Getting Started with Auto Scaling
http://docs.aws.amazon.com/autoscaling/latest/userguide/GettingStartedTutorial.html
Elastic Load Balancing
https://aws.amazon.com/tw/elasticloadbalancing/
What Is Elastic Load Balancing?
http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html