运行着世界上最大的 System Center Configuration Manager 2007 安装之一,Microsoft 运营团队较之您本无特别之处。
然而,我们正亲眼见证我们数据中心的不断发展变化,尤其是在引入虚拟化之后。Configuration Manager 2007 利用 Microsoft 虚拟化平台,采用动态配置扩展其基于客户端的服务,从而提高了灵活性。Microsoft 管理着超过 30 万个客户端,这迫使我们对规模扩展以外的事情进行些许思考,探寻提高自动化水平和效率之法。我们于此中所获经验教训或可使您也受益匪浅。
VMM:构建核心
欲成功构建能够快速并大规模扩展的 Configuration Manager 基础结构,第一步就是要突破“基于服务器”的模型,转变为“基于服务”的模型。在服务领域,您的扩展单元为硬件对象,如 CPU、内存、磁盘和网络。这些资源所处的物理服务器将不再那么重要。
服务模型的起点是重新构建虚拟机 (VM) 基础结构。不过,在我们对此做深入讨论之前,先来了解一些基础知识以扫清理解障碍。System Center Virtual Machine Manager 2008(简称 VMM)为您的数据中心提供了一系列可配置选项。VMM 由四个组件组成,所有这些组件都有各种不同的扩展单元:
- Virtual Machine Manager 服务器
- Virtual Machine Manager 库
- Virtual Machine Manager 代理
- Virtual Machine Manager 自助门户
基础知识的介绍主要围绕动态配置的概念展开。(本文介绍了前三项的内容。有关 VMM 自助门户的更多信息,请参见系统要求:VMM 自助服务门户。)
VMM 服务器安装
作为整个系统中枢的 VMM 服务器依赖于 VMM 数据库,该数据库应在 SQL Server 群集上运行。该群集可确保执行所有 VM 主机和来宾任务(如创建和移动 VM 以及做出存储决定)的作业引擎具备高可用性。
VMM 服务器是一个单独的服务器,管理员可以在该服务器上查看其物理主机和虚拟资产。通过利用直接连接存储 (DAS) 和存储区域网络 (SAN) 等数据中心已有的硬件技术,可以将您的环境转变为动态配置的杰作。
首次安装 VMM 需要安装两个组件:VMM 服务器(包括数据库)以及 VMM 库的第一个实例。此步骤中要进行大量的规划工作;您可以在规划高可用性中找到有用资源。
VMM 代理安装
下一步是确保基于 Windows 的虚拟化服务器已经准备就绪并可用于 VMM 基础结构。此处选择的是具有 Hyper-V 角色的 Windows Server 2008 和独立的 Hyper-V Server。VMM 提供了两种设置虚拟主机的方法:基于 Active Directory 的发现和手动安装。
我们将重点讨论基于 Active Directory 的发现,因为这是最常见的方法。此过程非常简单明了;实际决策仅涉及默认 VM 存储位置(例如 D:\VMs)以及是否在 Windows Server 2008 中安装 Hyper-V 角色(如果尚未启用该角色)。
VMM 代理安装在作为本地系统运行的每个基于 Windows 的服务器上;该代理通过 Windows 远程管理 (WinRM) 与主机通信。代理安装过程使 WinRM 可以允许在托管主机与 VMM 服务器之间进行基于 HTTP 的端口通信。
安装一旦完成,VMM 管理员控制台就应列出数据中心中可用的主机。
VMM 库:动态配置的构建基块
核心已准备就绪。现在要做什么?是时候了解一下库了。VMM 库为动态配置提供了基础。库是 VMM 的主要扩展单元。基础结构中可以有多个库服务器,但不能有多个 VMM 服务器。库是部署和配置的构建基块。在安装过程中,第一个 VMM 库放置在 VMM 服务器上;其他库应放置在其他服务器上。在 Microsoft,我们将库安装尽可能靠近它们所服务的主机。例如,您可能有一个主机组,由服务于西雅图数据中心的八个 Hyper-V 服务器组成,而位于波士顿的辅助数据中心只有一个 Hyper-V 主机(参见图 1)。在西雅图,您提供多个库服务器来服务于主机组,而在波士顿只需要一个库服务器。
图 1 对 System Center Virtual Machine Manager 使用多个库。
这些数据中心库存储虚拟硬盘、脚本和映像。使库靠近所服务的主机可节约配置时间。
将合适的库服务器添加到基础结构之后,下一步便是了解如何配置所需的服务。
不要使用克隆
有多种利用虚拟化的配置方法。克隆便是其中一种,使用克隆时会存储整个计算机以供将来使用,其中包括特定于计算机的信息(如计算机名称、IP 地址和特定于配置文件的数据)。
克隆在某些情况下用起来很方便,但这种方法对于动态配置则弊大于利。第一个问题是,克隆要求计算机保留为基础结构的一部分(以 Active Directory、Operations Manager 等方式),即使系统本身并不在线(存储在库中)也是如此。当您在数据中心构建动态服务时,这种情况会导致许多误报(处于离线状态的系统也显示为可用)。
克隆的第二个弊端在于存储需求。由于需要完全存储每个扩展单元(定义为一个服务器就是一个扩展单元),这导致 VM 存储需求过大。例如,一个克隆的 Configuration Manager 2007 分发点 (DP) 包括总大小为 130GB 的三个虚拟硬盘。而这只是单个 DP 的存储需求;在 Microsoft,仅运行一个站点便可能需要六个 DP。因此,这种情况下的克隆过程需要 780GB 的库存储。这会导致存储需求飞速增长。
相比之下,“基本映像”配置方法通常更加可取。这种方法创建操作系统的基本映像,其中除了运行操作系统所需的默认服务以外无任何其他安装。例如,Microsoft 将三个基本映像 Windows Server 2003 R2、Windows Server 2008 和 Windows Server 2008 R2 存储为库中的虚拟硬盘 (VHD)。每个基本映像大小约为 6GB 至 10GB,这比克隆所需的 130GB 要高效得多。
使用配置文件和模板
确定配置方法之后,下一步是创建配置文件。配置文件是 VMM 范围的实体,对硬件或操作系统做出大体定义。硬件配置文件定义诸如 CPU 数量、硬盘数量和类型(如 IDE 或 SCSI)和网络配置等项。来宾操作系统配置文件定义与所配置特定角色有关的基于 Windows 的特征。其中包括诸如计算机名称、产品密钥以及域相关信息等项。
动态配置依据硬件和来宾操作系统配置文件进行。可另建基于客户端的 Configuration Manager 角色,但所有配置文件都遵循相同的原则。有关创建硬件和来宾操作系统配置文件及模板的详细信息,请参见我的博客 Virtual Machine Manager 库:这里没有卡片目录,你是疯狂的图书馆管理员。
完成配置文件以后,您将创建模板。模板详细定义服务器的硬件和操作系统特征(而不是针对每台计算机逐一定义)。配置文件与模板的主要区别在于具体化程度:模板非常精确,配置文件则不然。例如,配置文件中包含要构建的网络适配器类型,但不包含有关该适配器的特定于连接的信息。这类信息存储在模板中。
因此,此分三步进行的过程先创建硬件配置文件,然后创建来宾操作系统配置文件,最后创建特定于站点的模板。若要将此过程应用于西雅图-波士顿示例,应从 Configuration Manager DP 及其在西雅图和波士顿数据中心的独立主机组开始。首先,创建硬件配置文件;其次,设置整个基础结构的操作系统信息;最后,基于这些配置文件构建每个站点的模板。由于西雅图和波士顿的网络不同,因此需要通过模板获得自定义设置。
开始使用 WAIK 进行配置
完成配置文件和模板以后,便可以着手进行操作系统的动态配置了。对于 Microsoft,这意味着要使用 Windows 自动安装工具包 (WAIK),通过该工具包可以自定义基于 Windows 的安装(参见图 2)。在动态配置领域,完整的操作系统安装是不可行的,因为这样做花费的时间太长。
图 2 循序渐进:在操作系统层分解动态配置。
我们使用您可能熟悉的一个进程(名为 sysprep),该进程可清理所有计算机已安装的系统和特定于用户的信息。在典型的使用 sysprep 清理过的服务器上,首次启动时会向用户询问一组问题,用户要对这些问题进行作答;余下的工作由服务器完成。可以通过创建无人参与的安装文件自动回答这些问题。根据不同的操作系统,无人参与的文件存储在库中,作为来宾操作系统配置文件的一部分进行引用。
分解部署的有趣之处在于循序渐进地学习在部署新服务之前必须完成的工作。确定这些步骤之后,可执行通过无人参与文件完成这些工作的策略。
生成无人参与部署文件
在 Microsoft,我们要在无人参与文件中执行的一些关键配置如下:
- 添加本地管理员
- 启用远程桌面
- 禁用管理员的 IE 强化
- 设置显示分辨率和组织信息
- 关闭 Server Manager 和初始配置任务
这些是典型的数据中心要执行的必要配置。要执行的配置远不止这些;您可以查看位于无人参与 Windows 安装参考上的 WAIK 参考指南,以了解如何配置其他选项。
图 3 演示了一个无人参与安装文件,用于动态部署我们的 Configuration Manager 站点角色。此 XML 代码段仅包括上面列出的配置;完整的 XML 文件见我的博客针对 Windows Server 2008 及 R2 的 SCVMM 示例 Unattend.XML。
图 3 Unattend.xml 代码段:
<?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="specialize"> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <fDenyTSConnections>false</fDenyTSConnections> </component> <component name="Microsoft-Windows-IE-ESC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <IEHardenAdmin>false</IEHardenAdmin> </component> </settings> <settings pass="oobeSystem"> <UserAccounts> <DomainAccounts> <DomainAccountList wcm:action="add"> <Domain>Contoso</Domain> <DomainAccount wcm:action="add"> <Name>Chris</Name> <Group>Administrators</Group> </DomainAccount> </DomainAccountList> </DomainAccounts> <AdministratorPassword> <Value>Pa$$w0rd!</Value> <PlainText>true</PlainText> </AdministratorPassword> </UserAccounts> </component> </settings> <settings pass="generalize"> <component name="Microsoft-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> </component> <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> </component> </settings> </unattend>
请将此代码段作为您的无人参与文件保存到库共享中。若要访问该文件,请在 VMM 管理员控制台中右键单击库服务器并选择“刷新”,从而刷新您的库服务器。
在刷新后,可以将 unattend.xml 添加到前面创建的来宾操作系统配置文件。单击“应答文件”以突出显示该选项,然后单击右侧窗格中的“浏览”;找到该 XML 文件并单击“确定”。
10 分钟内将服务器转变为 Configuration Manager 站点角色服务器
我们已经看到如何使用 unattend.xml 从基本映像有效地部署新的 Windows 服务器。虽然配置选项数量众多,但其中没几个比 WAIK 所提供的自动登录功能作用更大。此功能提供了很高的灵活性,也正是它实现了运行时配置的整个概念 — 仅在需要时提供需要的内容。
使用
图 4 GUIRunOnce 使用方案
步骤目标
安装服务器功能您的工作服务器可能需要一些 Windows 功能,如 IIS、群集或其他功能
配置功能若要使某些应用程序正常运行,需要为特定功能修改或添加配置
部署应用程序某些应用程序在安装之前需要安装其他特定应用程序,如 SQL server、.NET Framework
配置应用程序某些应用程序需要进行特定配置,才能完成安装并使服务处于在线状态
这些只是众多可能性中的一小部分;了解这些可能情形有助于做好基础工作,使管理员不必执行任何操作,即可将一个普通的 Windows 服务器转变为 Configuration Manager 2007 站点角色服务器(如分发点)。
若要在已创建的 unattend.xml 中添加自动登录,从而能够在无需用户干预(即用户登录)的情况下激发 GUIRunOnce,请插入图 5 中显示的 XML。
图 5 在 unattend.xml 文件中添加自动登录代码:
<settings> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <AutoLogon> <Password> <Value>Pa$$w0rd!</Value> <PlainText>true</PlainText> </Password> <Username>administrator</Username> <LogonCount>1</LogonCount> <Enabled>true</Enabled> </AutoLogon> </settings>
接下来要设置启用 Configuration Manager 站点系统所需的配置。第一步是确定完全安装特定站点系统所需的操作。例如,假设成功创建 DP 需要以下特定任务;使用 GUIRunOnce 实现此目的需要以下步骤:
安装 IIS
安装 BITS Server 功能
安装 WebDAV
在 IIS 配置中配置 WebDAV
将中心\主站点服务器添加到服务器的本地管理员组
部署分发点站点系统
将所有程序包添加到分发点
这些任务应顺序执行,因为每一步都依赖于上一步的成功完成。图 6 提供了有关如何完成每项任务的简单指导。
图 6 创建 Configuration Manager 分发点:
步骤 | 命令 |
安装 IIS | serverMgrCmd –install IIS –allSubFeatures |
安装 BITS | serverMgrCmd –install BITS |
安装 WebDAV | Msiexec –qna webdav.msi |
配置 WebDAV | Cmd –c \\server\share\scripts\ConfigureDP.bat |
将站点服务器添加到本地管理员组 | Net localgroup –add domain\siteservername$ administrators |
部署站点系统和角色 | Cmd –c \\server\share\scripts\DeployDP.vbs |
部署程序包 | Cmd –c \\server\share\scripts\DeployPackages.vbs |
图 6 注释:ConfigureDP.bat、DeployDP.vbs 和 DeployPackages.vbs 的脚本见我的博客文章使用脚本动态部署 ConfigMgr 站点角色。
测试动态配置的环境
做好基础工作以后,应准备进行调整,因为所有配置第一次就能全部正常工作的情况很少见。但妙在一旦可正常工作,将来就几乎不再需要进行更改。
下一步是观察部署的进展,了解需要花费多少时间。了解直到服务处于在线状态,完整部署需要花费多少时间,这对于确保良好的用户体验十分重要。
在此之后,应使用 Windows PowerShell 脚本或 VMM 管理控制台测试您的部署。最简单的方法是使用管理控制台,然而 Windows PowerShell 脚本才是使动态配置得以实现的功臣。若要测试您的配置,请执行以下操作:
打开 VMM 管理控制台
在“操作”菜单中单击“新建虚拟机”
选择选项以从模板进行创建,并基于硬件和来宾操作系统配置文件选择合适的模板
选择合适的主机
单击以自动启动并保存状态
单击复选框以在创建后自动启动虚拟机
单击“创建”
您的部署应花费大概 5 至 15 分钟,具体取决于基本映像的大小。完成后,通过远程桌面或在管理控制台中访问服务器。通过在控制台中选择 VM,右键单击并选择“连接到虚拟机”,可实现此目的。然后检查以确保完成了预期配置。
从静态到动态
迄今为止所阐述的内容都是静态配置,转变为动态意味着您的基础结构应能够监视您的应用程序并在需要时执行规定的操作。
到目前为止,我们已了解到可以使用 VMM 有效地配置 Configuration Manager 站点系统和角色。最后一步是集成 VMM 与 System Center Operations Manager 2007,以使您的 VM 可以根据需要进行扩展和收缩。
配置 Operations Manager 与 VMM 2008 的集成提供了有关集成 Operations Manager 2007 与 VMM 的指南。通过集成可以监视 Operations Manager 中的警告,从而使用 VMM 的 Windows PowerShell 界面采取操作,如创建向客户端提供服务的服务器。
下面介绍一下我们是如何为 Microsoft 的 Configuration Manager 基础结构实现集成的,这可以为您的环境提供一个蓝图。
第一步是确保 Operations Manager 能够正确标识提供服务的服务器(如分发点),以便进行目标定位。为了简化此过程,我们插入了 GUIRunOnce,这在服务器上添加了特定注册表项和值。这可确保在安装 Operations Manager 代理时,特定类型的角色将加盖水印并可标识。例如,我们通过名为 ContosoDP、DWORD 类型为 0 的值,将一个名为 ContosoDP 的值放入 HKLM\Software\Microsoft\TechNetMag 中。
管理包 XML 代码段位于构建“示例”SCOM 管理包以便基于物理或虚拟机的性能动态构建虚拟机中。该代码段称为“DynamicDP”,在此示例中触发新 DP 的创建。为便于演示,我们将连接和采样设置的值设得较低;这些值可基于您环境中的性能特征加以调整。
我们的 DynamicDP System Center Operations Manager 管理包有一个发现策略,该策略读取为生产中的每个 Configuration Manager DP 创建的注册表项。执行发现之后,我们创建了一条规则,用于监视特定性能计数器,如 IIS Web 服务并发连接数;在达到阈值时会生成警报。该警报会将相关 VM 的状态从“状态良好”更改为“严重”。我们据此执行恢复操作。图 7 中演示了这些步骤。
图 7 动态监视和配置过程。(单击图像可查看大图)
在此之后,我们使用 Operations Manager 创作控制台创建了自己的自定义管理包。该管理包监视 DP 的并发 IIS 连接数;如果达到特定阈值,则服务会发出警报。
测试和验证
若要使用 Microsoft 蓝图测试您环境中的所有配置是否都按预期工作,请增加 Configuration Manager DP 上的连接,从而引发警报。您应看到状态从“状态良好”变为“严重”。可以使用 HTTP 工具(如 TinyGet)执行此测试,该工具向 Web 服务器发送请求,从而生成大量连接。
下面的 TinyGet 脚本会生成许多(60 个)指向一个名为 test.txt 的大型文件 (300KB) 的连接:
C:\>tinyget5 -h -status:200 -SRV:localhost -uri:/test.txt -x:60 -l:5000 -o
验证管理包正常工作之后,可着手构建恢复操作。应从小型恢复操作开始,例如创建文本文件。管理包恢复操作设置要在与 VMM 集成的 Configuration Manager RMS 服务器上执行的更正操作。在 Microsoft,我们在 Configuration Manager 服务器上创建了一个名为“recovery”的目录,该目录的一个 DP 文件夹中包含两个文件:dp_recovery.cmd 和 dp_recovery.ps1。下面是一个 dp_recovery.cmd 示例,它与 Windows PowerShell 脚本集成以创建 VM:
time /t >>c:\temp\dplog.txt C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\Microsoft System Center Virtual Machine Manager 2008 R2\bin\cli.psc1" -command ".\dp_recovery.ps1 -VMMSERVER:localhost -VMNAME:mydynamicVM"
此恢复命令加载 VMM Windows PowerShell 控制台并调用我们的恢复脚本。
最后一步是配置 Configuration Manager,以在发生故障时正确进行操作。此步骤利用了 Configuration Manager 的信道、订阅和通知设置,使我们可以在创建警报时生成正确的操作。在我的博客构建“示例”SCOM 管理包以便基于物理或虚拟机的性能动态构建虚拟机上,提供了有关如何构建正确的信道、订阅和通知设置的说明。
总结
设置物理服务器与虚拟服务器的任务是相似的,但也有重要区别。前期规划和工作中的投入可以为您和您的团队节约大量时间,因为服务器的部署将成为历史,这使您可以集中精力扩展资源以支持您的服务。
在 Microsoft,我们找到了一种方法,可利用本文列出的步骤快速并高效地扩展我们的 Configuration Manager 客户端服务,如管理点、分发点和软件更新点。动态配置是一种强大的方法,使系统可以根据需要进行扩展和收缩。这使您和您的团队可以集中精力微调触发这些操作的性能和运行状态条件,而减少对当前在 IT 部门中常用的被动方法的关注。