搭建 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 里面看到我要添加的域用户了。互联网时代的东西,你想了解的都可以在网上找到,你不是一个人!

更新: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 运行的集群可以提供多少并发量

2.2 运行的集群宕机的记录以及现状

2.3 如何手工去切换集群的活动节点

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 能结合起来用。

时间: 2024-11-04 18:25:36

搭建 Sql Server 2008 R2 Failover Cluster的相关文章

Windows Server 2008 R2 Failover Cluster

建立Windows Server 2008 R2 Failover Cluster,基本环境:故障转移群集使用3台服务器进行多数仲裁 1.DC 2.3台Windows Server 2008 R2 SP1 IP:192.168.13.121-123 (Public) IP:192.168.11.121-123 (Heartbeat) 1.选择群集中的服务器 2.创建群集前,先进行群集验证(因为使用的是多数仲裁,不使用额外的存储资源,所以存储相关部分有警告) 3.完成验证后,正式开始建立故障转移群

学习笔记:windows server 2008 R2服务器搭建SQL Server 2008 R2环境

一.安装前准备 1.下载SQL Server 版本,在传送门左侧菜单服务器模块下选择相应的版本,因为服务器的操作系统版本是windows server 2008 R2,我选择的SQL Server 2008 R2版本. 2.为了使安装的进度加快,防止中途因残留而安装失败,我们先确定操作系统里面是否有SQL server的残余,先在控制面板的程序下面卸载SQL Server,之后为了卸载完全,利用Windows Clear Up将残留一并清除. 3.下载完SQL server 2008 R2后得到

SQL Server 2008 R2高可用解决方案--镜像(证书)

SQL Server高可用方案--镜像搭建(证书) 环境: 角色 IP 操作系统 数据库版本 数据库 主 192.168.10.8 Windows Server  2008 R2 SQL Server 2008 R2 fdb 备 192.168.10.9 Windows Server  2008 R2 SQL Server 2008 R2 fdb 一.环境检查 1.网络是否互通 2.防火墙端口是否开放(需要开放1433.5022端口) 3.数据库软件版本是否有差异(软件版本为SQL Server

SQL Server 2008 R2没有卸载干净

在卸载Microsoft SQL Server 2008 R2 安装程序(简体中文) 出现 :“警告 26003.无法卸载 Microsoft SQL Server 2008 R2 安装程序支持文件,因为安装了以下产品:SQL Server 2008 R2 SP1 Database Engine Shared SQL Server 2008 R2 SP1 Common Files”.但是在程序列表中并未找到该程序,在网上找了找资料,可以使用 WMIC(Windows Management Ins

SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了

一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder,错误信息如下所示: PLATFORM VERSION INFO     Windows             : 6.1.7601.65536 (Win32NT)     Common Language Runtime     : 4.0.30319.18408     System.Deploy

SQL Server 2008 R2 附加数据库 “尝试打开或创建物理文件 拒绝访问”的解决办法

其实是来自一篇SQL Server 2005同样错误的帖子,不过试了在SQL Server 2008 R2下面也有效,记录一下. 解决方法: 在所有程序—Microsoft SQL Server 2008 R2—配置工具—SQL Server 配置管理器,点击"SQL Server 服务",右边会显示正在运行的服务,以及对应的用户,右击SQL Server (MSSQLSERVER),选择“属性”,把内置帐户选择为"Local System",点击重新启动就OK了.

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆 解决方法如下 通过windows 身份验证登陆后, 首先选中服务器(右键)->属性 ->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"其次展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用, 并在常规选项中修改密码 确认后重启 sel server sql se

Sql Server 2008 R2 数据库脚本导出方法

经常忘记怎么搞,截几张图记录一下. 1 选中要导出的数据库,右键->任务->生成脚本 2 3 4 查看保存的脚本 Sql Server 2008 R2 数据库脚本导出方法,布布扣,bubuko.com

利用SQL Server 2008 R2创建自动备份计划

本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动?Sql Management studio,确保"SQL Server 代理"处于启动状态.如果没有,可以右击选择"启动". 第二步,依次展开"管理"---"维护计划",并右击"维护计划"选择"新建维护计划",这里你可以填写一个合适的有意义的名字. 点击&quo