🙈 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
通过其他模块 get 接口查询,可发现主节点刚才的 location 已经存在
从 backup 节点查看,发现也存在该 location,同步成功
backup 节点更新消息,主节点同步消息
往 backup 节点新增一个 location /clb2,观察主节点是否同步新增
往 backup 节点通过动态 location 接口 add 一个 location
通过其他模块 get 接口查询,可发现 backup 节点刚才的 location 已经存在
从主节点查看,发现也存在该 location,同步成功
声明式 API 消息同步
主节点更新消息,backup 节点同步消息
通过修改 location /clb 下 limit conn 个数进行验证
主节点修改前:conn 数量为 100
修改主节点该值为 200
观察 backup 节点的值,发现已经为 200,同步成功
backup 节点更新消息,主节点同步消息
通过修改 location /clb 下 limit conn 个数进行验证
backup 点修改为 300
观察主机点,也为 300,同步成功
主节点退出, backup 节点配置 reload 后不会消失
stop 掉主节点,观察 backup 节点配置
观察 backup 节点,仍然是 300
将 backup 节点的值修改为 400,然后将 backup 节点 reload,重新 get 发现值还为 400
主节点重新加入,会同步 backup 节点消息
start 主节点,观察主节点配置是否会同步 backup 节点的动态配置
重新启动主节点
观察主节点的值,已经为 400,说明同步成功
已知问题
在有命令式 api 比如 location 动态删除的消息时,会同步失败