最近在给一个客户部署基于微软TFS的软件生命周期管理平台时,客户要求数据库层实现高可用性,减少因数据库服务器故障影响软件开发进展。
客户现有域是一台搭建在Windows Server 2008上的级别为Windows 2008的企业域。为了符合客户企业域的安全规定,需要在部署数据库高可用性期间使用最低权限,即只赋予操作账户(tfsadmin)在AD目录中用于ALM的组织单元的完全权限。在综合考虑和调用的基础上,我们提出了以下方案,并附上了操作说明。
方案:
1. 在AD域中为ALM创建用于保存计算机和用户的组织单位,并为tfsadmin用户指派这个组织单位的完全控制权限,如下图。
图一:AD域中用于ALM的组织单元
图二:tfsadmin用户对改组织单元具备完全控制的权限
2. 提前在AD域中为客户端和服务器在AD域的ALM组织单元中创建计算机对象。如图一中所示,ALM中的所有客户端和服务器计算机对象,都保存在制定的OU中。
操作指南:
操作指南中的关键点:
1. 使用操作账户domain\tfsamdin创建好故障转移群集(FC01)后,需要将计算机账户FC01$设置为数据库集群计算机所在OU的“创建/删除计算机对象”的权限
在创建数据库AlwaysOn的侦听器过程中,需要在OU中创建一个虚拟的计算机账户,创建过程使用的操作账户实际上是故障转移的计算机账户(FC01$),如果此账户对群集计算机对象所在的OU没有创建计算机的权限,则会出现创建侦听器失败的错误。
(可以通过查看AD控制器上的Event ID为4741的安全日志,得知故障转移计算机账户创建了侦听器计算机账户,如下表)
已创建计算机帐户。 主题: 安全 ID: TEST\fc01$ 帐户名: fc01$ 帐户域: TEST 登录 ID: 0x13b9ca 新计算机帐户: 安全 ID: TEST\agroup03$ 帐户名: agroup03$ 帐户域: TEST 属性: SAM 帐户名: agroup03$ 显示名: - 用户主体名称: - 主目录: - 主驱动器: - 脚本路径: - 配置文件路径: - 用户工作站: - 上次设置的密码: <从不> 帐户过期: <从不> 主要组 ID: 515 允许委派给: - 旧 UAC 值: 0x0 新 UAC 值: 0x80 用户帐户控制: ‘工作站信任帐户‘ - 已启用 用户参数: - SID 历史: - 登录时间(以小时计): <未设置值> DNS 主机名: - 服务主体名称: - 附加信息: 特权 - |
2. 下面的所有操作都使用domain\tfsadmin账户
3. 数据引擎的服务账户必须使用域账户(例如domain\sqlservice)
具体操作:
1. 在AD域中创建组织单元结构(图一),并配置domain\tfsadmin对ALM节点具备完全控制权限(图二)
2. 将数据库服务器的所有节点加入到域环境,将domain\tfsadmin账户加入到数据库服务器的本地管理员组中,并设置为数据服务器的管理员角色
( 如果需要将客户端计算机加入到指定OU中,可以使用命令行NETDOM JOIN %computername% /Domain:”OU=ALMCompuers, OU=ALM, DC=test, DC=local” )
3. 在节点一服务器上创建故障转移群集,并使用文件夹共享的方式配置仲裁
图三 - 创建好的故障转移群集
4. 在所有数据库服务器上启用AlwaysOn
图四 – 启用AlwaysOn
5. 在数据库的主节点上创建测试数据库(testdb),并对此数据库做完整备份,同时共享备份目录
6. 创建数据库服务器的高可用性组,在创建高可用性组的过程中,创建侦听器。
图五 – SQL Server AlwaysOn的侦听器
图六 - 与侦听器对应的虚拟机对象
图七 - 创建高可用性过程中自动注册的DNS记录