系统管理的快速通道 – ConfigMgr 2012 SP1中的“客户端通知”功能
概述
ConfigMgr已经发布的产品线采用的是从客户端主动获取策略的通讯机制。当管理员在一个很大的企业内部部署任务,客户端可能要过几分钟甚至几个小时才能接收到这个任务,然后才执行它,最后再向服务器发送结果。这对一般的任务是适当的,但是对于那些重要的、时间敏感的的任务就会成为一个大问题(例如:杀毒操作)。这对数据中心里的那些只有有限时间预留给管理任务的服务器来说,延时就会表现的非常明显。因此, 如果可以把IT管理任务更快的递送给客户端会非常有帮助。在ConfigMgr 2012 SP1中,我们在客户端和服务器之间引入“客户端通知”渠道。
“客户端通知”是什么?
“客户端通知”是应广大客户需求,在ConfigMgr 2012 SP1中引入的一个全新的、令人兴奋的基础设施组件,它提供了一种能够让ConfigMgr客户端实时执行管理任务的机制。这种通讯渠道是从服务器主动发送到客户端,它不依赖于客户端的主动索取。通过“客户端通知”组件,客户端和ConfigMgr的管理点可以建立起持久的连接;这样服务器就能够通过这个连接渠道通知客户端去实时获取并执行紧急的任务。在ConfigMgr 2012 SP1中,所有System Center Endpoint Protection的操作和“下载计算机策略”的客户端操作都是通过这个渠道进行的。
如何使用“客户端通知”
1. 设置客户端通知端口
默认情况下,客户端通知采用TCP 协议端口10123进行通讯。在ConfigMgr的主管理界面上,点击“管理”,展开“站点配置”,点击“站点”,选择一个“站点”,打开“属性”对话框,在这个属性对话框的“端口”页上,用户可以设置TCP协议端口。用户可能还需要设置管理点、客户端、和任何中间计算机的防火墙,允许通讯通过这个新的端口。反之,客户端通知也能够采用HTTP和HTTPS模式。
2. 通知Endpoint Protection Agent尽可能快地执行相应的操作
在Endpoint Protection的操作中,完全扫描和快速扫描是一次性的操作,它完全只依赖客户端通知渠道传送;其他的操作既可以通过客户端通知渠道,也可以通过一般的传统的策略渠道传送。从客户端通知这个视角,任务的有效期是1小时。举例说明:如果客户端在任务激发时处于离线状态,这个最初的任务是会失败的;如果该客户端在任务发送后1小时内连接上来,那么通知管理器会再次发送这个任务到客户端;如果客户端在1小时后连接上来,任务会被视做过期,不会再被发送。
3. 通知客户端立刻下载计算机策略
下载计算机策略是ConfigMgr 2012 SP1中新加的一种客户端操作。它能够不受客户端策略轮询时间间隔的限制,尽可能快地让客户端或者集合去下载计算机策略。在ConfigMgr主管理界面中,点击“资产和符合性”,再点击“设备集合组”,选择设备集合中需要的计算机去下载,右键点击计算机,然后点击“客户端通知”下的“下载计算机策略”。当在集合上执行这个操作时,所有属于这个集合的在线的客户端都会被通知到。当然也可以同时选择多台计算机来完成下载,从而不需要对这整个集合进行下载操作。
客户端将迅速地向管理点请求计算机策略,如下图所示:
4. 监视客户端的操作状态
在ConfigMgr主操作界面中,点击“监视”,再点击“客户端操作”来监视客户端的操作状态。如果任务成功被执行,结果会计算到“成功“列。
“客户端通知”是如何工作?
“客户端通知”是一个端到端的基础组件,由在站点服务器上的“通知管理器”, 管理点上的“通知服务器”,以及在客户端上“通知代理”三部分构成。
1) 通知管理器
通知管理器是站点服务器的一个组件,它的主要功能是对客户端通知的有效操作产生主动发送消息,并更新客户端的在线状态和更新站点数据库中客户端通知发送结果。
2) 通知服务器
通知服务器是在管理点上的服务器组件,它被自动部署和安装到管理点上(包括辅助站点)。通知服务器主要有以下功能:
l 支持TCP和HTTP中任何一种通讯协议来做客户通讯;
l 对站点数据库上的通知服务代理队列进行监听,监测“主动发送消息”产生的时间;
l 通过这个通讯渠道发送消息给在线的客户端,并周期性的把推送结果生成文件,最终存到站点数据库里。可以在ConfigMgr主管理界面中“客户端操作”中,查看这些结果。
l 维护在线客户端列表信息,周期性的将这些在线信息生成文件并发送给站点服务器。
3) 通知代理
通知代理是一个客户端组件,它被装载在CCMEXEC.exe中。在客户端初始化阶段,它与通知服务器建立持久连接。对于通过辅助站点进行通讯的客户端,它会在辅助站点管理点上和通知代理之间建立起连接。它会先尝试用TCP模式,如果连接建立失败,再用备选的HTTP模式(如:防火墙或者互联网代理服务器不允许TCP通讯)。如果连接中断,通知代理会尝试再连接。
“客户端通知”支持TCP和HTTP两种通讯协议。多数情况下“客户端通知”采用TCP协议模式,这需要在防火墙上设置允许通讯的端口;HTTP协议模式是备选方案,采用该协议模式,不需要额外的设置。这两种协议模式的工作流程类似,下面以TCP协议模式为例阐述其工作流程:
1)“客户端通知”基础设施在默认情况下是端到端有效的。在客户端进行初始化的过程中,通知代理会尝试与相应管理点上的通知服务器建立起TCP协议模式的长连接。一旦成功,通知代理会每15分钟发送一个保持存在的消息,用于保持连接。如果客户端不能建立起TCP模式的连接,通知代理就会尝试使用HTTP模式。
2)在安装管理点的那台计算机上,通知服务器会接受客户端发来的连接请求,当然这些连接请求必须要通过传输层安全(TLS: Transport Layer Security)认证检查。因此,通知服务器要管理所有的激活连接,并每5分钟将在线的状态数据生成文件,这些文件会被存放在<Site Server Install Dir>\inboxes\bgb.box\.
3) 通知管理器会从“bgb.box”的在线文件(*.BOS)中读取状态数据,然后去站点数据库上更新相应的在线表示信息。
4) 当管理员在ConfigMgr的主管理界面上初始化一个客户端的操作时,这个操作会被会生成一个客户端通知消息,并被放置到数据库服务代理队列中。
5) 通知服务器监测这个通知消息,并从服务代理队列中拿出这个消息,然后通过这个持久通道发给保持连接的客户端。
6) 通知代理在这个通讯渠道收到消息后,会根据消息的具体内容执行响应操作:或者通知Endpoint Protection客户端执行一个操作(比如:快速扫描),或者通知客户端尽可能快地请求计算机策略。通知结果会被发送回代理服务器。
7) 通知服务器会周期性地对这些任务发送结果进行归总并且把总归总结果文件存放在<Site Server Install Dir>\inboxes\bgb.box文件目录里。
8) 通知管理器会处理这些任务结果文件(*.BTS),并更新站点数据库。
疑难问题解决 :
1. 通知管理器和通知服务器提供了丰富的状态消息,这些消息可以帮助你监视客户端通知任务。在ConfigMgr的主管理界面中,点击“监视”,展开“系统状态”,再点击“组件状态”,选择SMS_NOTIFICATION_SERVER或者SMS_NOTIFICATION_MANAGER组件,然后点击“显示消息”,就可以看到这些组件的状态消息。
2. 也可以用下列的日志文件去帮助解决“客户端通知”中遇到的问题。
Component |
Log |
Notification Manager (通知管理器) |
<smssiteserver setup dir>\logs\bgbmgr.log |
Notification Server (通知服务器) |
<mp setup dir>\logs\BGBServer.log <sms_ccm dir or client setup dir>\logs\BgbHttpProxy.log For installation issues: <mp setup dir>\logs\BgbSetup.log <mp setup dir>\logs\bgbisapiMSI.log |
Notification Agent (通知代理) |
<client setup dir>\logs\CcmNotificationAgent.log |
常见问题
问:客户端通知是否支持移动设备和Mac计算机?
答:客户端通知只支持基于Windows操作系统的客户端和embedded客户端
问:客户端通知如何实现负载平衡?
答:通知代理能够识别出管理该客户端的管理点上的通知服务器。如果分配的管理点发生了改变,通知代理就会关闭连接,然后连接到新分配的管理点上的通知服务器。这样可以平衡连接的负载。
问:能否在ConfigMgr的主管理界面上看到客户端的在线状态?
答:目前版本不支持,会在后面的版本中考虑。
问:WMI(Windows Management Instrumentation)中哪个类定义了客户端计算机的在线状态?
答:ConfigMgr提供了WMI类“SMS_CN_ClientStatus”,它定义客户端计算机在线状态信息。其中的属性“OnlilneStatus”用来代表客户端计算机的在线状态;为“1”表示在线,为“0”表示离线。属性“ChannelType”是代表客户端通知渠道采用的通讯协议;为“0”代表TCP协议,为“1”代表HTTP协议。
注:这个类的名字可能在后面的版本中会有变化。
问:任务一旦被创建,多长时间会被重新发送?
答:1小时。
问:哪些进程中包含通知服务器的代码?
答:在smsexec.exe、 dllhost.exe(管理TCP协议的侦听服务器)和w3wp.exe(HTTP ISAPI)这三个进程中执行通知服务器代码。
问:为什么客户端通知代理不能建立TCP协议的连接?
答:多数情况下是防火墙设置上的TCP 协议10123端口没有打开。
问:当下载计算机策略时,管理点会超负荷吗?
答:通知服务器采用发送限流机制来执行,保证不会超负荷。默认情况下,1秒钟会通知42台客户端,这样能够控制管理点的负荷。这个值能够通过修改注册表: “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分钟内从通知代理那里接收不到任何信息,它会断掉连接,并把客户端在线连接状态设置为离线状态。
问:如果客户端离线,又上线,客户端能否从通知服务器那里接收到错过的任务?
答:当客户端再次上线,如果发送的任务已过期,通知服务器不会再进行通知。如果发送的任务还有效,通知服务器会再发送一遍到客户端。
问:如果客户端连接到辅助站点的管理点上,客户端将连接到哪个通知服务器上?
答:客户端会连接到代理管理点的通知服务器上。
问:通过Internet连接的客户端是否可以使用客户端通知渠道?
答:可以,好比就是当采用TCP协议连接的通讯失败时,客户端依然可以利用HTTP协议去连接通知服务器。
问:通知服务器是否支持集群SQL服务器?
答:支持。
问:通知服务器是否支持站点数据库副本的管理点?
答:支持。
问:漫游的客户端是否能连接上本地的管理点上的通知服务器?
答:不可以。只有当客户端利用代理管理点时,全球漫游的客户端只能连接到分配给它的管理点上通知服务器。
总结
希望这篇文章能够有助于大家更好地理解ConfigMgr 2012 SP1新提供的客户端通知基础架构组件,并能从中找到解决相应疑难问题的方法。
徐喜春 (Randy Xu)
白小西 译