0
点赞
收藏
分享

微信扫一扫

keepalived结合Nginx实现高可用

    keepalived在设计之初是为了配合LVS结合单点失败问题,并在后期加入了VRRP协议,进而为Nginx、HAProxy和MySQL等集群服务提供高可用解决方法,此篇主要看一下keepalived如何结合Nginx实现高可用。

    此次实验,笔者准备了5台主机,2台作为后端web服务器,取名web-server1和web-server2;2台作为keepalived服务器,取名node1和node2;1台作为客户端测试工具,取名client。

  1. 后端web服务器准备

    两台后端服务器均安装并启动Apache服务,并在web首页显示各自IP。

keepalived结合Nginx实现高可用_web服务器

keepalived结合Nginx实现高可用_高可用_02

keepalived结合Nginx实现高可用_客户端_03

    两台keepalived服务器均需安装Nginx服务和keepalived服务,keepalived在实现服务集群高可用方面可采用主备模式或双主模式等。

  1. 主备模式

2.1 安装并Nginx服务

    node1和node2安装Nginx服务后,需在配置文件中添加upstream模块,都将后端两台web服务器加入到反向代理转发的分组中。为了区分,笔者将node2上反代时的web-server2权重设为2。

keepalived结合Nginx实现高可用_keepalived_04

keepalived结合Nginx实现高可用_客户端_05

keepalived结合Nginx实现高可用_keepalived_06

keepalived结合Nginx实现高可用_ip地址_07

    此时客户端通过两台keepalived服务器已经能访问到后端服务器,并且node1采用的是默认的轮询调度,node2是按照1:2的比例向后端服务器进行调度。

keepalived结合Nginx实现高可用_客户端_08

2.2 安装并配置keepalived服务

    node1和node2均安装keepalived服务。

keepalived结合Nginx实现高可用_web服务器_09

keepalived结合Nginx实现高可用_ip地址_10

    在主备模式中,笔者以node1为MASTER,node2为BACKUP,并添加VIP地址10.0.0.100/24,期望客户端通过VIP地址来访问到后端web服务器。此时node1和node2的keepalived配置文件需做如下图所示设置,两个节点的设置基本相同,区别在于router_id为各自的hostname,而且node1初始状态设为了MASTERE,且优先级为100。

keepalived结合Nginx实现高可用_keepalived_11

keepalived结合Nginx实现高可用_web服务器_12

2.3 客户端测试

2.3.1 启动服务并查看IP

    此时node1和node2启动keepalived服务,按照笔者在两个节点配置文件中的设置,目前VIP地址是飘在初始状态为MASTER、优先级为100的node1上。

keepalived结合Nginx实现高可用_keepalived_13

keepalived结合Nginx实现高可用_web服务器_14

2.3.2 客户端访问

    客户端访问VIP地址时,能正常访问到后端web服务器,说明在当前环境中,笔者配置的VIP地址是生效的,从返回页面的占比能看出是经过node1反向代理到后端web服务器的。

keepalived结合Nginx实现高可用_ip地址_15

2.3.3 模拟MASTER节点故障

    为了验证主备模式下的高可用,笔者停掉node1的keepalived服务模拟主节点出现故障情况。node1停掉keepalived服务后,查看node2的IP变化,可以看到VIP地址已自动飘过来了,实现了VIP地址的自动切换,此时客户端访问VIP地址时,依旧可以访问到后端web服务器,而且响应的内容占比为1:2,说明此时是通过node2来做反向代理的。

keepalived结合Nginx实现高可用_高可用_16

keepalived结合Nginx实现高可用_keepalived_17

keepalived结合Nginx实现高可用_高可用_18

2.3.4 MASTER节点重回集群

    当node1重回集群时,由于主备模式配置文件中node1的优先级为100,而node2的优先级为80,查看IP时,VIP又重新飘到了node1节点上,并且客户端通过VIP访问时的响应首页内容占比为1:1,说明是经过node1反向代理到后端服务器的。

keepalived结合Nginx实现高可用_keepalived_19

keepalived结合Nginx实现高可用_客户端_20

keepalived结合Nginx实现高可用_ip地址_21


  1. 双主模式

    在双主模式下,node1和node2都保持正常服务时,客户端可以通过两个节点同时访问到后端对应的服务器,只有当某一个节点出现故障时,才会将飘在该故障节点的VIP地址切换到备用节点上。

3.1 keepalived配置文件设置

    双主模式下,笔者的后端web服务器和两个节点上的Nginx服务配置保持不变,主要是在keepalived配置文件中添加新的vrrp_instance,并让VIP地址10.0.0.101在初始状态下飘到node2上。

    在以上的主备模式下,vrrp_instance名称为VI_1,那笔者将node2作为主节点的vrrp_instance名称定为VI_2,在VI_2中,node2初始状态要定为MASTER,并且优先级要高于node1。每个路由服务器的virtual_router_id是唯一的,要区别开。此外如果给VIP地址设定了标签的话,需要保证标签是不冲突的。

keepalived结合Nginx实现高可用_客户端_22

keepalived结合Nginx实现高可用_客户端_23

3.2 客户端测试

3.2.1 启动服务并查看IP

    node1和node2重启keepalived服务后,查看IP时可以看到各自都有了一个VIP地址。

keepalived结合Nginx实现高可用_web服务器_24

keepalived结合Nginx实现高可用_web服务器_25

3.2.2 客户端访问

    客户端可通过两个VIP地址进行后端服务器的访问,并且通过返回内容的占比可看出是各VIP对应的节点进行的反向代理。

keepalived结合Nginx实现高可用_ip地址_26

3.2.3 模拟某一个主节点出现故障

    此时停掉node1上的keepalived服务来模拟双主模式下的一个主节点出现故障的情况,查看IP时,node1上绑定的VIP地址飘到了node2上,客户端访问时,依旧还能通过之前飘在node1上的10.0.0.100这个VIP地址来进行后端web访问,但是返回的页面内容占比变成了1:2,可见是由node2反向代理过去的。

keepalived结合Nginx实现高可用_ip地址_27

keepalived结合Nginx实现高可用_ip地址_28

keepalived结合Nginx实现高可用_高可用_29

3.2.4 故障节点重回集群

    与主从模式一样,虽然是双主模式,但在vrrp_instance名称为VI_1虚拟路由器中,node2为node1的BACKUP节点,所以当node1重启keepalived服务后,10.0.0.100的VIP地址又会飘回到node1上,客户端通过该VIP访问后端服务器时又是经过了node1节点的。

keepalived结合Nginx实现高可用_高可用_30

keepalived结合Nginx实现高可用_客户端_31

keepalived结合Nginx实现高可用_keepalived_32

举报

相关推荐

0 条评论