在微软私有云解决方案里,System Center是重要一环。System Center的各大组件类似于三权分立:SCSM是立法和审判机构(服务请求与审核),SCOM是监察机构(监控数据中心的性能和事件),而Orchestrator则是执法机构(负责驱动底层的组件)。

在盆盆录制的这段视频里,描述了这样一段场景,分布式应用的Web前端过载时,会触发runbook新建变更请求;领导批准后,会触发另一个runbook,或者新建结点以横向扩展/或者启动池中可用的节点,以应对业务系统访问量暴涨。

其中最关键的地方就是Orchestrator的Runbook,它可以根据SCOM监控的性能警报自动执行复杂的操作,以下是视频中所示的runbook。

微软私有云自动化的完美演示_第1张图片

由于视频里所示的demo相对复杂,需要引入SCSM,所以该runbook中的初始化数据更新RB活动这两个Activity都和SCSM有关。

为方便描述,我们将该runbook略作修改,如附图所示:

微软私有云自动化的完美演示_第2张图片

该runbook可以实现的功能如下:

  • 从SCOM中获取Web前端的报警
  • 根据SCOM警报中的源虚机名称,得出其所在的计算机层的名称
  • 在该计算机层中,寻找是否有未启动的虚机
  • 如果有,则启动该虚机
  • 如果没有,则对该计算机层执行scale-out

这里着重描述几个关键的Activity(括号内是来自VMM IP中的实际Activity Name): 

获取Web层信息(Get Tier) 

微软私有云自动化的完美演示_第3张图片

根据Member VM Instance Names来倒推计算机层的名称,如附图所示:

微软私有云自动化的完美演示_第4张图片

其中的Value采用了Orchestrator独特的所谓databus的技术,我们可以右键单击,选择订阅前几个Activity所发布的数据。在活动一栏,选择第一个Activity(监控Web前端报警),然后选择其所发布的数据NetbiosComputerName。这表明我们根据SCOM警报中显示的源计算机的名称,来查询其计算机层的名称。这样我们就无需在runbook里采用硬编码,而根据前面Activity发布的动态数据作为变量,十分方便。

微软私有云自动化的完美演示_第5张图片 

Web层有否未启动VM(Get VM) 

查到该虚机所在Web层名称,就可以查询该计算机层中是否有未启动的虚机。

微软私有云自动化的完美演示_第6张图片 

查询参数有两个:Comuter Tier和Status,表示所在的计算机层和运行状态。返回同时满足这两个条件的虚机。 

其中Computer Tier的值可以订阅前一个Activity(获取Web层信息)发布在Databus上的数据(Tier Name)。 

Status的值可以选择正在运行(注意中文版的VMM,必须输入正在运行,英文版的话,应该选择running)。 

判断分支 

如果实现后续的判断分支?我们无需编写代码(尽管runbook可以直接使用powershell或者代码)。我们别小看活动之间的连接线(smart link),这些连接线也可以进行自定义!

例如当Web层有否未启动VM返回空值时(下方的分支),我们将连接线的属性值配置为返回对象数等于0。 

微软私有云自动化的完美演示_第7张图片 

包括部分,单击添加,然后设置已发布数据Number of Objects  

微软私有云自动化的完美演示_第8张图片  

设置条件表达式为等于数据值可以填0 

同理设置上方的分支为Number of Objects大于0 

微软私有云自动化的完美演示_第9张图片  

发送电子邮件   

Runbook执行成功后,会自动发送电子邮件,报告给指定的人员,告知哪台虚机发生性能问题,并且已经执行了解决措施。 

更有意思的是,邮件正文里涉及到的故障主机,也可以订阅databus上的数据! 

微软私有云自动化的完美演示_第10张图片