2015年12月7日 星期一

網站下載過慢問題分析 - 以MSDN Download為例

最近想從MSDN Download訂閱下載檔案,但發現不管下載什麼檔案時,下載的速度大約都只能在15K~20K左右,而但我的網路是20MB/5MB,在其他的站台下載也不會有這麼慢的速度,透過測試網站進行確認時,也的確如我遇期,所以興起我進一步確認這個問題,也希望可以找到解決的方法。

經過一番的確認後,初步排除基本問題,如共同下載、中毒、網路速度過慢等問題,後來發現一個情況,那就是透過不同的瀏覽器會有不同的下載行為,在我透過Microsoft Internet Explorer、Microsoft Edge與Chrome這三套來分別進行測試時,發現IE與Chrome都只能在20k左右,但是透過Microsoft Edge卻可以達到2MB左右的速度,所以初步懷疑應該也不是網站限制流程的問題。

在以往的解法上,微軟官方在以前有提供透過工具(Microsoft File Transfer Manager)進行下載,可以加速處理,我以前試過也的確可以很快的下載完成,但很可惜的是在2015年3月以後就不支援了,在IE10(含)也無法透過此工具進行,雖然可以透過設定至IE9的相容性模式進行解決,但還是不太方便,而且其他的瀏覽器也無法透過此工具進行。

實際上的解法我放在最下法的部份,下面是我針對此問題透過Wireshark進分析的的過程與個人看法,再請大家參考,如有不對的部份也歡迎討論。


另外雖然看不到程式碼,但我想應該可以透過Wireshark捉個封包來看看,並藉以了解並從中找出一些眉目,所以我就索性在我Windows 10的電腦上同時透過Chrome與Edge分別各捉一個封包進行比較。

捉到的封包我們先透過Wireshark中的Analyze -> Expert Info進行分析,從下圖可以看到在透過Chrome進行下載時,會有多次的out-of order、duplicate ACK與Retransmission的情況發生,而且次數很多,相反的在Microsoft Edge上就沒有這種情況,但問題來了,發生這種情況時該如何進行調整,當然此時的建議或許你使用Microsoft Edge會是比較快的方式(哈)。

封包分析 - Chrome


封包分析 - Microsoft Edge


但進一步的從封包來看,發現從開始下載檔案後,二個瀏覽器在下載的行為上有不同的方式,首先從Chrome的下載行為上來看,Client端會送出一個Windows Size=65535,Len=0的封包,然後下一個封包Server端會回送Windows Size=20440,Len=1460的封包,然後一直反覆的確認每次的傳送。


但是從Microsoft Edge上來看,你可以發現雖然Client端也是送出一個Windows Size=65535與Len=0的封包,但是Server端卻可以直接進行處理,並直接進行傳送。

另外我們檢查在Chrome送出時,在Windows size scaling factor的值為-1。

但是在Microsoft Edge的部份,在Windows size scaling factor值為-2,我想這就是主要的原因所在,因為每次Windows Size都需要重覆的確認,造成傳送上的延遲,另外關於Windows size scaling factor的值說明,可以參考下列的連結說明。

[Window size scaling factor: -1 (unknown)]
https://ask.wireshark.org/questions/10071/window-size-scaling-factor-1-unknown

See RFC 1323 for the specification of the TCP window scale option.
http://www.ietf.org/rfc/rfc1323.txt.pdf

當知道原因後,我進一步的追查,果然找到一個解法,詳細說明請參考下列的說明,解決方法很簡單,只需調整登錄檔中的三個參數值,如下所示。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{a9469a2f-b852-4e88-a4ee-2d17e7c19c65}]
"MTU"=dword:00000578
"EnablePMTUBHDetect"=dword:00000001
"EnablePMTUDiscovery"=dword:00000000

上述紅色的文字即代表你網路介面卡的GUID,你可開啟一個Dos Command輸入下列的指令進行查詢,再將查詢到的值填入後,再將上述的值貼入.reg檔執行即可。

查詢有線網路卡介面:netsh lan show interfaces
查詢無線網路卡介面:netsh wlan show interfaces



Browser Connections Appear to Stop Responding When Accessing IIS Over SSL
https://support.microsoft.com/en-us/kb/285821

更改後再請重新啟動電腦,再進行確認,發現就算透過Chrome進行下載時,也可以達到2MB左名的速度。


