深入浅出keepalived+nginx实现网关主备高可用
目录
背景
当用Nginx作网关的时候,如果网关宕机了,整个服务将会变得不可用,那么如何保证网关的高可用呢?我们可以用Keepalived来做主备,实现网关的高可用,主机宕机了,备机选举出一个来IP自动漂移顶上去,主机恢复了,IP再飘回主机,备机自动下线!
思考一下,代理可以实现高可用不呢?在两台网关前面加一台代理,轮询将请求分别打给两台网关,当一台网关宕机了,代理就不会往这台网关上分发流量,这样也能实现高可用,但是代理自身也只有一个,自己宕机了那么整个服务就不可用,也就是代理自己存在单点故障,那么在代理前面在加一层代理?会发现无论前置多少层代理,无论怎么无限套娃总会存在代理自身单点故障,所以代理是不能实现自身的高可用的,它只能实现自己后层的服务的高可用。
keepalived原理
研究东西首先研究官网,官网说:keepalive是一个用c语言编写的路由软件。这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单、健壮的负载平衡和高可用性工具,通过VRRP协议实现高可用性。VRRP是路由器故障切换的基础…
- https://www.keepalived.org/
那么我们可以提炼出关键词:VRRP协议,那么这个协议是个啥?
我们首先思考一下:网关要实现主备,那么IP地址怎么设?不能主备都设置同一个IP吧,这样就冲突了,所以一定得有一个虚拟的IP用于接入网络,主备各自得有一个自己的IP用于主备自己的通信吧,不然备机怎么知道主宕机了,要么是备机不断的去请求主机看主机有没有返回数据包,一定时间没有返回就说明主机宕机了,要么是主机主动给备机发数据包,备机检测到一定时间内没有返回数据包则说明主宕机了,那么这个通知的过程得有一个通信协议吧,所谓协议,就是主备之间通信的方式,它定义了通信的内容,所以整个过程我们可以提炼出下面的概念
- VIP:虚拟IP(Virtual IP),即接入网络用于客户端访问的那个IP
- MASTER:主机,任何时候主机只有一台
- BACKUP:备机/备机组,备机可能不止一台
- VRRP:这就是我们所说的协议,VRRP全称为Virtual Router Redundancy Protocol,即虚拟路由器冗余协议
所以直接过过一遍VRRP协议内容
VRRP协议
VRRP协议有两个版本
- VRRPv2报文结构
- VRRPv3报文结构
[图片上传失败…(image-138c38-1616158179603)]
|报文字段
|
含义
| |
| |
VRRPv2
|
VRRPv3
|
|
Version
|
VRRP协议版本号,取值为2。
|
VRRP协议版本号,取值为3。
|
|
Type
|
VRRP通告报文的类型,取值为1,表示Advertisement。
|
VRRP通告报文的类型,取值为1,表示Advertisement。
|
|
Virtual Rtr ID(VRID)
|
虚拟路由器ID,取值范围是1~255。
|
虚拟路由器ID,取值范围是1~255。
|
|
Priority
|
Master设备在备份组中的优先级,取值范围是0~255。0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100。
|
Master设备在备份组中的优先级,取值范围是0~255。0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100。
|
|
Count IP Addrs/Count IPvX Addr
|
备份组中虚拟IPv4地址的个数。
|
备份组中虚拟IPv4或虚拟IPv6地址的个数。
|
|
Auth Type
|
VRRP报文的认证类型。协议中指定了3种类型:0:Non Authentication,表示无认证。1:Simple Text Password,表示明文认证方式。2:IP Authentication Header,表示MD5认证方式。
|
|
|
Adver Int/Max Adver Int
|
VRRP通告报文的发送时间间隔,单位是秒,缺省值为1秒。
|
VRRP通告报文的发送时间间隔,单位是厘秒,缺省值为100厘秒(1秒)。
|
|
Checksum
|
16位校验和,用于检测VRRP报文中的数据破坏情况。
|
16位校验和,用于检测VRRP报文中的数据破坏情况。
|
|
IP Address/IPvX Address(es)
|
VRRP备份组的虚拟IPv4地址,所包含的地址数定义在Count IP Addrs字段。
|
VRRP备份组的虚拟IPv4地址或者虚拟IPv6地址,所包含的地址数定义在Count IPvX Addrs字段。
|
|
Authentication Data
|
VRRP报文的认证字。目前只有明文认证和MD5认证才用到该部分,对于其它认证方式,一律填0。
|
|
|
rsvd
|
|
VRRP报文的保留字段,必须设置为0。
|
状态机
VRRP用状态机来完成了主备之间的切换,所谓状态机,一言以蔽之
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型
注意两个特征:有限和自动,有限即状态是有限的,每个状态带有一系列的动作,当处于某状态下,这些动作会自动执行,在某个事件下,会触发一个状态到另外一个状态的切换,比如自动售卖机可能有三个状态
- 未付款状态:什么也不做
- 付款中状态:检查是否足额付款
- 已足额付款状态:弹出汽水;余额清零;销售额累加等等
那么此例中状态是有限的,跟随状态的动作会在该状态下自动执行,投币的动作会触发状态的切换,因此引出状态机的四个概念
- State:状态,一个状态机至少要包含两个状态
- Action:动作,事件发生以后要执行动作
- Event:事件,变换到某个状态的触发条件
- Transition:变换,也就是从一个状态变化为另一个状态
VRRP协议定义了一台机器的三种状态:
- 初始状态ÿ