14-主备状态切换

1. 主备切换引发的IP漂移现象

  当client发出请求时,该请求会先经过交换机,在交换机下连接着多个nginx服务器,包括主机和备机,因此交换机上会设置一个vip,client访问时只需访问交换机上的vip就行了,而不用去访问nginx服务器上的真实ip。因为nginx主机和nginx备机运行着的keepalived软件会在本机可用的真实ip上绑定一个vip,也就是说交换机,nginx主机和nginx备机都有一个vip。

  在nginx主机和nginx备机的都处于正常状态下,vip实际上会绑定nginx主机的真实ip,虽然vip也绑定了nginx备机上的真实ip,但是不会用,可以理解为这是一个“假的绑定”

  当nginx主机出现故障时,比如:主机上的nginx或keepalived挂了。nginx备机上运行着的keepalived会检测到nginx主机宕机了,这时,nginx备机运行着的kaapalived软件主要会做以下几件事情:

1.把vip绑定到nginx备机上的真实ip(俗称ip漂移)。
2.接管nginx主机的工作(从backup切换成master)
3.定时检测nginx主机是否恢复



  当nginx主机恢复时,一旦nginx备机上运行着的keepalived检测到nginx主机恢复,主要会做以下几件事情:

1.让出位置(从master切换回backup)
2.删除本机的vip(当nginx主机出故障时又会添加回来)
3.发送心跳检测,定时检测nginx状态


2. 正常(初始)状态

14-主备状态切换

正常状态说明:
  client直接访问vip就行了,然后交换机根据client访问的请求(vip)直接发送给nginx主服务器,由nginx主服务器提供服务,把请求转发给tomcat服务器集群(这里client不需要访问nginx主服务器的真实ip,因为vip已经绑定了nginx主服务器的真实ip,也就是说,不管是访问vip,还是真实ip其实都是一样的)。

  另外从这里可以看出,nginx备机绑定的vip并没有启用(“假绑定”),那么nginx备机既然不处理请求,不干活,那在干嘛?其实nginx备机上运行的keepalived一直在发送心跳检测nginx主机是否还活着,同时nginx主机上的keepalived一直在发送VRRP多播包告知nginx备机自己的状态。


3. 主服务器宕机

14-主备状态切换

单点故障状态说明:
  当nginx主机发生故障时(nginx挂了或keepalived挂了等),这意味着nginx主机上的keepalived也就不会发送VRRP多播包了,当nginx备机上运行着的keepalived没有收到VRRP包就会检测nginx主机挂了,然后立刻接管nginx主机的工作(从backup切换成master),并把vip绑定到自己身上(即ip漂移),同时发送心跳检测nginx主机是否恢复,下次client请求的时候,交换机直接根据vip绑定的真实ip把请求发送给nginx备机,由nginx备机向client提供服务,把请求转发给tomcat服务器。


4. 主服务器恢复

14-主备状态切换

恢复状态说明:
  当nginx主机恢复时,nginx主机上运行的keepalived会发送VRRP多播包,然后nginx备机上运行着的keepalived收到VRRP包时说明nginx主机已恢复,就会让出位置(从master切换回backup)并删除自己的vip(ip漂回来了),同时继续发送心跳检测nginx主机的状态,那么nginx主机就可以继续为client提供服务转发请求了。

注意:当nginx主机恢复时,nginx备机不一定会让出位置,这个要看keepalived软件的配置策略(在后面会具体说明原因)。