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

By 洪昕 2023-12-28

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

配置同步

上一篇文章介绍了 OpenNJet 如何实现高可用配置,这一篇文章介绍下高可用模式下实现集群配置同步的功能。OpenNJet 有很多动态配置的模块,这些动态的配置可以利用我们 HA 模块实现在主备节点之间进行同步。

主节点通过动态配置接口(声明式 api 或者命令式 api)动态更新配置,然后 backup 节点能够及时同步这些配置。主节点宕机,backup 节点动态更新配置,再主节点重新起来后,也能够及时同步更新的配置。最终保证主备节点都能够保证彼此配置的最新同步。

测试

配置说明

下面的测试场景,均以一台主节点,一台 backup 节点进行测试

主节点: 192.168.40.136

broker 进程配置如下

C++
#配置主节点监听端口和ip
listener 1883 192.168.40.136

#配置本地socket地址,用于本地worker进程通信
listener 0 /root/bug/njet1.0/data/mosquitto.sock

log_dest file logs/mosquitto.log
log_type debug
log_type information
log_type error
log_type warning
log_type notice

allow_anonymous true
persistence true
autosave_on_changes true
autosave_interval 1
persistence_location /root/bug/njet1.0/data/

backup 节点:192.168.40.91

broker 进程配置如下:

C++
#配置backup节点监听端口和ip
listener 1883 192.168.40.91

#配置本地socket地址,用于本地worker进程通信
listener 0 /root/bug/njet1.0/data/mosquitto.sock

#配置需要连接的主节点地址信息
connection bridge-backup
address 192.168.40.136:1883

#topic主题过滤掉get相关接口请求
topic /dyn/# both 0
topic /ins/# both 0

log_dest file logs/mosquitto.log
log_type debug
log_type information
log_type error
log_type warning
log_type notice
allow_anonymous true
persistence true
autosave_on_changes true
autosave_interval 1
persistence_location /root/bug/njet1.0/data/

命令式 API 消息同步

主节点更新消息,backup 节点同步消息

往主节点新增一个 location /clb,观察 backup 节点是否同步新增

往主节点通过动态 location 接口 add 一个 location

img

通过其他模块 get 接口查询,可发现主节点刚才的 location 已经存在

img

从 backup 节点查看,发现也存在该 location,同步成功

img

backup 节点更新消息,主节点同步消息

往 backup 节点新增一个 location /clb2,观察主节点是否同步新增

往 backup 节点通过动态 location 接口 add 一个 location

img

通过其他模块 get 接口查询,可发现 backup 节点刚才的 location 已经存在

img

从主节点查看,发现也存在该 location,同步成功

img

声明式 API 消息同步

主节点更新消息,backup 节点同步消息

通过修改 location /clb 下 limit conn 个数进行验证

主节点修改前:conn 数量为 100

img

修改主节点该值为 200

img

观察 backup 节点的值,发现已经为 200,同步成功

img

backup 节点更新消息,主节点同步消息

通过修改 location /clb 下 limit conn 个数进行验证

backup 点修改为 300

img

观察主机点,也为 300,同步成功

img

主节点退出, backup 节点配置 reload 后不会消失

stop 掉主节点,观察 backup 节点配置

img

观察 backup 节点,仍然是 300

img

将 backup 节点的值修改为 400,然后将 backup 节点 reload,重新 get 发现值还为 400

img

主节点重新加入,会同步 backup 节点消息

start 主节点,观察主节点配置是否会同步 backup 节点的动态配置

重新启动主节点

img

观察主节点的值,已经为 400,说明同步成功

img

已知问题

在有命令式 api 比如 location 动态删除的消息时,会同步失败