cloudstack私有云监控虚拟机状态,异常自动重启虚拟机

背景:

  由于某项目的虚拟机均为Windows Server,并且经常出现蓝屏状态(有的几乎每天都需要重启),作为该项目的运维,甲方要求春节期间每天7点进行巡检,发现异常的及时处理。春节期间WTF,一百个不乐意,于是便有了想偷懒的念头。

  想法很简单,就是通过ping探测,如果发现ping不通某个IP,就调用cloudstack的命令行工具去重启机器。有了ideal之后,就可以开始行动,但是行动之前就遇到了一个问题,就是cloudstack机器网络无法访问虚拟机网络,想了下,主要有以下几种方法

  1. 和甲方拿网络权限,自己去调整网络(甲方肯定不会同意我在网络上做调整,而且出了问题肯定要甩锅,风险比较大)

  2. 寻找或者创建一个既能访问cloudstack又能访问虚拟机网络的主机(又要创建机器,资源不一定够)

  3. 直接在host动手脚,添加vlan id和添加网卡(直接改底层,这个我喜欢)

解决方案:

  1. 分析cloudstack所在网络和需要监控虚拟机所在的Host,获取网络的基本信息

  虚拟机所在的host,发现是用vlan820

brctl show
brbond0-820        8000.b8ca3af39b53    no        bond0.820
                                            vnet11

  2. 手工在cloudstack所在host机器上添加vlan接口和添加网桥

#bond0是我的物理网卡捆绑接口
vconfig add bond0 820 brctl addbr brbond0-820 brctl addif brbond0-820 bond0.820 ip link set eth0.820 up ip link set brbond0-820 up

  3. 手工给cloudstack添加网卡,以及配置IP地址

virsh attach-interface cloudstack --type bridge --source brbond0-820
#这样cloudstack就多了一个网卡,并且是连接到vlan820的网络
登录cloudstack,配置对应虚拟机的IP地址

  4. 配置监控脚本

#重启脚本,由于cloudmonkey重启需要虚拟机的ID,所以要提前准备好IP和ID之间的对应关系,存放在vmlist.txt中
#!/bin/bash for ip in $(seq 2 11) 60 do j=0 for count in $(seq 3) do ping -c 3 -t 2 192.168.20.$ip        ##ping3次,超时2s if [[ $? -ne 0 ]] then ((j++)) fi done if [[ $j -eq 3 ]] then vmid=$(grep "192.168.20.$ip" /server/script/vmlist.txt |awk '{print $1}') /usr/bin/cloudmonkey reboot virtualmachine id=${vmid} echo "reboot 192.168.20.${ip} in $(date +%F_%r)" >>/server/script/reboot.log fi done

#vmlist.txt内容如下
xxxx-xxxx-xxxx-xxxx 192.168.20.xx
......

总结:

  1. 春节我真不想拿电脑处理重启这种操作。。。

  2. 蓝屏的原因其实应该查清楚,然后把问题抛出给甲方。虽然我知道,甲方估计也没这个能力。。。。

 

posted @ 2019-02-02 15:00  System_hjf  阅读(611)  评论(0编辑  收藏  举报