柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: 服务器与存储
2012-11-13 18:27:42
结合openfiler网络存储构建SQL Server故障转移集群
—2010-12-28
引言:
许多企业采用了SQL Server提供业务系统后台数据服务,随着企业运作对这些业务系统的依赖,如何提高这些系统的高可靠性、高可用性已越来越引起企业的关注。
为满足企业系统高可用性容错业务需求,微软强力推荐用户采用Windows Server 2003企业版、SQL Server 2000企业版来构建其业务应用与协作办公平台。由于Windows Server 2003、SQL Server 2000中内置Cluster群集功能,外加一共享磁盘柜或SAN,2台服务器就能实现群集配置,SQL Server 2000(节点服务器1)互为热备地对外提供服务,即充分利用了服务器硬件资源,又大大提高了整个业务应用与协作办公系统的高可用性,其结构如下:
需求:
1.系统请求环境
硬件要求
· 群集里的每台计算机有两块PCI网络适配器。
· 对于所有节点的所有硬件,每个插槽,每个卡,都应该尽可能是一样的。这将简化配置,消除潜在的兼容性问题。
网络要求
· 唯一的NetBIOS群集名。
· 对于服务器集群,要求有五个独立的、静态的IP地址:两个用于内部网(private)的网络适配器,两个用于外接公众网(public)的网络适配器,一个用于群集本身。
· 一个群集服务的域名用户帐号(所有节点必须是同一个域的成员)。
· 每个节点应该有两个网络适配器,一个用于外接公众网(public),另一个用于点对点的群集内部网(private)。
共享磁盘要求
· 所有的共享磁盘,包括定额磁盘,都必须跟共享总线保持物理连接。
· 将所有的共享磁盘都设置为基本(不是动态的)。
· 将所有的磁盘分区都格式化为NTFS。
· 建议对所有的磁盘,都使用容错的RAID配置(这不是强制要求)。这里的关键是容错RAID配置-不能是无奇偶校验的阵列集。
构建步骤:
一、 构建openfiler网络存储服务器(NAS/SAN)
Openfiler 由驱动,它是一个基于浏览器的免费存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。
Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我仅使用它的 iSCSI 功能为SQL Server故障转移集群需要的共享存储组件实现低成本的 SAN。
Openfiler 服务器将配置为使用该磁盘进行基于 iSCSI 的存储,并且将在 SQL Server故障转移集群配置中用于存储SQL Server集群件所需的共享文件。
安装 Openfiler
本部分概述了用于安装 Openfiler 软件的各个屏幕。在本文中,我选择了使用所有默认选项安装 Openfiler。所需的唯一手动更改是为了配置本地网络设置。
安装完成之后,服务器将重新引导以确保启动并识别所需的所有组件、服务和驱动程序。重新引导之后,Openfiler 服务器应该将外置硬盘驱动器识别为设备/dev/sda。
在下载并将 Openfiler ISO 镜像(ISO 文件)刻录到 CD 之后,将该 CD 插入网络存储服务器(在本例中是openfiler1),启动,并按照以下说明来回应安装屏幕的提示。
引导屏幕:
第一个屏幕是 Openfiler 引导屏幕。在 boot: 提示符处输入“linux text”启动安装过程。
介质测试:
当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。
Openfiler NAS/SAN Appliance 欢迎屏幕:
在欢迎屏幕上,单击 [Next] 继续。
键盘配置:
下一个屏幕将提示您进行键盘设置。为您的配置作出合适的选择。
磁盘分区设置:
下 一个屏幕将询问使用“Automatic Partitioning”还是“Manual Partitioning with Disk Druid”执行磁盘分区。这里,您选择哪种方法都可以,官方 Openfiler 文档建议使用手动分区。由于用于此安装的内置硬盘驱动器很小,并且该驱动器将仅用于存储 Openfiler 软件,因此可以选择使用“Automatic Partitioning”。但由于这次配置仅做测试,网络存储空间和openfiler的磁盘空间处于同一块硬盘上,因此采用手动配置,并留下30G的空闲磁盘空间(free space)。
网络配置:
首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。
第二步,按照以下方法对 eth0 和 eth1 进行 [Edit] 操作。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没问题。但是,您必须将 eth1(存储网络)配置为与 Server 1和 Server 2 上的 eth1 位于同一子网中:
eth0:
— 取消选中 [Configure using DHCP] 复选项
— 选中 [Activate on boot]
— IP 地址:192.168.1.213
— 网络掩码: 255.255.255.0
eth1:
— 取消选中 [Configure using DHCP] 复选项
— 选中 [Activate on boot]
— IP 地址:192.168.200.3
— 网络掩码: 255.255.255.0
接着,手动设置您的主机名。我使用的主机名是“openfiler1”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
设置根口令:
选择一个根口令,然后单击 [Next] 继续。
完成:
大功告成。您已经成功地在网络存储服务器上安装了 Openfiler。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Reboot] 重新引导系统。
配置网络存储服务:
可以使用Openfiler Storage Control Center(一个基于浏览器的工具,通过端口 446 上的 https 连接实现)执行 Openfiler 管理。例如:
从 Openfiler Storage Control Center 主页,以管理员身份登录。Openfiler 的默认管理员登录凭证为:
用户名:openfiler
密码:password
管理员看到的第一个页面是 [Accounts] / [Authentication] 屏幕。配置用户帐户和组对本文不是十分重要,因此对此不进行讨论。
要将 Openfiler 用作 iSCSI 存储服务器,我们需要执行三个主要任务:设置 iSCSI 服务、配置网络访问以及创建物理存储。
配置iSCSI服务:
要控制服务,我们使用 Openfiler Storage Control Center 并导航到 [Services] / [Enable/Disable]:
要启用 iSCSI 服务,单击“iSCSI target”服务名称下面的“Enable”。之后,“iSCSI target”状态应更改为“Enabled”。
ietd 程序将实现 iSCSI Enterprise Target 软件的用户级部分,以便在 Linux 上构建 iSCSI 存储系统。启用 iSCSI 目标之后,我们应该能够通过 SSH 进入 Openfiler 服务器,并看到 iscsi-target 服务正在运行:
[root@openfiler1 ~]#service iscsi-target statusietd (pid 3784) is running...
网络访问限制:
下一步是配置 Openfiler 中的网络访问,使两个 SQL Server 节点都有权通过存储(专用)网络访问我们的 iSCSI 卷。(我们将在下一部分中创建 iSCSI 卷!)
导航到 [System] 来完成。利用 System 屏幕,管理员可以设置允许其访问 Openfiler 设备导出的资源的网络和/或主机。就本文而言,我们希望单独添加两个 Oracle RAC 节点,而不是允许整个 192.168.1.0 网络访问 Openfiler 资源。
输入每个节点时,请注意“Name”域只是一个逻辑名称,仅供参考。根据输入节点的惯例。接下来,在“Network/Host”字段中输入实际节点时,始终使用其 IP 地址,即使其主机名已经在/etc/hosts文件或 DNS 中定义。最后,在我们的 Class C 网络中输入实际主机时,应使用子网掩码 255.255.255.255。
记住,您要为集群中的每个节点输入网络 (eth0) 的 IP 地址,这一点很重要。
物理存储:
在本部分中,我们将创建两个 iSCSI 卷,一个作为windows 2003 群集的仲裁盘,另一个作为SQL Server 2000的共享存储单元。
存 储设备(如内置 IDE/SATA/SCSI 磁盘、外置 USB 或 FireWire 驱动器或者任何其他存储设备)可以连接到 Openfiler 服务器,并供客户端使用。如果在 OS 级发现这些设备,就可以使用 Openfiler Storage Control Center 设置和管理所有这些存储设备。
在本例中,我们将一个硬盘上30G的空闲空间用于存储。要看到该驱动器并启动 iSCSI 卷的创建过程,导航到 [Volumes] / [Block Devices]:
对物理磁盘进行分区:
我们将执行的第一步是在/dev/sda上的空闲空间创建一个主分区。通过单击/dev/sda链 接,我们可以看到“Edit”或“Create”分区的选项。大多数选项保留为默认设置,唯一的修改是将“Partition Type”由“Extended partition”更改为“Physical volume”。
现在,大小将显示 31.41 GB。要接受该设置,单击 Create 按钮。这将在我们的外置硬盘驱动器上生成一个新的分区 (/dev/hdc4):
卷分组管理:
下一步是创建卷分组。我们将创建一个名为rac1的卷分组,其中包含新创建的主分区。
导航到 [Volumes] / [Volume Groups]。我们将看到所有现有的卷分组,或者什么也看不到。在 Volume Group 页面,输入新卷分组的名称 (mssql),单击/dev/hdc4前面的复选框以选择该分区,最后单击“Add volume group”按钮。之后,我们会看到一个列表,其中将显示我们新创建的名为“mssql”的卷分组:
逻辑卷:
现在,我们可以在新创建的卷分组 (mssql) 中创建两个逻辑卷。
导航到 [Volumes] / [Add Volume]。我们将看到新创建的卷分组 (mssql) 及其块存储统计信息。该屏幕底部还提供了用于在选定的卷分组中创建新卷的选项。使用该屏幕创建以下两个逻辑 (iSCSI) 卷。在创建每个逻辑卷之后,应用程序将转至“List of Existing Volumes”屏幕。然后,您需要单击后退到“Create New Volume”选项卡以创建下一个逻辑卷,直至所有 iSCSI 卷全部创建完毕:
iSCSI / 逻辑卷 | |||
卷名 |
卷描述 |
所需空间 (MB) |
文件系统类型 |
cluster |
windows群集仲裁盘 |
1024 |
iSCSI |
mssql |
网络共享存储 |
31136 |
iSCSI |
现在可以将它们呈现给网络上的 iSCSI 客户端。“List of Existing Volumes”屏幕如下:
授予节点新的逻辑卷的访问权限:
需要先授予 iSCSI 客户端相应的权限,它才能访问新创建的 iSCSI 卷。在前面,我们将 Openfiler 配置为具有两个主机,这两个主机可以配置为具有访问资源的权限。现在,我们需要授予这两个节点访问每个新创建的 iSCSI 卷的权限。
导航到 [Volumes] / [iSCSI target]。点击 Add new iSCSI Target 中的 Add ,生成一个新的 iSCSI Target ,如果需要几台服务器能同时访问 iSCSI 卷,则需要生成多个 iSCSI Target。
点击 LUN Mapping ,把每一个分区设置为 Map 状态。
点击 Network ACL ,根据需要赋予不同的节点权限,建议每个Target只对一个节点设为 Allow。设置好后,点击 update 。
使 iSCSI 目标可供客户端使用:
每次添加新的逻辑卷之后,我们都需要在 Openfiler 服务器上重新启动相关服务。在本例中,我们创建了 iSCSI 逻辑卷,因此需要重新启动 iSCSI 目标 (iscsi-target) 服务。这将使新的 iSCSI 目标可供网络上有权访问它们的所有客户端使用。
要重新启动 iSCSI 目标服务,导航到 [Services] / [Enable/Disable]。iSCSI 目标服务应该已经启用(几部分以前)。如果是这样,应禁用该服务,然后再启用它。
通过 Openfiler 服务器上的 SSH 会话也可以完成该任务:
[root@openfiler1 ~]#service iscsi-target restartStopping iSCSI target service:[OK] Starting iSCSI target service:[OK]
注意点:
第一,在General中的Local Networks中设置可以访问Openfiler的客户端ip地址,使用其他功能时,Netmask按实际的网段设置,但使用iSCSI时,此部分必须设为:255.255.255.255,否则在使用iSCSI Initiator时,不能正常访问,这个地方可能是Openfiler的一个bug,或许是系统某个地方的限制。
第二,在Volumes中创建一个iSCSI类型的卷后,默认是禁止访问的,必须在edit里面iSCSI host access configuration for volume“卷名”部分把你要访问的ip设为allow才行(就是设的那个四个255掩码的ip)。
第三,然后就是使用iSCSI Initiator了,这里说的必须设置可能是虚拟机的原因,因为我的Openfiler一直都是在虚拟机下运行的。以下使用2.04版的iSCSI Initiator,另外在1.06版上也类似。在Discovery中添加,ip地址添Openfiler的地址,然后在Advanced中,Local adapter和Source ip不能使用Default,否则iSCSI功能是不能正常使用的,Local adapter选择Microslft iSCSI Initiator,Source ip选择那个设置位四个255的ip,然后在Targets里面就会看到设置好的逻辑卷了,登录,在Windows下面就可以看到新的磁盘了。
Microsoft iSCSI Initiator
iSCSI 客户端可以是提供 iSCSI 支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等),可以下载Microsoft iSCSI InitiatoR来事先验证openfiler的功能!!
二、 配置windows server 2003群集服务
配置网络连接
每个群集节点都至少需要两个网络适配器-一个连接公众网,一个连接内部网。为明确起见,我们建议改变网络连接的名称,助于区分网络,并正确地指定其角色。
注:哪个网络适配器是内部的,哪个是外部的,取决于布线。在本文中,第一个网络适配器(局连接)是连接到公众网上的,命名为 public ;第二个连接(局域连接2)是连接到内部网上的,命名为 private 。
本例子中,ip设置如下:
MSSQL-01:192.168.1.116(public) 192.168.200.1(private)
MSSQL-02:192.168.1.150(public) 192.168.200.2(private)
其中,public的网关为192.168.1.250,DNS为空。private的网关和DN均为空。
在专用连接中禁用WINS和DNS注册。检测专用网卡(private)中WINS的地址为空。选中private单击右键,并选择属性,选择Internet协议(Tcp/Ip)的属性。选择高级,选择WINS选项卡。如果已经定义一个WINS地址。则将它删除。并选择禁用TCP/IP上的NETBIOS服务,选择DNS选项卡,取消选择“在DNS中注册此连接的地址”。
挂载网络存储设备
安装 Microsoft iSCSI Initiator ,一般情况下,一路默认即可。
配置 Microsoft iSCSI Initiator 。运行 Microsoft iSCSI Initiator ,在配置界面,选择 Discovery 标签,点击 Add ,添加iSCSI服务器的ip。
选择 Targets 标签,选择其中一个有连接权限的目标,点击 Log On ,该目标的状态从 Inactive 变成 Connected 。
一次点击“开始”—>“程序”—>“管理工具”—>“计算机管理”—>“磁盘管理”,即可发现新增的网络磁盘。此时,这些磁盘的状态应该是掉线的。右键点击新增磁盘,点击“导入外部磁盘”。确保磁盘为基本磁盘,而且是活动的。把新增磁盘格式化为NTFS格式。
安装Active Directory
首先,把服务器MSSQL-01作为域控制器,新建一个名为MSSQL的域。
因为Active Directory安装时需要同时安装DNS服务,所以需要把Windows 2003 安装盘放进光驱。
“开始”—>“运行”—>输入dcpromo,进入Active Directory安装向导。
选择域控制器类型。选择“新域的域控制器”。
填写新域的名字,如MSSQL.com。
指定数据库和日志文件的位置。如果C盘空间足够的话,默认路径即可。
指定共享的系统卷的位置,默认。
DNS诊断。选择第二项,自动安装DNS服务。
当要求输入 目录服务器还原模式的管理员密码 时,输入域管理员的密码(可以使用本机的管理员密码)。
最后,屏幕会跳出一个摘要界面,确认信息无误后,单击下一步完成。安装完成后,需要。重新启动服务器。
成功新建MSSQL域后,需要把服务器MSSQL-02作为域控制器添加到域中。同样的,在MSSQL-02中运行Active Directory安装向导,不同的是,在选择控制器类型时,选择“现有域的额外域控制器”一项。
填写网络凭据。正确输入域管理员的账号、密码,填写域名称。
接下来的步骤和以上新建域的步骤一样,全部默认即可。
新建Windows群集
“开始”—>“程序”—>“管理工具”—>“群集管理器”—>“文件”—>“新建”—>“群集”,进入新建服务器群集向导。
填写正确的域名称,默认就是服务器当前加入的域。输入合适的群集名。
输入新群集中的第一个节点的计算机名。输入当前服务器的计算机名。
检测相关配置。
检测完成后选下一步,会提示输入IP地址,这个地址是集群服务所用的集群IP,集群IP只用于管理,而不用于客户端的连接。
输入账号、密码。
选择仲裁盘。点击“仲裁”,出现仲裁盘选择菜单。选择网络存储设备中的z盘作为仲裁盘。不推荐选择本地仲裁,可能会出现切换问题。
再一次检测配置,完成后及成功新建Windows群集。
第一台机器配置完成后,对于第二台机器的配置,同样是打开集群服务,只是要选择 添加节点到集群 的选项,然后选择相应的集群名称,填入新节点的名字就可以根据向导完成配置。
配置MSCS资源
打开群集管理器,选择“文件”—>“新建”—>“资源”,进入添加资源向导。名称、描述可以随便起,最好有一定意义,如“DTC”。资源类型选择“分布式事物协调器(DTC)”。组选择“群机组”。
可能的所有者。默认即可。
选择依存关系。选择仲裁盘和群集名。
点击“完成”后,新建资源能在群机组的资源里看到。右键点击该资源,选择“联机”,使其联机激活。
配置SQL Server储存资源
打开群集管理器,点击“文件”—>“新建”—>“组”。输入组名“group0”,可能的所有者选择所有节点,点击完成,则新建了一个名为“group0”的组。右键点击“group0”,点击“联机”,使group0组联机激活。
点击“文件”—>“新建”—>“资源”,进入添加资源向导。和建立DTC资源一样,名称、描述可以随便起,有意义即可。不同的是,资源类型选择为“物理磁盘”,组选择“group0”。
可能的所有者,默认。依存关系,默认。
选择磁盘。选择作为SQL Server存储的磁盘,本例中是Y盘。
点击“完成”,完成磁盘资源的建立。联机激活该资源。
到此,Windows 2003的群集服务配置完毕,下面进入SQL Server 2000故障转移集群的构建。
三、 构建SQL Server 2000故障转移集群
进入群集管理器,点击“资源”,查看当前windows群集的控制权属于哪一个节点,登录该节点进行SQL Server 2000故障转移集群的构建。也可以登录到本域的公共ip进行操作。
下载SQL Server 2000 Enterprise sp4安装包到本地,运行安装程序。选择“安装SQL Server 2000 组件”—>“安装数据库服务器”。
输入计算机名。输入需要安装SQL Server的计算机名。选择“虚拟服务器”,并输入虚拟服务器名,如“KENFOR-MSSQL”。
输入用户信息,随便。
软件许可证协议。
填写虚拟服务器ip信息。“要使用的网络”选择“public”,ip地址选择与节点同网段的,如192.168.1.233。注意,该ip是作为外部访问SQL Server所设置的统一ip,和域的ip要区分开来。填写好后点击“添加”。
群集磁盘选择。选择SQL Server文件存储磁盘,选择Y盘。
群集管理。在指定的节点服务器上安装SQL Server。全选。
远程信息。输入域管理员的账号、密码。
安装文件路径选项。默认即可。需要注意的是,由于选择了网络磁盘Y盘作为群集磁盘,所以数据文件的安装路径自动设置为Y盘下的路径。
设置服务账户。
选择身份验证模式。选择混合模式并设置sa密码。
选择许可证模式。选择“处理器许可证”模式。
配置完毕,开始安装。
安装完成后,可以在群集管理器的gourp0组中看见新添加了SQL Server的四个资源。
成功安装SQL Server后,升级到SP4。
测试结果:
1、当两台服务器都正常的时候,SQL Server能正常访问,控制权位于MSSQL-01。
2、把MSSQL-01节点断开,从群集管理器上能看到MSSQL-01节点被断开,经过一点时间(约30秒到1分钟),资源转移到MSSQL-02上,SQL Server服务正常使用。
3、再次连接MSSQL-01节点,资源的所有者没有变化,还是MSSQL-02,SQL Server服务正常运行。
4、把MSSQL-02节点断开,资源转移到MSSQL-01上,SQL Server服务正常运行。
问题与总结
1、故障转移速度比较慢。当群集资源所有权需要转移的时候,转移速度比较慢,常常是需要1分多钟,这在生产环境中是十分不理想的。这问题应该是测试机器性能低下的原因导致的。
2、从新建域开始到SQL Server故障转移集群构建完毕,务必保持以下服务一直保持启动状态,否则可能导致一系列安装问题:
Distributed File System
Remote Access Auto Connection Manager
Remote Access Connection Manager
Remote Procedure Call (RPC)
Remote Procedure Call (RPC) Locator
Server
Workstation