您的位置:  首页 > 技术杂谈 > 正文

利用OpenNJet HA Copilot 实现高可用部署 (一)

2023-11-15 16:00 https://my.oschina.net/u/6606114/blog/10143305 OpenNJet 次阅读 条评论

NGINX 向云原生演进,All in OpenNJet


1. HA简介

在部署服务端应用时,为了实现服务的高可用,常见的一种方案是额外安装Keepalived, 通过Keepalived 来监控服务端应用的运行状态,并设置虚拟IP (VIP), 客户端通过VIP 访问服务端实例。以开源Nginx 为例,示意图如下:
 
Keepalived 是以 VRRP 协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master 和多个 backup,master 上面有一个对外提供服务的 VIP(Virtual IP Address)(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 根据 VRRP包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。
为了简化部署及配置,NJet 通过Copilot 扩展机制实现了VRRP协议的HA模块,只要加载HA Copilot 并提供相应的配置文件,即可实现高可用功能,示意图如下:

2. 配置说明

开启HA功能需在njet.conf的 main block 中添加如下指令
helper ha modules/njt_helper_ha_module.so conf/vrrp.conf;
并在conf目录下提供vrrp配置文件,配置项的说明如下。
 
配置项
必填
配置说明
vrrp_instance
vrrp_instance的string为设置的VRRP的实例名。
state
设置当前节点的初始化状态,状态为MASTER或者BACKUP
interface
可以绑定vip的接口名称,比如eth0,bond0,br0。
通过IP -a查看自己的网卡信息
nopreempt
设置是否抢占虚拟IP,添加即为不抢占
virtual_router_id
设置虚拟路由器惟一标识,范围:0-255,同属一个集群的多个njet节点该id相同,不同的njet集群该值必须不同,务必要确认在同一网络中此值必须唯一。
priority
设置当前njet节点的优先级,范围:[1-254],值越大优先级越高
virtual_ipaddress
设置虚拟IP对应的子网掩码
配置样例文件参见下文中的测试验证章节。

3. 测试验证

  • 配置三台服务器测试机,IP分别是:
  1. 192.168.40.157
  2. 192.168.40.158
  3. 192.168.40.149
  • 使用虚拟IP:
  1. 192.168.40.50
192.168.40.157服务器vrrp.conf配置如下:
vrrp_instance m{
    state MASTER
    interface eth192
    virtual_router_id 32 
    priority 200 
    virtual_ipaddress {
         192.168.40.50/24 
    }
}
 
192.168.40.158服务器vrrp.conf配置如下:
vrrp_instance m{
    state BACKUP
    interface eth192
    virtual_router_id 32 
    priority 100 
    virtual_ipaddress {
          192.168.40.50/24 
    }
}
192.168.40.149服务器vrrp.conf配置如下:
vrrp_instance m{
    state BACKUP
    interface eth192
    virtual_router_id 32 
    priority 10 
    virtual_ipaddress {
        192.168.40.50/24 
    }
}

三台服务器上的NJet都启动时,由于40.157是MASTER,该主机将获取到VIP:

 
 
 
停止40.157主机上的NJet实例后,由于40.158主机的优先级priority 较高,40.158将获得VIP:
 
 
 
重新启动40.157主机上的NJet实例后,40.157将重新获得VIP。

OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。
邮件组 官网
展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接