集群说明
Njet 集群通用配置
1.功能描述
- 组播(Multicast)是一种网络通信模式,其中一台计算机向多个目标计算机同时发送数据。这是一种一对多通信模式,其中发送方将数据发送到一个组播地址,然后所有订阅该组播地址的计算机都可以接收到该数据。例如,在视频会议或流媒体传输中,发送方可以使用组播将音频和视频数据发送到所有参与者,而不是向每个参与者发送单独的数据流。
基于gossip实现njet集群同步功能:
- stream模块指定d类ip地址,增加gossip指令开启集群同步功能
- 同一个集群采用cluster_name指令指定标识
- 不同节点采用node指令指定标识,并需要额外的woker0进程的pid标识,原因是reload会先启动新节点发online消息,旧woker退出发offline消息,这样为了进行正确区分,需要额外的woker0进程pid标识
- 新节点上线发送组播online消息,集群其他节点收到online消息,记录到自己的共享内存记录已经上线节点信息
- 节点下线发送组播offline消息,集群其他节点收到offline消息,更新自己的共享内存记录下线该节点信息
- reload会先启新woker,后下线旧woker,其他节点需要能够正确识别
- 可以指定心跳超时时间和节点清理超时时间(防止某些节点故障没发送心跳信息,需要强制下线该节点信息)
- 其他消息类型,新上线节点会发送msg同
2.依赖模块
无
3.指令说明
3.1 Listen 配置
需要配置d类组播ip, eg:
listen 238.255.253.254:5555 udp;
3.2 指令配置:
gossip zone=test:1m heartbeat_timeout=100ms nodeclean_timeout=1s local_ip={local_ip} sync_port={sync_port} ctrl_port={ctrl_port};
参数说明
参数 | 取值 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
zone | {name}:{size} | - | Y | 共享内存名称以及大小 |
heartbeat_timeout | 时间单位, 比如100ms | 100ms | N | 心跳间隔时间配置小于10ms,则设置为默认值100ms |
nodeclean_timeout | 时间单位, 比如1s | 1s | N | 节点检测时间间隔,将该间隔内没发送心跳的节点清理掉最小值1s, 同时会结合心跳时间间隔,保证至少两倍于心跳间隔时间 |
local_ip | Y | NJet 本节点的 ip, 该ip 需要能够被集群内其它njet 节点访问 | ||
ctrl_port | N 如果是集群必须配置 | NJet 控制面监听端口 | ||
sync_port | N | NJet rsync daemon进程监听的端口,供远程同步配置文件使用 |
heartbeat_timeout与nodeclean_timeout 规则:
nodeclean_timeout >= 2 * heartbeat_timeout
两个timeout都必须大于等于1s
如果都没配置,则使用默认值
如果配置设置不合理,njet会自动设置两个超时时间符合上面三个规则
4.配置样例
4.1 通用配置:
stream {
server {
listen 238.255.253.254:5555 udp;
gossip zone=test:1m heartbeat_timeout=100ms nodeclean_timeout=1s local_ip=192.168.40.156 sync_port=8873 ctrl_port=8081 bridge_port=45891;
}
}
4.2 节点配置:
cluster_name helper; #同一个集群配置同一个name
node_name node1; #不通节点设置不同name
iface_internal ens192; #组播发送数据指定网卡,不指定则使用默认网卡
NOTE:
要保证集群所有机器节点时间一致