13-keepalived工作原理

参考资料 :keepalived权威指南

1. 什么是高可用(HA)

百度百科定义:
  HA(High Available),高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

   nginx作为负载均衡器,所有请求都到了nginx服务器,可见nginx处于一个非常重要的位置,如果nginx服务器宕机,那么后台的服务器将无法提供服务,严重影响客户端的请求。

如下图所示:

13-keepalived工作原理_第1张图片

  为了解决nginx服务器单点故障的问题,需要再建立一个备服务器,然后在主服务器和备服务器上都运行高可用(High Availability)监控程序,备服务器通过类似“心跳检测”这样的方式来检测对方的运行状况。一旦当备服务器不能在指定的时间内收到“心跳检测”这样的信息,它就会认为主服务器出故障了,然后接管主服务器的工作并继续提供服务;当备服务器又从主服务器收到“心跳检测”这样的信息时,备服务器就会让出现在的位置,把工作交还给主服务器,这样主服务器就开始再次提供服务了。

2. keepalived介绍

  keepalived是集群管理中保证集群高可用的一个服务软件,主要是防止单点故障问题。在第一节提到的高可用程序,说的就是keepalived软件。下面我们就通过keepalived工作原理来了解keepalived是怎么工作的。


3. VRRP协议

   keepalived之所以能保证高可用是基于VRRP协议实现的,因此我们有必要了解一下VRRP协议。

  在现实环境中,两台主机之间通信大多都没有直接通过网线等物理连接,它们之间通信的路由选择是一个问题,对于这种情况,一般有以下几种解决办法:
1.在主机上配置RIP,OSPF,EIGRP等动态路由协议。
2.在主机上配置静态路由。

  其实对于以上任何一种解决办法来说,都不太现实,就拿第一种来说,管理和维护变得非常复杂,需要专门的网络工程师维护,而在主机上配置静态路由工作量大,不好管理,路由经常变成单点。

  而VRRP协议目的就是解决静态路由单点故障问题,VRRP通过一种竞选协议来动态的将路由任务交给局域网中虚拟路由中的某台VRRP路由器,,多读几遍,下面所有解释都是围绕这句话展开的。


4. VRRP路由器

  那么,什么是VRRP路由器呢?

  简单来说,我们可以把VRRP路由器理解为只要是运行了keepalived软件(VRRP协议)的一台物理路由器就是VRRP路由器,而一台VRRP路由器可以位于多台虚拟路由器。

  诶,什么鬼。。。怎么又出来个虚拟路由器???


5. VRRP虚拟路由器

  VRRP虚拟路由器从字面意思上来理解的话,就是虚拟出来的路由器,并不存在,也就是逻辑上的一台路由器,看不见,也摸不着。

  简单来说,虚拟路由器是我们逻辑上把多台物理的VRRP路由器通过某种方式组成的(而组合成的这台路由器就是VRRP虚拟路由器),这样看起来就只有一台VRRP虚拟路由器,但VRRP虚拟路由器内部实际上有很多台物理的路由器。

前面我们说过VRRP协议是通过VRRP虚拟路由来解决静态路由单点故障问题,那么VRRP协议是怎么做的呢?


6. keepalived工作原理

  keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

  虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的虚拟ip,即vip(该路由器所在局域网内其他机器的默认路由为该vip),在keepalived中只有作为master的服务器会一直发送VRRP广播包(心跳消息),以告知局域网内的其他backup节点自己还活着,当master宕机了那么backup就无法收到VRRP包,这时就需要根据VRRP的优先级来选举一个backup接管master的工作,当检测到master恢复时,backup又会让出工作,恢复原来备机状态。VRRP的出现就是用来保障单点故障问题,即某个节点出现故障,不会影响整个网络的正常运行,这样的话就可以保证路由器的高可用了。


7. 虚拟IP—VIP

  在kekepalived的工作原理中,提到了一个很重要的概念,虚拟ip——vip。

  如果你已经理解了前面所讲的VRRP虚拟路由,那么虚拟ip对你来说就很简单了,因为虚拟ip和VRRP虚拟路由其实是一个道理,前面的VRRP虚拟路由都是铺垫,对于学过NA的同学来说,VRRP虚拟路由和虚拟ip不难理解,所以不要嫌我啰嗦,这里照顾一下网络不是特别好的同学,我们慢慢来解释虚拟ip是个什么东西。

  一般我们使用的电脑都有一个网卡,在网卡上绑定一个ip地址就可以开始上网了,那么大家有没有想过一个问题:网卡可以绑定多个ip吗?答案是一个网卡是可以绑定多个ip地址的,只是一般来说我们只绑定一个ip而已。

  虚拟ip跟VRRP虚拟路由器也是类似的,虚拟出来的,一个逻辑上的ip地址,也是由多个机器的真实有效的ip“绑定”组合而成的一个虚拟ip,但是访问虚拟ip跟访问真实ip的效果是一样的。

来看一个例子:

13-keepalived工作原理_第2张图片

  假设我们通过服务器上运行的keepalived软件根据真实ip绑定了一个192.168.1.2的vip,然后client1通过真实ip访问服务器是可以成功的,同理,client2通过vip去访问服务器同样可以成功,其实本质上client2还是访问的真实ip,vip只是一个虚拟出来的假象而已。所以叫虚拟ip,即virtual ip,简称vip。

注意,在虚拟vip的时候,最好虚拟同一个网段下的ip,这样方便管理,例如:
假设在这个局域网下有三台机器:两台nginx服务器,一台tomcat服务器
nginx主机ip为:192.168.1.21
nginx备机ip为:192.168.1.22
tomcat服务器ip为:192.168.1.23

  主机和备机的ip前三部分都相同,说明它们是处于同一网段下的,因此在虚拟vip时,前三部分要相同,最后一部分则不能跟同一局域网下的任一主机的ip冲突,也就是说虚拟ip的最后一部分不能是21,22,23,因为这些已经被其他机器占用了。那么虚拟的vip可以是:192.168.1.24或192.168.1.25,只要保持ip的最后一部分不相同就行



补充:
  这一篇内容有点多,需要理解的很多,建议参考书籍体会,特别是keepalived的工作原理VRRP协议(对于学过na的同学来说应该是没压力的),书中的解释已经讲的非常明白了,这里我就直接拿过来用了。在下一篇中,我们来了解master和backup的状态切换过程来了解keepalived是怎么工作的。

你可能感兴趣的:(每天学一点——nginx)