關鍵字:Download SlowMSDN DownloadWindows Size Scaling FactorSpeed up Downloads

2015年12月3日 星期四

在混合雲的架構上建立完整的AlwaysOn架構

在前面的文章中已有多篇介紹如何架設AlwaysOn的教學,不管是在區網內,或在Amazon的EC2上都已有介紹,但是當單一區域發生問題時,還是有可能造成服務的中斷,所以本篇特別介紹如何整合區網與Azure,讓單一區域發生問題時,可以直接飛到雲端,藉以讓服務中斷的可能性降的更低。

在實作這個架構後,坦白說你要遇到系統全部掛掉無法使用的機率應該趨近於0,因為不管是本地端的防護或是雲端皆可當成很好的備援,另外此架構也可以有效的分散系統效能的瓶頸,所以建議大家可以參考,只是在安裝上步驟繁瑣而且可能會遇到許多不同的問題,所以特別整理此篇藉以自我參考,也希望可以幫助到大家。

前導文章:
  1. 如何在Amazon上透過EC2,架設完整的AlwaysOn架構。
  2. SQL Server - AlwaysOn連線設定
  3. SQL Server 2012 新功能 - AlwaysOn安裝與設定
  4. SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn

架構示意圖:

架構說明:
架構上簡單來說會分為公司內部區網與Azure上的區網,然後中間透過Azure的Site to Site VPN來進行連結,其實你可以想像成有二個區網,一個在地面上,也就是公司內部的區網,另一個是在雲端上,也就是Azure上的區網,然後透過Site to Site VPN的服務彼此進行連結。

1、區網架構:
  • Home-AD(Windows 2012) - 192.168.1.2
  • RRAS Server(Windows 2012) - 192.168.1.1
  • AlwaysOn-Node1(Windows 2012+SQL 2014) - 192.168.1.14
  • AlwaysOn-Node2(Windows 2012+SQL 2014) - 192.168.1.15
2、雲端架構:
  • Azure-AD(Windows 2012) - 192.168.2.4
  • AlwaysOn-Node3(Windows 2012+SQL 2014) - 192.168.2.5


安裝步驟:
1、規畫區網內的IP配配。
2、將二個區網透過Site to Site VPN進行綁定,並確認彼此之間可以相互溝通(Ping)。

這個步驟非常的重要,因為二個區網的溝通都是靠此機制(Site to Site VPN)進行,所以我覺得這是混合雲中的關鍵,所以在此我特別說明一下。

基本上由於我由沒有實體的設備可以進行,所以我是透過微軟的Routing and Remote Access(RRAS)服務來完成,詳細的文章由於已有很多參考資料,所以就先不整理,再請參考下列的文章說明。

VPN Gateway FAQ
https://azure.microsoft.com/en-us/documentation/articles/vpn-gateway-vpn-faq/

Creating a site to site (S2S) VPN to Azure with RRAS, one physical NIC and a NAT gateway
http://blogs.technet.com/b/diegoviso/archive/2014/10/28/creating-a-site-to-site-s2s-vpn-to-azure-with-rras-and-one-physical-nic.aspx

PS:
另外說明,在使用Routing and Remote Access(RRAS)服務時需要注意下列連結提到的幾個事項,比如說我原本是透過IP分享器進行上線,但由於不能透過NAT進行,所以我的RRAS主機改由撥接上網,而且也建議透過固定IP進行,要不然的話每次斷線你就需要手動調整Azure上的區網設定,然後又再進行連接。

檢查清單:安裝及設定 RRAS VPN 伺服器
https://technet.microsoft.com/zh-tw/library/dd469733.aspx

3、建議在雲端上建立複本的AD與地面上的AD進行同步,藉以達到備援的動作。

Installing an Additional Domain Controller by Using the Graphical User Interface (GUI).
https://technet.microsoft.com/en-us/library/cc753720(v=ws.10).aspx

Installing a Domain Controller in an Existing Domain
https://technet.microsoft.com/zh-tw/library/cc816609(v=ws.10).aspx

4、請先依照下列的文件將AlwaysOn安裝完成。

特別說明,由於我們透過Site to Site VPN將二個網路綁在一起後,基本上你可以把二個區網當成同一個網路有不同的網段,所以在後續上你可以直接把第三個節點(AlwaysOn-Node3)直接加入Cluster之中,另外在建立AlwaysOn的服務時,也可以直接將第三個節點(AlwaysOn-Node3)直接加入即可。

