在Linux上一般都使用Keepalivd来做高可用,通常也会搭配Nginx或者Lvm来做负载均衡。一般来说,Lvm的配置更复杂,功能更多,性能更好,但是如果本身就是有前端的,可以直接使用Nginx一机搞定。主要还是看你的项目对性能需求有多大。
虚拟IP
Keepalived的高可用是通过虚拟IP来实现的,其实Keepalived的基本原理非常简单。
直接在网卡上附加一个虚拟IP,通过ARP协议将IP地址扩散出去。效果等同于你直接配置了一个静态IP。ARP协议其实是个二层协议,专门用来绑定网卡的MAC地址和IP地址的。将自己虚拟出来的IP和MAC地址扩散出去就等同于发送了一个“我在这里”的广播。
当然,在Nginx或者apache里使用了IP地址作为server_name的话,需要使用Keepalived绑定的地址。
切换过程
控制部分是通过用户自己定义的脚本实现的。Keepalived 只做两件事,向外宣告一个虚拟IP或者监控一个虚拟IP是否存活(Backup),Backup如果发现Master的IP不存活,则会自己主动升级为Master。而另一件事就是执行玩家定义的脚本。
Master节点会一直运行玩家定义的脚本,脚本主要的内容就是看需要监控的服务是否存活,如果不存活可以试着重启服务,如果无法重启,那么就关闭自己的Keepalived服务。
Master节点上Keepalived关闭之后,虚拟IP自然也就不存在了,此时,Backup发现Master节点消失,会自动升级为新的Master节点。
当原来的Master节点上线之后,因为优先级较高,会重新成为Master节点。这样一次故障切换与故障恢复就完成了。
安装
Keepalived使用广泛,安装也非常方便,直接使用Yum安装是最佳选择。
yum install epel-release -y
yum install keepalived -y
vrrp_script
因为Keepalived的监控脚本是玩家自定义的,所以几乎可以监控任何东西。
最后不要忘了赋予脚本执行权限。