从数据到大模型应用,11 月 25 日,杭州源创会,共享开发小技巧
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分别是:
-
192.168.40.157
-
192.168.40.158
-
192.168.40.149
-
使用虚拟IP:
-
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 长期存在的难于动态配置、管理功能影响业务等问题。邮件组
官网