另外在建立各個節點的分配上,我建議可以透過下列的方式進行配置,如下表所示。

4-1 第一個與第二個節點由於皆在同一個區網內,所以建議可以透過同步的方式進行交易,另外此二個節點也建議不要設定成可讀取,因為在日後交易量過大時,容易造成瓶頸問題。

4-2 另外第三個節點由於在不同的區網內,為了不影響運作,建議採用非同步的交易進行,然後此節點可以開啟唯讀設定,這樣的設定一來可以分散流量,二來又不會影響到交易時間,在實作上是比較合適的作法。


SQL Server 2012 新功能 - AlwaysOn安裝與設定
http://caryhsu.blogspot.tw/2012/04/sql-server-2012-alwayson.html

5、建立AlwaysOn Listener。

其實這個步驟如同我在Amazon上建立時相同,其實我覺得才是最關鍵的部份,而且在建立後其實也有遇到與Amazon上相同的情況,我稍後再整理說明。

5-1 由於我的各個節點都是安裝Windows 2012,所以必須先安裝下列的Hotfix進行修正。

PS:這邊指的是所有的SQL節點,只要是OS為2008R2 or 2012,都需要檢查此KB是否已有安裝,如果沒有的話,則必須一定要安裝。

更新可讓 Windows Server 2008 R2 和 Windows Server 2012 基礎 Windows Azure 虛擬機器上的 SQL Server 可用性群組接聽程式
https://support.microsoft.com/zh-tw/kb/2854082

5-2 為雲端上的每一個節點設定Endpoint藉以進行訊息回傳(direct server return)

5-2-1 請先設定你的PowerShell環境,相關設定請先參考我下列的文章說明。

如何變更Azure上虛擬網路已配置虛擬主機的IP
http://caryhsu.blogspot.tw/2015/09/azureip.html

5-2-2 查詢Azure網段內可用IP有那些

PowerShell語法:
(Test-AzureStaticVNetIP -VNetName "VNet" -IPAddress 192.168.2.0).AvailableAddresses

由於在Azure上目前只有二台主機分別是AzureAD(192.168.2.4)與AlwaysOn-Node3(192.168.2.5),所以照我的規劃有192.168.2.6-192.168.2.11可以使用,所以我預計以192.168.2.9進行使用。

5-2-3 增加Azure-VM-Endpoint

PowerShell語法
$ServiceName = "alwayson-node3" #主機在Azure上的名稱
$AGNodes = "alwayson-node3"     #VM名稱
$EndpointName = "AGLE"          #endpoint name
$EndpointPort = 1433            #endpoint port
$ILBName = "ILBAG"              #internal load balancer name
$SubnetName = "Subnet-1"        #目前在Azure上規劃的子網路(如下圖)
$ILBStaticIP = "192.168.2.9"    #預計設定給Endpoint的IP位址

Get-AzureVM -ServiceName $ServiceName -Name $AGNodes | Add-AzureEndpoint -Name $EndpointName -LBSetName "$EndpointName" -Protocol tcp -LocalPort $EndpointPort -PublicPort $EndpointPort -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10  -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM



建立完成後,你如果仍是使用舊的Portal時,會無法看到,但是透過新的Portal時,就可以看到新增的Endpoint,如下圖所示。

新的Portal:

舊的Portal:

當然你也可以透過PowerShell來查詢特定VM上是否已建立的Endpoint。
Get-AzureInternalLoadBalancer -ServiceName alwayson-node3


5-2-4 建立AlwaysOn Listener

在混合雲的架構下,要新增AlwaysOn Listener是比較特別的,不像一般以往透過SQL Server Management Studio,這時就要透過Failover Cluster Manager來進行,開啟後,請點選目前Primary Node -> Add Resource -> Client Access Point。

輸入你想要的Listener Name,然後再將目前公司區網內預計要分配給Listener的IP指定在下方,另外你還需要配置Azure Listener的IP,但由於介面的關係,所以後續再進行設定即可。


設定完成後,即可在Resource區中看到剛剛新增的項目,此時請再修改Azure節點的IP設定。


