系统管理的快速通道 – System Center 2012 Configuration Manager SP1 中的客户端通知
概述
过去,System Center Configuration Manager 产品系列一直使用基于“拉”(pull) 的客户端通信机制。因此,在大型企业环境中,当管理员启动任务时,每个客户端可能需要几分钟甚至几小时来接收和运行该任务,并将结果报回到服务器。对于常见场景,这并没有什么不妥,但对于那些任务关键型的时间敏感任务(例如,反恶意软件操作),就会出现问题。在数据中心环境中,服务器仅为管理任务保留了非常有限的时间,这种延迟也表现得更为明显。更加快速地推送 IT 管理任务会有多大作用?Configuration Manager 2012 SP1 通过在服务器和托管客户端之间提供快速“客户端通知”通道,提供了这种功能。
什么是“客户端通知”?
客户端通知是应广大用户需求,在 Configuration Manager 2012 SP1 中引入的一个令人兴奋的全新基础结构组件,它能够提供快速通道,让 Configuration Manager 管理员使用该通道来通知客户端尽快启动时间敏感任务。该通信通道是基于“推送”(push) 的,而不依赖于客户端策略轮询间隔。使用客户端通知,客户端能够建立与管理点的持续连接。随后,服务器可通过该通道,通知客户端执行时间敏感任务或紧急任务,客户端可在收到消息后迅速执行操作。在 SP1 中,所有 System Center Endpoint Protection 操作和“下载计算机策略”客户端操作都是使用该通道实施的。
“客户端通知”的工作方式
客户端通知是一个端对端基础结构,包括站点服务器上的通知管理器、管理点上的通知服务器和客户端上的通知代理。
1) 通知管理器
通知管理器是站点服务器的一个组件。它的功能是为启用客户端通知的操作生成推送消息,更新客户端在线状态,并且更新站点数据库中的客户端通知推送结果。
2) 通知服务器
通知服务器是管理点上的服务器组件。它自动部署和安装在管理点上,包括在辅助站点上。通知服务器执行以下功能:
- 同时托管 TCP 和 HTTP 侦听器,以支持通过两种协议进行客户端通信。
- 侦听站点数据库中的通知服务代理队列,在生成推送消息时进行即时检测。
- 通过通道将消息推送至在线客户端,并且定期生成文件,其中包含将要存储在站点数据库中的结果。这些结果可从 Configuration Manager 控制台的 Client Operations 节点进行监控。
- 维护在线客户端列表,定期将在线信息生成为文件,并将该文件发送至站点服务器。
3) 通知代理
通知代理是在 CCMEXEC.exe 中托管的客户端组件。作为客户端初始化的一部分,它将建立与通知服务器的持续连接。对于通过辅助站点通信的客户端,它们将与代理管理点上的通知服务器建立连接。它将首先尝试 TCP 模式,如果失败(由于防火墙或互联网代理不允许 TCP 流量),将回退到 HTTP 模式。如果连接被丢弃(例如由于网络问题),通知代理将尝试重新连接。
客户端通知同时支持 TCP 和 HTTP 通信协议。TCP 是使用的主要模式,它需要在防火墙上打开一个额外端口,HTTP 是回退选项,不需要事先进行任何配置。相应工作流几乎完全相同。我们以 TCP 模式为例。
1) 客户端通知基础结构在默认情况下是端对端启用的。在客户端初始化期间,通知代理将首先尝试与当前管理点上的通知服务器建立持续的 TCP 连接。一旦成功,通知代理将每 15 分钟定时发送保持活动状态消息,以便保持连接。如果客户端无法建立 TCP 连接,通知代理将会尝试 HTTP 协议。
2) 在通过 TLS(传输层安全性)身份验证之后,管理点计算机上的通知服务器将接受客户端的连接请求。因此,通知服务器将会管理所有活动连接,并且每 5 分钟生成在线状态数据,并将数据放置在 <站点服务器安装目录>\inboxes\bgb.box\ 下。
3) 通知管理器将从 bgb.box 读取在线文件 (*.BOS),并更新站点数据库中的在线状态信息。
4) 当管理员从 Configuration Manager 控制台启动受支持的客户端操作时,该操作将会转换为客户端通知消息,并放置到数据库服务代理队列中。
5) 通知服务器将检测消息请求,并从服务代理队列获取消息,然后通过永久通道将消息推送至在线客户端。
6) 通过通道接收消息之后,通知代理将根据消息内容执行相应操作:通知 Endpoint Protection 客户端执行操作(例如快速扫描),或者通知客户端尽快请求计算机策略。通知结果将发送回通知服务器。
7) 通知服务器定期汇总任务推送结果,并将结果导出到文件,放置在 <站点服务器安装目录>\inboxes\bgb.box\ 下。
8) 通知管理器处理任务推送结果文件 (*.BTS) 并更新站点数据库。
注意:本文的目的只是试图为感兴趣的管理员提供有关客户端通知通道工作方式的更多信息,其中包含的很多实施细节(例如超时时间)可能在将来版本的 System Center Configuration Manager 中有所变化。
“客户端通知”的使用方法
配置客户端通知端口。
默认情况下,客户端通知通信使用 TCP 端口 10123。在 Configuration Manager 控制台中,单击 [Administration](管理),展开 [Site Configuration](站点配置),单击 [Sites](站点),打开 [Properties](属性)对话框,可在该对话框的 [Ports](端口)选项卡配置 TCP 端口值。您可能需要配置管理点和客户端上的防火墙,以及任何中间防火墙,从而允许通过这个新端口进行通信。但是,客户端通知可以回退为使用 HTTP 和 HTTPS。
通知 Endpoint Protection 代理尽快执行操作。
在 Endpoint Protection 操作中,完全扫描和快速扫描都是一次性操作,因而只依赖客户端通知通道。其他操作既可以通过客户端通知通道,也可以通过传统的正常策略通道。从客户端通知的角度来看,任务的有效期为一小时。例如,如果客户端在任务触发后处于离线状态,则初始推送将会失败。如果客户端在任务推送一小时之内上线,则通知服务器会重新将任务推送至客户端。如果客户端在一小时之后才上线,则不会再推送任务,因为它已经过期。通知客户端立即下载计算机策略。
下载计算机策略是在 Configuration Manager SP1 中新增的客户端操作。它可以通知选定客户端或集合尽快下载计算机策略,而不受配置的客户端策略轮询间隔的限制。在 Configuration Manager 控制台中,单击 [Assets and Compliance](资产和合规性),在 [Assets and Compliance](资产和合规性)工作区中,单击 [Collections](设备集合)组,选择包含您要下载的计算机的设备集合,在 [Home](主页)选项卡上的 [Collections](设备集合)组中,单击 [Client Notification](客户端通知),然后单击 [Download Computer Policy](下载计算机策略)。当您对集合执行这项客户端操作时,属于此集合的层次结构内的所有在线客户端都将得到通知。您还可以特意通知多台计算机尽快下载策略,而不是通知整个集合。还将弹出一个确认对话框,向您通告估计的在线客户端数。
客户端将尽快从管理点请求策略,如下图所示:
监控客户端操作状态。
您可在 [Monitoring](监视)工作区的 [Client Operations](客户端操作)节点中监控客户端操作状态。如果任务已成功传输到客户端,则它将计入 [Success](成功)列。
故障排除提示
通知管理器和通知服务器提供丰富的状态消息,这些消息可以帮助您监控客户端通知任务。在 Configuration Manager 控制台中,单击 [Monitoring](监视),展开 [System Status](系统状态),单击 [Component Status](组件状态),选择 SMS_NOTIFICATION_SERVER 或 SMS_NOTIFICATION_MANAGER,然后单击 [Show Messages](显示消息)以查看此组件的状态消息。
您还可以使用以下日志文件帮助排除客户端通知问题。
组件 |
日志 |
通知管理器 |
<smssiteserver 安装目录>\logs\bgbmgr.log |
通知服务器 |
<mp 安装目录>\logs\BGBServer.log <sms_ccm dir 或客户端安装目录>\logs\BgbHttpProxy.log
对于安装问题: <mp 安装目录>\logs\BgbSetup.log <mp 安装目录>\logs\bgbisapiMSI.log |
通知代理 |
<客户端安装目录>\logs\CcmNotificationAgent.log |
常见问题
问题: 客户端通知是否适用于移动设备或 Mac 计算机?
回答: 客户端通知仅支持 Windows 计算机客户端和嵌入式客户端。
问题: 客户端通知如何实现负载平衡?
回答: 通知代理根据客户端的分配管理点来识别通知服务器。如果分配管理点发生变化,通知代理将关闭当前连接,并连接至位于新分配管理点的通知服务器。这样有助于确保连接负载平衡。
问题: 我可以从 Configuration Manager 控制台查看客户端的在线状态吗?
回答: 目前不能。我们正在考虑在将来的版本中提供此功能。
问题: 哪个 Windows Management Instrumentation (WMI) 类包括客户端计算机在线状态?
回答: SMS_CN_ClientStatus 是定义客户端计算机在线状态信息的 SMS Provider 类。OnlineStatus 属性代表客户端计算机的在线状态。值 1 代表在线,0 代表离线。ChannelType 属性用于区分客户端通知通道使用的协议类型。ChannelType = 0 代表 TCP 协议,1 代表 HTTP 协议。
注意: 该类名称是预发布版本的类名称,今后可能发生变化。
问题: 在创建每个任务之后,多长时间重新推送一次?
回答: 1 小时
问题: 哪些进程包含通知服务器代码?
回答: 通知服务器代码在 smsexec.exe、dllhost.exe(托管代码 TCP 侦听器)和 w3wp.exe(HTTP ISAPI) 中运行。
问题: 为什么客户端通知代理不能建立 TCP 连接?
回答: 最常见原因是配置的 TCP 端口(默认为 10123)仍被防火墙策略禁止。
问题: 触发下载计算机策略后,MP 会重载吗?
回答: 通知服务器实施推送限制机制。默认值为每秒通知 42 个客户端。因而添加到 MP 的负载受到控制。您可以通过注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\NotificationServer\Task Throttle Param 来配置这个值。但是,除在极端情况下之外,不推荐对大型集合(例如 All Systems)采用此操作。
问题: 如何确定每个管理点连接了多少个客户端?
回答: 以下 SQL 查询可以让您知道该数字。
select B.ServerName, A.OnlineClients as 'Online Clients' from Bgb_Server B left join dbo.v_BgbServerCurrent A on A.ServerID=B.ServerID order by 2
问题: 客户端服务启动后,是否立即连接到通知服务器?
回答: 在连接通知服务器前,通知代理会休眠,持续时间为 0 到 10 分钟之间的随机秒数,目的是避免在多台计算机同时开机的情况下(例如在工作日刚上班时),过度占用网络带宽。
问题: 当客户端计算机进入休眠模式或离线状态时,通知服务器能否知道?
回答: 可以。如果通知服务器在 20 分钟内未从通知代理接收到任何消息,它会断开现有连接,并将客户端在线连接状态设置为离线。
问题: 如果客户端离线,然后再上线,客户端能否通过客户端通知服务器接收错过的任务?
回答: 当客户端再次上线时,如果向其分配的任务已过期,通知服务器不会再进行通知。如果任务仍然有效,通知服务器会将任务重新推送至客户端。
问题: 如果客户端与辅助站点的管理点进行通信,客户端将连接到哪个通知服务器?
回答: 客户端会连接到代理管理点中的通知服务器。
问题: 连接互联网的客户端是否可以通过客户端通知通道?
回答: 可以。很可能出现由于通信路径中的防火墙和代理服务器而导致 TCP 连接失败的情况,客户端应该依然可以使用 HTTP 协议连接至通知服务器。
问题: 通知服务器是否适用于集群 SQL 服务器?
回答: 适用。
问题: 通知服务器是否支持站点数据库副本中的管理点?
回答: 可以。通知服务器支持站点数据库副本中的管理点。
问题: 漫游客户端是否能够连接至本地管理点中的通知服务器?
回答: 不可以。只有当客户端使用代理管理点时,全球漫游的客户端才能连接至分配管理点中的通知服务器。
总结
希望这篇博文能够有助于大家更好地理解 Configuration Manager 2012 SP1 新引入的客户端通知基础结构组件,并能从中找到典型问题的解决方法。
--Randy Xu
本博文按“原样”提供,且不提供任何担保和授予任何权利。