CloudStack的HA功能分为VM的HA和Host的HA
基于VM
启用VM的HA功能后,如果VM异常宕机(crash)或者进程被异常终止(而并非主机原因),CS会自动检测并尝试在当前主机重新开启该VM
前提 1.VM被从内部(init 0, halt ,shutdown)关闭,或进程被杀掉。2.不能使用cloudstack控制界面关闭。
备注 如果是使用cloudstack控制界面关闭,那该VM不会进行HA尝试。如果是前提1中方法导致VM关闭,CS会自动重新启动该VM。
基于HOST
前提 启用主机的HA功能后,如果物理主机异常宕机或者出现物理损坏,CS会尝试将在该主机上面的虚拟机,在打了HA tag的主机上面重新启动。
备注 1.不能使用reboot,shutdown这些命令关闭物理主机。2.必须是被动、异常关闭,而不是主动关闭主机。3.比如:系统crash、断电,网络故障等。
原理:cloudstack-manager在内存中记录物理主机存活状态,如果manager通过cloudstack-agent接收到物理主机正常关闭时,则把内存信息中的该物理主机T除掉,
那么主动T除的情况下,是不会发生HA切换的。
即使是因为物理主机网络异常触发的HA,所有VM都会被关闭并且在打了HA标签的主机上重新启动。所以就是VM重新在其他服务器上启动的过程。
基于VM+HOST
2者结合,才真正实现高可用性。
生产中,推荐该做法。基于VM和基于HOST的高可用实际是为了尽可能的考虑稳定性和服务的持续性。
面对生产环境,很难讲会发生什么样的事情,单一的VM高可用和HOST的高可用都可能带来所谓的单点故障。所以,在规划CloudStack部署时。
应该考虑到各方面的隐患和潜在故障来源。网络波动,存储性能,硬件问题,系统资源不足等问题可能会造成的抽风。
注意:1.如果你有2台服务器,那不要在2台主机上面同时设置主机ha标签。设置ha标签的服务器只是备用机,不能在群集里面所以的机器都是备用机。2.在一个群集中,启用HOST高可用的服务器挂了之后,
其上的vm会自动在设置ha标签的服务器上面运行。
如果在所有服务器中全部设置ha标签,巧的是SSVM+CPVM正好也在你关闭的那台服务器上面,,,那,你悲催了。因为新的SSVM+CPVM会被创建,同时会失败。看management日志会得到如下信息:
NFO[storage.secondary.SecondaryStorageManagerImpl](secstorage-1:)Unable tostartsecondary storage vmforstandbycapacity,secStorageVm vmId:4,will recycle itandstartanewone
WARN[cloud.consoleproxy.ConsoleProxyManagerImpl](consoleproxy-1:)Exceptionwhiletrying tostartconsoleproxy
com.cloud.exception.InsufficientServerCapacityException:Unable tocreatea deploymentforVM[ConsoleProxy|v-5-VM]Scope=interfacecom.cloud.dc.DataCenter;id=1
at com.cloud.vm.VirtualMachineManagerImpl.advanceStart(VirtualMachineManagerImpl.java:841)
at com.cloud.vm.VirtualMachineManagerImpl.start(VirtualMachineManagerImpl.java:577)
at com.cloud.vm.VirtualMachineManagerImpl.start(VirtualMachineManagerImpl.java:570)
at com.cloud.consoleproxy.ConsoleProxyManagerImpl.startProxy(ConsoleProxyManagerImpl.java:556)
at com.cloud.consoleproxy.ConsoleProxyManagerImpl.allocCapacity(ConsoleProxyManagerImpl.java:928)
at com.cloud.consoleproxy.ConsoleProxyManagerImpl.expandPool(ConsoleProxyManagerImpl.java:1672)
at com.cloud.consoleproxy.ConsoleProxyManagerImpl.expandPool(ConsoleProxyManagerImpl.java:157)
at com.cloud.vm.SystemVmLoadScanner.loadScan(SystemVmLoadScanner.java:111)
at com.cloud.vm.SystemVmLoadScanner.access$100(SystemVmLoadScanner.java:33)
at com.cloud.vm.SystemVmLoadScanner$1.reallyRun(SystemVmLoadScanner.java:81)
at com.cloud.vm.SystemVmLoadScanner$1.run(SystemVmLoadScanner.java:72)
atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
atjava.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
atjava.lang.Thread.run(Thread.java:744)
这个报错熟悉吧。。。意思是说你服务器资源不够了等等。。。但实际呢,你把其中一台服务器的ha标签给取消就恢复正常了。坑爹。大概是因为如果群集里面的服务器都开启功能且设置ha标签,
没有一个权重设置该vm改在哪台主机上面运行,所以就冲突了。但是报这个资源不足的错误,我表示无法接受。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)