先調整名稱的部份,由於原本是設定成動態分配,所以名稱的尾碼為0,目前由於我們改分配成192.168.2.9,所以建議更改成正確認名稱,另外就是設定下方IP分配的選項,如下圖所示。


再請確認剛剛設定的Listener屬性中相依性是否為 "OR" ,因為在節點上不會二個同時上線,所以在規則上請設定成 "OR"即可。

設定完成後,請嘗試將此Listener設定成Online,此時成功後,你就會看到如下圖所示。


最後再選擇 agdemo -> other resources -> agdemo -> Dependences 將Listener加入相依性,最後我們在回到SQL Server Management Studio即可看到Listener已新增完成。



Configure an external listener for AlwaysOn Availability Groups in Azure
https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-sql-server-configure-public-alwayson-availability-group-listener/

6、AlwaysOn Listener問題處理

建立完成後,坦白說跟我在建立Amazon的時候一樣存在二個問題,一個是連線逾時的問題,另一個是無法進行readonly routing的問題,詳細的說明與解法與我下面的文章說明相同,也是一樣的情況,再請參考下列的連結設定,在此我就不再加以贅述。

如何在Amazon上透過EC2,架設完整的AlwaysOn架構。
http://caryhsu.blogspot.tw/2015/10/amazonec2alwayson.html

關鍵字:Hybrid CloudAlwaysOnSite to Site VPNRouting and Remote AccessMulti-Subnet

2015年11月23日 星期一

如何規畫並進行SQL Server的搬移計畫

近日接到新的專案,由於最近新進一台主機,所以需要將原本的SQL Server 2012搬移到新的主機上,由於需要確認的事項眾多,所以我將相關的所有過程整理起來,以備日後與大家參考,加有不足的部份也歡迎大家補充。

環境描述:

  1. SQL Server 2012(11.3000)
  2. 只有使用基本的Backup方案,沒有使用其他的DR(Disaster Recovery)方案。
  3. 有使用Third-Party軟體進行備份檔案的移地備份。
  4. 新舊資料庫主機的環境已設定成相同。

預期方案:

  1. 兩台資料庫主機在完成後,會進行IP的交換。
  2. 由於為了避免轉移失敗,所以會先保留原機,待移轉成功後,再進行舊機器的處理。
  3. 在搬移資料檔的方式有很多種,可以參考下列的作法,但由於我的二台主機的版本與版號完全相同,所以我將透過附加資料檔的方式進行。

    Move a database from one server to another server in SQL Server 2008
    http://blogs.msdn.com/b/sreekarm/archive/2009/09/11/move-a-database-from-one-server-to-another-server-in-sql-server-2008.aspx

先前檢查動作:

  1. 確認相關的應用程式,在進行搬移時,也需要進行停機的動作。
  2. 確認所有連線到此資料庫的應用程式,是否有透過資料庫主機名稱進行連線,如果有請進行調整。
  3. 確認新主機上的1433 Port是否已有開啟,詳細的SQL Server Port設定可以參考下列的連結:

    Configure the Windows Firewall to Allow SQL Server Access
    https://msdn.microsoft.com/en-us//library/cc646023(v=sql.120).aspx
  4. 確認兩台資料庫設定(sp_configure)是否相符。
  5. 確認各資料庫的大小與搬移時所需的時間。
  6. 確認新主機的磁碟空間大小是否足夠。
  7. 確認資料庫搬移後,新的資料庫主機的磁碟代號是否相符。
  8. 確認有那些Database Login、Users與相關的權限設定。
  9. 確認有那些已建立的相依性物件(SQL Agent Jobs、Linked Servers)。
  10. 確認有那些維護計畫需要進行搬移。
  11. 確認有那些DTS Package需要進行搬移。

總體停機時間評估:

  1. 資料庫搬移:如我的資料庫總大小為122G,而如果透過單純的網路傳輸,約為每秒80MB,所以大約傳輸完成最快要下列的時間,但實際上可能不會這麼的理想。

    All Data Files 122G/ Network Transfer 80MB = 1561.6 sec
  2. 移轉登入與密碼(可事先準備)
  3. 解決孤兒使用者的問題,相關的處理方式,請使用下列的語法進行處理。

    sp_change_users_login (Transact-SQL)
    https://technet.microsoft.com/zh-tw/library/ms174378(v=sql.110).aspx
  4. 移動作業、警示與操作員(可事先準備)。
  5. 移動 DTS 封裝(可事先準備)
  6. IP位置更換
  7. 相關應用程式上線與測試。
  8. 相關問題排除。

     
