搭建 Sql Server 2008 R2 Failover Cluster
上半年的任務, 有一項是關于 sql server advanced topic 的,advance topics 里面又有一項重要的是關于集群。那就有的研究了。
sql server 的集群,英文全名稱叫 Failover Clustering, 屬于高可用性的范疇。 簡單來說,提供的作用, 就是保證 7 X 24 小時持續不斷的提供服務,及時當中有個別服務器宕機了,其他服務器會無縫的頂上去,繼續保證應用的可用性,而用戶在這宕機的過程是沒有太明顯的感覺的,除了當前運行的一些操作有一些停頓。在切換已經宕機和可用服務器的過程中,代碼可以是在異常部分做了切換的操作。
這里面牽涉到兩個方面,一是代碼如何編寫,這部分我是從來沒有涉及過,也就是沒有這樣的編程經驗,得補上;二是如何搭建這么一個 Failover Cluster ,以及怎么個自動切換或者手動切換,如何去監控這些服務器的運行狀態。 曾經在 Windows Server 2003 做過一次 sql server 2000 的集群搭建,搭建過程比較粗糙,完全按照網絡的日志或者博客,一步一步實驗下來。對其中涉及到的概念沒有做深入的研究,比如什么叫域,域控,虛擬子網,心跳,故障集群(這里是不是還得有 load balance 集群,提供多臺服務器的網絡負載?1 臺服務器的性能及服務對象是有限的,但是多臺服務器就能解決并發問題了。 這里是不是有分布式服務的概念了?),以及仲裁磁盤,ISIC , SAN , Hyper-V 等。 看吧,只有多問自己幾個問題,在技術上還是完全有晉升空間的。
那么,針對這次的 sql server failover clustering 就多問自己幾個問題吧:
1 搭建這么個集群,需要多少組件,包括硬件的,軟件的:
憑空現在想象的有:
windows server 2008 ( 及以上 ) Failover Clustering,
sql server 2005(及以上) Enterprise Edition ; sql server 2012 以上有 AlwaysOn 這個概念了,而不僅僅是 High Availability.
步驟:
1.1 準備 3 臺虛擬服務器,1 臺用來做域控,共享存儲(但是后來發現還是要單獨拿出一臺做共享存儲,因為 windows server 2008 不支持將共享存儲服務放在域控或者任何一臺集群節點上),2 臺用來做 Failover Cluster nodes.
安裝域控,Active Directory Domain Service, DNS.
安裝中出現的問題:
1.1.1 Active Directory Domain Services (簡稱 ADDS) 不是Feature 而是 Role, 所以要在 Add Roles 里面新建,并且不能和其他 role 一起安裝。必須先安裝 Active Directory Domain Services。
1.1.2 ADDS 安裝過程中會重啟服務器,安裝完畢之后,運行 dcpromo.exe 來配置 Domain Controller.
1.1.3 A delegation for this DNS server cannot be created because the authoritative parent zone cannot be found or it does not run Windows DNS server. 安裝 DNS Server 的時候碰到類似這種提示,我猜他的大意是,你不需要做任何操作,如果你只是在內網里搭建的話。因為我確實只是在虛擬機里面做實驗,所以不管它。
1.1.4 有一步需要配置 Active Directory Domain Controller 的 database, log files 和 SYSVOL 對應的文件夾,那么我們默認給出的就好了:
c:\windows\ntds; c:\windows\sysvol
1.1.5 Directory Services Restore Mode Administrator Password: 和 Domain Administrator account 不同,重新指定一個密碼: Smart123456.
1.1.6 ADDS 安裝完成: this active directory domain controller is assigned to the site “Default-First-Site-Name”. You can manage sites with the Active Directory Sites and Services administrative tool.
1.1.7 將其他 2 臺 server 添加到這個域的時候,本以為只要修改域名,將其指定為已經搭建好的 ADDS 服務器就可以了。但是報錯了:An Active Directory Domain Controller(AD DC) for the domain “smartoffice.com” could not be contacted.
更新:2016/3/26
解決方法是將這兩臺要加入域的計算機的 DNS 指定為我們新建的這臺 DNS 服務器的 IP。然后再加入域。
1.1.8 創建 iSCSI: 啟動 Microsoft iSCSI service 即可。在啟動 iSCSI Service 之前,必須先下載 iSCSI Target, 在微軟官方網站即可下載。
1.1.8.1 創建一個 iSCSI Target, 名為: smartofficetarget, IQN(標識符,可被訪問的資源名)為 smartofficetarget.smartoffice.com.
1.1.8.2 為上面創建的 target 附上 2 個虛擬的文件當做存儲,指定文件大小
1.1.8.3 然后指定 iSCSI identifier, 這里很要小心,iscsi identifier 與 target 之間是雙向綁定,現在 target 創建的時候,就要指定可以訪問的 iscsi identifier(也就是可以訪問這個 target 對應存儲的服務器)。而且,盡量不在 Domain Controller 上建立 target, 我這里卡了很久,直到換了一臺非域控的服務器。最后需要給“硬盤”(這里是虛擬出來的)格式化。有個問題留在這里,這個 iSCSI 指定的硬盤到底用來派什么用場?答案是派兩個用途:一塊用來仲裁,一塊用來放數據?;九渲?2 快就夠了,但是如果是生產,那么就多多益善了。
更新 : 2016/3/27
1.2 安裝 windows server failover cluster
1.2.1 這里需要特別指出,因為在這里耗費了大量的時間:
首先,我是創建了個 windows server 2008r2 的 VM, 然后拷貝 2 份當做 cluster node. 本來圖個方便用 domain administrator 賬戶來配置 failover cluster , 結果提示不能 load 拓撲。就是傳說中的 ox80070005,看指示 ” access denied” 應該是訪問不通,然后開了一堆的 services, 凡是跟 network, remote 相關的服務都開啟來,把防火墻關掉。結果不行,這一次嘗試失敗了。
然后開始建立域用戶,嘗試了往 local administrators group 里面加域用戶,也嘗試了用 group policy 的方法來添加組,給域用戶授權,結果還不行。相當搞笑的是,每次忘 local administrators group 里面加了域用戶之后,下一次打開,發現只有 administrator 在里面,其他新增加的域用戶都沒了。重新添加的時候,會報該用戶已經在這個列表里面了。好奇怪的錯誤,還以為是微軟的 bug. 其實答案在下面。
最后 bing.com 提示,還能嘗試用 sysprep 來搞定,具體是什么鬼,試試再說。bing.wikipedia 上的解釋,sysprep 就是讓你分發你手中的 windows,好吧,那 sysprep 相當于是 system prepare 了。經過一番折騰,安裝了一系列服務之后,果然,在 local administrators group 里面看到我要添加的域用戶了?;ヂ摼W時代的東西,你想了解的都可以在網上找到,你不是一個人!
更新:2016/3/28
1.2.2 Access Point for a Cluster:
cluster name: smartofficedb
networks: 192.168.2.0/24 address: 192.168.2.110
這個步驟因為 duplicate physical address of windows failover cluster virtual adapter 的問題,也耽誤了一下。原因是我用了同一個虛擬機拷貝出來的三個 VM 做節點,并且在 failover cluster feature 安裝的情況下做了 sysprep 導致的。所以重做一個 VM 并且 sysprep 下看看是不是有解決問題。
更新:2016/3/29
另外,這里需要意識到的一個問題就是共享磁盤的問題:到底需要多少磁盤,以及每個 node 對磁盤的掛載。創建一個 iscsi storage server, 配置 iscsi target 以及虛擬磁盤,讓每個 Node 都可以 initialize 到這些虛擬磁盤上。比較郁悶的是安裝有 iscsi target 的服務器是不能用 initializer 來自己創建的 target。
更新:2016/3/30
這里碰到一個心跳的問題:作為心跳的兩塊網卡(vmware 里面只要新增兩塊虛擬網卡),只允許做一件事,就是 communication. 其他都不能做,把網卡屬性里除了 IP4 的其他都去掉,設置兩個相鄰的 IP 地址,比如 10.10.10.1 / 10.10.10.2 , 并且設置為不在域里面自動加入后綴,禁用 NetBIOS. 否則,即使所有的 validation 都過了,cluster 還是不能創建成功,可能會報超時的問題。在創建 cluster 之前把 iscsi 的磁盤都 bring online 會提高速度。
更新:2016/3/31
1.3 安裝 AlwaysOn Failover Cluster Instance
相對簡單,一路 next.
2 怎么去監控這個集群的運行狀態?
2.1 運行的集群可以提供多少并發量: 其實這里犯了一個概念性的錯誤,這個集群是為高可用搭建的,高可用是保證服務在線可用的持續時間,而數據庫特別是 OLTP 型,有大量的寫操作存在,必然會使用很多鎖,這里的 failover 集群,即使服務器再多,也不能提供再多鎖的并發,所以 failover 集群,并不是提高并發量。 并發量的提高,只能靠 Network Load Balance 特性,而這個特性是建立在數據庫只有大量讀操作基礎上的。 2.2 運行的集群宕機的記錄以及現狀模擬宕機最簡單的辦法就是直接拔掉電源,這個時候,會有段時間的不可用。但是這個時間可以忽略。 2.3 如何手工去切換集群的活動節點我們建立了這個集群之后,在 Failover Cluster Manager 里面會有一個 service,只要把這個 service 從一臺集群節點上移到另一個節點上就可以了。這里我也碰到一些小小的問題,就是當用 2 個不同的域賬戶在 2 臺節點上的時候,是不能切換成功的。用了域用戶而且是域管理員賬戶,就可以切換成功了。3 模擬宕機過程
3.1 編程去實現訪問這個集群
3.2 刻意讓其中一臺機器宕機
3.3 觀察并發量,找到最大并發數及系統指標參數。這應該是個平衡點。
逐一解答:
1 首先要明白 域 的概念
1.1 為什么有域,域的作用與創建
域是一種分而治之的思想,所有在網的計算機資源都有自己的 IP, 訪問這些計算資源,靠著 IP 來定位,就不那么容易被人類識別了,容易忘。所以域服務器是用來記錄 IP 與資源名的對應關系。
在 windows server 中,DNS 是實現的底層,管理和配置這些 DNS,應該是由 Active Directory Domain Service 來實現的。首先 AD DS 用 Dynamic DNS 來發布自己的 IP ,使得其他 DNS 知曉自己的服務存在,也同時拉取其他服務器提供的服務及對應 IP。 AD DS 使得幾臺 DNS 之間的記錄共享并不斷同步更新。 在 Dynamic DNS 發明之前,只有靠人工手動同步 DNS 之間的映射信息。
所以 DNS Server 的創建也可以由添加 AD DS Feature 的時候同時創建。
1.2 如何加入一個域
1.3 域的管理:增刪改
1.4 域控的高可用?集群還是雙機?
1.5 DNS 和 Active Directory DomainService 的區別
2 仲裁 Quorum (這里翻譯為仲裁人數或者仲裁數目,更能被好理解些)
2.1 仲裁的作用:決定了 Cluster 是不是起作用,能不能跑起來;
2.2 仲裁的創建:
從 windows server 2008 開始,不再是單一的仲裁磁盤了。而是提供了多種模式的仲裁,比如文件,磁盤,節點等。這樣就避免了單一的磁盤仲裁缺陷。在 windows 2003 仲裁只用磁盤,那磁盤一旦失聯,整個 cluster 就要當機。
仲裁是由 cluster software 配置的。這里有倆個概念需要弄清楚,一是 Failover Cluster Manager SnapIN,二是 Cluster Software。
2.3 仲裁的管理
2.4 仲裁的機制:這里有個概念叫做【多數】,英文名叫做 Majority. 他有兩個特點,一是自動被決定,二是動態的。
自動被決定,是指在一開始確定 cluster nodes 數量的時候就被指定了,就是比一半的 nodes 數量多一。假如有 5 個服務器,當有 3 臺當機的時候,這個 Cluster 就不能繼續跑了。而只有兩臺服務器宕機的時候,這個 Cluster 還是可以跑的。所以服務器數量最好是基數,這樣比較好判斷。
動態,基于第一個特點,隨著服務器數量的增多,仲裁數目也就相應增加了。
3 兩種 clustering 方式
3.1 Failover Clustering : 主要提供高可用 High Availability 。
硬件要求:必須由微軟認證。
軟件要求:服務器(版本,補丁,機器硬件配置等);網絡(統一子網,同域,心跳,IP);存儲(共享存儲)。AD DS( Active Direcory Domain Services) 角色(roles) . 存儲,在生產環境,肯定是要用 SAN 的,以光纖級傳輸。但是開發測試環境,我們用 iSCSI 來創建一個共享存儲就夠了。windows server 2008 自帶。
安裝:從 windows server 2008 起,系統組件 (components) 都從 Add-feature 安裝,這里要裝的系統組件就是 Failover Cluster. 裝完 Failover cluster 之后,會有 Failover Cluster Manager SnapIn 來管理Failover . 底層的服務是 Cluster Service. 軟硬件的驗證也是由 Failover Cluster Manager SnapIn 來完成。可見配置軟硬件在前,設置 Failover Cluster 在后,最后啟動管理 Cluster Node 。
從安裝方法就看得出來,windows server 的管理方式也在改變,與時俱進掌握最新的特性是很有必要的一件事情。時刻關注新動向,寫下新特性的分析,動手做些個實驗,記錄下心得。要有這個意識!
安裝步驟:
3.1.1 驗證必要條件:軟硬件配置
除了軟硬件,還有其他的配置需要提前創建好。
比如,clustered storage, 可以在創建集群的時候制定,也可以在集群創建好之后再創建;所有的服務器必須加入同一個域下面;創建域用戶并賦予這些用戶管理員級別權限,以便他們在服務器上創建集群。
3.1.2 在每臺服務器上,添加 Failover Cluster feature.
3.1.3 通過 failover cluster manager snapin 的 Validation 去驗證各類配置
3.1.4 通過 failover cluster manager snapin 來配置和啟動 cluster
這里有個概念:Access Point for Administrating the cluster. 這個 AP 需要給他配置一個 NetBIOS Name 和 一個專用的 IP.
3.1.5 創建 AD DS Clustered Roles。
很有必要,通過 powershell 來自動化掉一部分重復操作!
3.2 Network Load Balance : 主要提供高擴展性 Scalability ,負載均衡。仔細想來,那么多 cluster 還不是為了高可用,至于水平擴展,瓶頸還是在寫,多幾臺機有啥用?還是各種鎖。把讀通過 replication 剝離出來,搞那么 7,8 個從庫,并發妥妥的。但是寫就慘了,ACID 得讓你按規矩來,該排隊還是要排隊。
3.3 各自的搭建方法
4. AlwaysOn availability Group
單點故障最有可能是發生在存儲這一級。因為存儲沒有做多點冗余???SAN 只能支持本地高可用,極端的例子就是本地機房地震了,就歇菜了。
針對這個問題,AlwaysOn 提出了availability group. 做到數據庫級別的冗余,異地數據同步之后,高可用就提高了一些。
當然 availability group 與 Failover cluster 能結合起來用。
歡迎關注個人微信公眾號
總結
以上是生活随笔為你收集整理的搭建 Sql Server 2008 R2 Failover Cluster的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python numpy的var std
- 下一篇: 数据库计算机报告,外文数据库计算机检索报