最近因为公司项目需要使用KeepAlived,所以正在学习KeepAlived。网上很多资料但是大多千篇一律,而且根本没有说清楚。所以自己整理了一下。
首先,KeepAlived是一种负载均衡和高可用方案或者说技术,更偏向于高可用。
那么KeepAlived怎么实现的负载均衡和高可用呢?下面将详细说明
一、负载均衡
KeepAvlied的负载均衡其实是站在巨人的肩膀上,是基于LVS实现的。LVS全程linux virtual server即linux虚拟服务器。
关于LVS的介绍,网上很多,
个人的另一篇博客也有介绍LVS学习笔记
这里就不多说了。
二、高可用(这里指的是路由器高可用)
KeepAlived的高可用是基于VRRP协议实现的,即虚拟路由冗余协议。简单介绍下VRRP
其实从名称来看就大概能明白,冗余,也就是说要有多个路由器。这些路由器一起提供虚拟路由功能。
即VRRP由一组真实的路由器组成,这些路由器分为一个master和多个backup,对外提供一个虚拟IP,平时由master来负责处理,master会发送组播给backup,当backup收不到master的组播后,会认为master已经宕机
通过选举,根据VRRP的优先级(优先级相同选IP大的)从剩下的backup中选择一个成为新的master,接着对外提供服务。保证路由的高可用。
到这里相信KeepAlived的原理已经介绍完了。
简单说下KeepAlived内部组件
core:用来监控checker和vrrp的
checker:用来做心跳检测
vrrp:实现vrrp
最后说下KeepAlived的配置
主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server
global_defs全局配置,一般用来在配置发生切换时的告警设置
static_ipaddress和static_routes,用来配置IP和路由的,一般服务器都由IP和路由了,一般不需要
vrrp_xxx这些就是跟vrrp协议相关的配置,实现高可用的时候需要配置
virtual_server跟LVS相关的配置,实现负载均衡的时候需要配置。
总结下,global_defs一般都需要配置,配置项具体内容网上很多,不介绍了。static_xxx一般不用配置,如果需要使用KeepAlived的高可用特性的话,需要配置下vrro_instance以及vrrp_xx这些配置项
如果要使用KeepAlived负载均衡特性的话,需要配置下virtual_server IP port,IP肯定是虚拟IP,port就看需要负载均衡的服务监听的端口号。
仅使用高可用特性的话,不需要配置virtual_server。但是要求访问vip的端口号和真实服务器的端口号一致。个人感觉跟LVS的DR模式很类似,通过vrrp直接将vip的mac地址设置成master的mac地址,直接转给master,
并且因为master绑定了vip,所以响应包不需要做任何特殊处理。