PS:在總體時間上建議可以多評估較長時間,以免在轉移後發現問題無法即時處理。


詳細轉移動作:
關於詳細的轉換方式,由於在官網上已有詳細的說明,如下列的作法,我將大項目列出,僅供參考。

  1. 移動使用者資料庫
  2. 移轉登入與密碼
  3. 解決孤兒使用者的問題
  4. 移動作業、警示與操作員
  5. 移動 DTS 封裝
  6. 變更 sp_configure 設定以符合先前的系統

     如何在執行 SQL Server 的電腦之間移動資料庫
     https://support.microsoft.com/zh-tw/kb/314546


確認檢查表:


檢查表檔案下載:
https://onedrive.live.com/redir?resid=F8199A68177F41CB!7062&authkey=!ABsNtbO68dxPBtI&ithint=file%2cxlsx


關鍵字:Migrating SQL Server DatabasesChecklistMove Database

2015年11月7日 星期六

如果在AlwaysOn上進行各個節點的Data File與Log File的搬移

近日由於資料量的成長,所以原本配置的磁碟已不夠空間,在進行評估後,決定要將Data File與Log File搬到新的磁碟上,但由於我的AlwaysOn架構已上線了,所以必須在最短的時間內進行搬移,在參考了相關的文件後,我也將我的設定方式整理如下。

環境說明:
依據我之前的文件說明,我的AlwaysOn目前有三個節點、第一、二節點為同步,第三個節點為非同步,並且設定可以進行唯讀。

預期方案:
為了不影響正常的運作,所以預期會在主要節點先進行設定,但設定完成後,再Failover到次要節點,此時再進行檔案的搬移,最後再Failover到另一個節點,再進行設定後即可,所以在此次的影響,只有二次各約1~3秒的時間,也就是Failover的時間。

設定步驟:
1、如果次要節點可以進行連線與讀取時,需要先行關閉,但由於我的架構只有第三個節點可以唯讀連線,所以只需設定第三個節點即可。

USE[master]
GO
ALTER AVAILABILITY GROUP [cary-ag] MODIFY REPLICA ON N 'cary-sqln3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = NO))
GO

2、設定資料庫的實體檔案路徑,請注意此設定並不會立即生效,只有當資料庫重新啟動時,才會進行生效。

此動作請依序在三個不同的節點上各自進行,並且注意存放的目錄也要讓SQL Server的啟動帳號有讀寫的權限。

ALTER DATABASE [cary-db] MODIFY FILE (NAME='cary-db',FILENAME='E:\sql_data\cary-db.mdf')
go
ALTER DATABASE [cary-db] MODIFY FILE (NAME='cary-db_log',FILENAME='E:\sql_data\cary-db_log.ldf')
go

3、請在主要節點上進行Failover,此時主要與次要節點的身份會進行互換。
ALTER AVAILABILITY GROUP [cary-ag] FAILOVER;
GO

4、切換完成後,請在原本的主要節點(切換後是次要節)上,先將SQL Server的服務先停止,然後再將檔案複製到你的目的地,然後再進行服務的啟動,此時再確認Data File與Log File是否已指定到新的位置上。

5、同樣的,再進行第三個步驟,然後再進行另一個節點的設定,直到三個節點都設定完成。

6、最後都設定完成後,再將第三個節點的唯讀連線開啟,即設定完成。
USE[master]
GO
ALTER AVAILABILITY GROUP [cary-ag] MODIFY REPLICA ON N'cary-sqln3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))
GO

參考連結:
How to move databases configured for SQL Server AlwaysOn
http://blogs.msdn.com/b/sqlserverfaq/archive/2014/02/06/how-to-move-databases-configured-for-sql-server-alwayson.aspx

關鍵字:AlwaysOnData FileLog File

2015年10月23日 星期五

如何在Amazon上透過EC2,架設完整的AlwaysOn架構。

        在我的之前的分享(SQL Server 2012 - AlwaysOn 安裝與設定教學)中,已有介紹到如何進行AlwaysOn的安裝,但是在Amazon上透過EC2的虛擬主機進行安裝時,卻發現了有些限制與不同的部份,在歷經一次的失敗後,終於解決,所以將相關的重點整理如此。

