由于某项目的虚拟机均为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. 蓝屏的原因其实应该查清楚,然后把问题抛出给甲方。虽然我知道,甲方估计也没这个能力。。。。
cloudstack私有云监控虚拟机状态,异常自动重启虚拟机
原文:https://www.cnblogs.com/System-hjf/p/10348479.html