Ha

该模块通过vrrp协议提供多个njet实例的高可用功能。

VRRP 的相关介绍可以参见网页:

https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E8%B7%AF%E7%94%B1%E5%99%A8%E5%86%97%E4%BD%99%E5%8D%8F%E8%AE%AE/2991482

配置说明:

  • 要开启该功能需要在njet.conf 的 main block 中添加如下指令:

njet配置文件增加:

helper ha /usr/lib/njet/modules/njt_helper_ha_module.so vrrp.conf;
  • 基于从流水线上下载的压缩包:该模块需要依赖外部的so动态库,将 libha_emb.* 拷贝到 /usr/local/lib 目录下,执行下面命令,确认/usr/local/lib 目录已经配置到/etc/ld.so.conf(注意: 如果从源码编译 ,make install 阶段是会将 这个 libha_emb.* 自动拷贝到 /ullsr/local/lib ,无需执行下面命令 )
cp -a work/usr/local/lib/libha_emb.* /usr/local/lib
  • 由于设置网卡vip , 需要一定的权限,njet 在非root 用户启动情况下,需要预先设置对应的权限
 sudo setcap cap_net_bind_service,cap_net_admin,cap_net_raw+eip njet 
  • 生效配置
sudo ldconfig

增加vrrp.conf 配置文件说明:

配置项 必须修改 配置说明
vrrp_instance 设置的VRRP的实例名,string类型
state 设置当前节点的初始化状态,状态为MASTER或者BACKUP。
interface 可以绑定vip的接口名称,比如eth0,bond0,br0。
virtual_router_id 设置虚拟路由器惟一标识,范围:0-255,同属一个集群的多个njet节点该id相同, 不同的njet集群该值必须不同,务必要确认在同一网络中此值必须唯一。
priority 设置当前njet节点的优先级,范围:1-254,值越大优先级越高
virtual_ipaddress 设置虚拟IP对应的子网掩码。

配置样例:

vrrp_instance m{
        state MASTER
        interface eth0 
        virtual_router_id 32 
        priority 100 
        virtual_ipaddress {
             10.1.0.22/24 
        }
}

HA copilot 模块的对应日志是 $PREFIX/logs/njet_vrrp.log, 日志中将显示 ha 模块设置vip时的一些相关信息, 配置文件中有错误的配置项,日志中将显示对应的错误位置及加载后的默认值。

Thu Jun 01 17:18:11.192916235 2023: (/usr/local/njet/conf/vrrp.conf: Line 2) (m) unknown state 'Back', defaulting to BACKUP
Thu Jun 01 17:18:11.193003054 2023: (/usr/local/njet/conf/vrrp.conf: Line 5) number '1000' outside range [1, 255]
Thu Jun 01 17:18:11.193027778 2023: (/usr/local/njet/conf/vrrp.conf: Line 5) (m) Priority not valid! must be between 1 & 255. Using default 100
Thu Jun 01 17:18:11.193230339 2023: gratuitous_arp_init end
Thu Jun 01 17:18:11.193271876 2023: start up end
Thu Jun 01 17:18:11.193536733 2023: (m) Entering BACKUP STATE (init)
Thu Jun 01 17:18:14.803010859 2023: (m) Entering MASTER STATE

配置的动态加载

Copilot 配置的动态设置在后续的版本中,将进行统一的考虑及设计。

目前 HA Copilot 已经屏蔽Njet 的 Reload 信号, vrrp 相关的配置,如果进行了手工编辑, 需要给 HA Copilot 进程发送 HUP 信号。 (kill -HUP $PID, 其中 $PID 为 HA Copilot 的进程id)