基本上的安裝可以參考我上述的安裝步驟進行,但是有一點需要特別注意的事,那就是IP與網段的設定,在EC2上由於私有IP的設定都需要綁定在網卡上,所以無法像在自已的環境中先行配置與保留,所以在一開始的IP設定與網段設定,非常的重要,因為這一部份如果沒有先行規劃好的話,後面你要更改非常的麻煩,這也是我重新安裝的原因之一。

首先我先將我目前主機的規劃整理如下。

預期架構:
目前希望架設三個節點,二個節點為同步模式,另一個節點為非同步模式,並且可以進行唯讀讀取的動作。

主機資訊:
Host Name OS Version SQL Version
Cary-AD Windows 2012 R2  
Cary-SQLN1 Windows 2012 R2 SQL Server 2012 SP2
Cary-SQLN2 Windows 2012 R2 SQL Server 2012 SP2
Cary-SQLN3 Windows 2012 R2 SQL Server 2012 SP2

IP配置(很重要):
Host Name Public IP Private IP Cluster IP Listener IP Subnet
Cary-AD 52.88.0.0 172.31.33.5

172.31.32.0
Cary-SQLN1 54.185.0.0 172.31.24.231 172.31.24.232 172.31.24.233 172.31.16.0
Cary-SQLN2 52.87.0.0 172.31.42.72 172.31.42.73 172.31.42.74 172.31.32.0
Cary-SQLN3 54.185.0.0 172.31.13.11 172.31.13.12 172.31.13.13 172.31.0.0

1、在Amazon EC2上,建議先將上述的IP先配置好,然後再進行後續的動作,詳細的流程可以參考下列的安裝步驟,裡面有詳細關於Private IP配置的方式。

Implementing Microsoft Windows Server Failover Clustering (WSFC) and SQL Server 2012 AlwaysOn Availability Groups in the AWS Cloud
https://media.amazonwebservices.com/AWS_WSFC_SQL_Server_AlwaysOn.pdf

2、安裝完Failover Clustering之後,由於我是沒有透過iSCSI進行,所以建議在AD上建立一個分享目錄藉以進行Heartbeat,方法上可以透過介面進行,或是透過下列的PowerShell語法進行建立。

set-clusterquorum -NodeAndFileShareMajority "Cary-AD\Witness"

PS:建議在建立前可以先附予分享的目錄讓叢集名稱可以有讀寫的權限。

參考說明:
Set-ClusterQuorum

3、安裝完成後,由於預設是透過DHCP進行,可以看到服務是offline,需再將預期配置的Cluster IP也設定上去,設定完成後,再將服務設定成Online即可完成,再如下圖所示。


4、當全部都設定完成後,重頭戲就是關於Availability Group Listeners的建立,這個部份非常的重要,如果你在之前沒有作好網段的規劃,你會遇很多的問題,如你無法加入特定的私有IP,就算強制加入後,你在進行Failover時,你也會一直失敗,這也是我重裝的主要地雷,設定的畫面如下。



5、最後你可能這樣就都完成了,其實還有二個問題,一個是當我Failover到第二個節點時,如果我透過Listener連接時,會發現無法連接,但設定Timeout時間加長到30秒時,就可以連,後來找到解決方法如下。

相關的說明可以參考下列的連結,解決方法只需要修改二個參數即可。

先開啟PowerShell視窗,輸入下列的指令確認目前的參數為何。

a. Import-Module FailoverClusters
b. Get-ClusterResource

確認目前叢集的資源有那些,其中需確認你目前的Listener的完整名稱,通常名稱都是Cluster Name + Listener Name,知道名稱後,再透過下列的指定捉取Listener的參數值。

c. Get-ClusterResource cary-cluster_cary-listener | get-clusterparameter

列出參數值後,需特別注意二個參數值,HostRecordTTL與RegisterAllProvidersIP,需分別進行更改。



d. Get-ClusterResource cary-cluster_cary-listener | Set-ClusterParameter -Name HostRecordTTL -Value 120
e. Get-ClusterResource cary-cluster_cary-listener | Set-ClusterParameter -Name RegisterAllProvidersIP -Value 0

當完成上述的設定後,需要再重新啟動Listener才會生效,可以透過下列的指令進行。

ALTER AVAILABILITY GROUP cary-cluster RESTART LISTENER 'cary-listener';

PS:此段指令是放在SQL Server中進行執行。

Connection Timeouts in Multi-subnet Availability Group
http://blogs.msdn.com/b/alwaysonpro/archive/2014/06/03/connection-timeouts-in-multi-subnet-availability-group.aspx

最後一個問題是針對Readonly Routing的問題,我目前測試發現可能暫時無解,我也確認在相關的Readonly設定無誤,但發現由於節點的IP只能有一個唯一的是Online,所以就算您透過sys.availability_read_only_routing_lists查出有多個路由順序的設定,但仍然只能連到Primary Node,目前的作法我是直接設定一組DNS然後搭配ApplicationIntent=readonly;的參數直接連到第三個節點,當然如果有其他較佳的作法,也歡迎提出分享。

參考連結:
  1. Implementing Microsoft Windows Server Failover Clustering (WSFC) and SQL Server 2012 AlwaysOn Availability Groups in the AWS Cloud
    https://media.amazonwebservices.com/AWS_WSFC_SQL_Server_AlwaysOn.pdf
  2. Set-ClusterQuorum
    https://technet.microsoft.com/en-us/library/ee461013.aspx
  3. Connection Timeouts in Multi-subnet Availability Group
    http://blogs.msdn.com/b/alwaysonpro/archive/2014/06/03/connection-timeouts-in-multi-subnet-availability-group.aspx

關鍵字:AmazonAlwaysOnReadonly RoutingEC2Connection TimeoutsWSFC

2015年9月19日 星期六

如何變更Azure上虛擬網路已配置虛擬主機的IP

最近想透過Azure的Site to Site VPN將地上與雲端進行連結,在建立虛擬網路後,並立即建立了二個VM,並規劃成192.168.2.0 ~ 192.168.2.255的網段,在建立VM後,會依照順序進行IP的配置,如下圖所示。


最由於我想將AD的IP更改至192.168.2.4開頭的位置,但是重開機後,由於Azure會儘量保留主機配置到的IP位置,所以還是達到我的目的,查了一下文件,從介面上也是無法進行(到目前為止),所以只好透過Azure Powershell來進行,我將步驟整理如下。

原環境設定:
1、alwayson2014 -> 192.168.2.4
2、winad-new -> 192.168.2.5

新環境設定:
1、alwayson2014 -> 192.168.2.5
2、winad-new -> 192.168.2.4

設定步驟:
1、請先設定電腦可以執行Azure Powershell

安裝Azure Powershell模組
請先下載下列的安裝檔後,再進行Azure Powershell的安裝即可。
http://go.microsoft.com/fwlink/p/?linkid=320376&clcid=0x404


2、下載帳號設定檔

請先開啟Azure Powershell後,輸入下列的指令
Get-AzurePublishSettingsFile

輸入後由於第一次啟動,所以系統會詢問是否要進行自動資訊收集,當問題發生時可以進行傳送,這部份可以自行選擇,我是擇擇Y繼續進行。


輸入後即會立即開啟網頁,並進行登入後即會立即下載設定檔,如下位所示


3、輸入下列的指令進行匯入設定檔

Import-AzurePublishSettingsFile 'd:\myazure.publishsettings'
執行後會將此設定檔中的Azure訂閱戶顯示出。


4、確認目前已載入的帳號資訊

Get-AzureSubscription
由下圖可看到我的帳號中有二個Azure訂閱



5、由於我的VM皆建立在第二個訂閱中,所以透過下列的指令進行訂閱的切換
Set-AzureSubscription –SubscriptionName "Visual Studio Ultimate with MSDN" –SubscriptionId "01adf4ca-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

    5-1 當然你可以透過下列的指令將第二個訂閱設定成預設訂閱
    Select-AzureSubscription -SubscriptionId "01adf4ca-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -default

    5-2 確認目前預設的訂閱為何
    Get-AzureSubscription -default



6、進行VM的IP第一台與第二台的交換,作法上先將第一台更換成192.168.2.6
Get-AzureVM -ServiceName alwayson2014 -Name alwayson2014  | Set-AzureStaticVNetIP -IPAddress "192.168.2.6" | Update-AzureVM

7、將第二台更換成192.168.2.4
Get-AzureVM -ServiceName winad-new -Name winad-new | Set-AzureStaticVNetIP -IPAddress "192.168.2.4" | Update-AzureVM

8、再將原先的第一台更換到192.168.2.5即可
Get-AzureVM -ServiceName alwayson2014 -Name alwayson2014  | Set-AzureStaticVNetIP -IPAddress "192.168.2.5" | Update-AzureVM


9、再次確認,IP已進行交換。



參考文章:
Setting Static IP Addresses in a Virtual Network
http://michaelwasham.com/windows-azure-powershell-reference-guide/setting-static-ip-addresses-in-a-virtual-network/

關鍵字:AzureVirtual NetworkIP AddressVM

2015年8月13日 星期四

如何透過Windows 2012 R2進行網域控制站的架設

        相信有裝過網域控制站(Domain Controller)的人,對於dcpromo.exe的指令並不陌生,但是在Windows 2012以後,這個指令已經不支援了(如下圖所示),所以我們必須透過其他的方式進行安裝,我將安裝的過程整理如下,再請參考。


安裝環境:Windows 2012

1、安裝前確認,請在進行前先將你電腦的名稱與IP設定正確。


PS:上述的電腦名稱與IP是針對我的環境而設定,你可以依照自已的需求進行調整。

2、點選 Server Manager -> Add Roles and fetures


3、說明頁面,直接點選下一步

4、選擇 [Role-based or feature-based installation]

5、依照預設值,選擇 [Select a server from the server pool],在下列的Server Pool會顯示出此台的資訊。

6、此處請勾選 [Active Directory Domain Services],勾選後,系統會直接跳出相關的功能與工具建議,所以請選擇 [Add features]

7、同樣的勾選 Next 到下一步。

8、此處預設會自動勾選 [Group Policy Management],同樣的也請點選 Next 到下一步。

9、說明頁面,同樣點選 Next 到下一步。

10、下列的 [Restart the destination server automatically if required] 可以勾選起來,系統會依照需求自行進行重啟的動作,確認完資訊後,即可點選 Install 進行安裝。

11、安裝完成後即可點選 [Close] 進行結束。

12、安裝完成後,你會看到在 [Server Manager] 會出現驚嘆號,點開後,再點選 [Promote this server to a domain controller]。

13、由於我們是要建立一個全新的樹系,所以選擇第三個,並且在下方輸入你的Domain Name,此處很重要這關系到你的網域名稱,所以請仔細確認。

14、在這有二個比較重要的部份,分別是FFL(Forest functional level)與DFL(Domain function level):基本上要注意的是FFL的部份,當你的網域中有其他的網域控制站較舊時,你就必須設定成較舊的版本,如在我的環境中有一台2008R2的網域控制站時,我日後有可能會進行整併,而且從文件上來看,FFL較大的差異在2008R2以前,所以此處我就選擇Windows Server 2008 R2。

重點提示:FFL與DFL的選擇不會影響到使用者端(不同的作業系統版本)的加入。

下列的DSRM(Directory Services Restore Mode)的密碼也請妥善保存,當需進入DSRM進行還原處理時,則需要此密碼進行。

15、此畫面會出現DNS delegation warning,此時可以不需處理,直接點選 Next 下一步。

16、系統會針對你在前面輸入的網域名稱自動定義你的NetBIOS domain name,直接點選 Next 下一步。

17、設定AD DS的相關目錄,建議維持預設值,直接點選 Next 下一步。

18、確認資訊,直接點選 Next 下一步。

19、在最後的資訊確認頁面,你會看到二個警示,這二個皆可以跳過不處理,直接點選 Install進行安裝即可。

20、安裝完成後,會進行一次的重啟電腦,開機後檢查Server Manager -> Tools即可看到網域控制站相關的工具已可以使用。


參考文件:
Windows Server 2012: Set Up your First Domain Controller (step-by-step)
http://social.technet.microsoft.com/wiki/contents/articles/12370.windows-server-2012-set-up-your-first-domain-controller-step-by-step.aspx
Understanding Active Directory Domain Services (AD DS) Functional Levels
https://technet.microsoft.com/en-us/library/understanding-active-directory-functional-levels(v=ws.10).aspx
DS Restore Mode Password Maintenance
http://blogs.technet.com/b/askds/archive/2009/03/11/ds-restore-mode-password-maintenance.aspx


關鍵字:Domain Controllerdcpromo網域控制站