边缘连接高可用

边缘连接服务(edge-connection)集群

边缘连接服务是负责设备层的设备连接,数据采集,属性读写,属性计算,报警等功能,其实现较为独立,集群功能不依赖spring cloud服务实现,引入zookeeper作为边缘采集服务的注册,配置和控制调度中心,下图以两个节点实例的集群示意其架构和故障转移实现:

  1. 图中以两个edge-connection服务实例为例,最少需要2个节点实现高可用,可增加更多的节点扩展服务实例
  2. edge-connection服务启动后,会将实例信息注册到ZooKeeper集群,ZooKeeper根据实例信息,选举产生Leader节点,如果edge-connection实例1,Leader节点是不确定的,其他节点都有可能选举为Leader节点
  3. Leader节点实例根据当前所有的设备配置信息,将设备均匀的分配各个实例节点,目前分配策略采用平均分配的方式,如果系统连接有5个设备,将设备1,2,3分配给实例1,设备4,5分配给实例2,达到平均分配的效果,设备分配的过程也是随机的,不是固定不变的
  4. 当集群中有节点发生异常时,比如edge-connection实例1掉线,ZooKeeper集群会触发选举过程,重新进行leader选举,选举出来的Leader节点(示例中的实例2)重新执行步骤3的设备配置分配过程,将设备重新均匀分配到所有存在的实例中,示例中,edge-connection实例1分配到了所有5个设备的配置
  5. 当edge-connection实例1重新上线时,ZooKeeper集群会触发选举过程,选举完成后,同样也是执行步骤3配置分配过程,将设备配置均匀分配到各个实例上

边缘连接服务(edge-connection)集群部署

边缘连接服务在部署时,需要配置集群相关的两个选项,在application.yml中配置如下:

iot:
    id: 1
    name: Edge Connection Service1
    cluster:
        enable: false
        server: 192.168.1.101:2181;192.168.1.102:2181;192.168.1.103:2181
名称 说明 默认值
iot.id 节点id,iot.cluster.enable为true时必须设置,保证每个节点实例id不一样 1
iot.name 节点名称,集群方式部署时,可设置为不同的名称 Edge Connection Service
iot.cluster.enable 是否启用cluster功能,集群方式部署时,设置为true false
iot.cluster.server 集群控制中心地址,目前为ZooKeeper地址,多个url地址中间用;隔开 127.0.0.1:2181

边缘连接服务部署时,需要进行以上两个选项的设置,同样的,对边缘连接服务存在API调用的服务,同样需要配置这两个选项,目前依赖边缘连接服务的服务有edge-management,data-process服务

部署前提条件

  1. 准备两个服务节点(ip地址信息根据实际部署环境进行对应调整)
节点1: 192.168.1.101
节点2: 192.168.1.102
  1. ZooKeeper集群已经部署完成

ZooKeeper集群url为:192.168.1.101:2181;192.168.1.102:2181;192.168.1.103:2181

  1. rabbitmq服务已经部署完成

rabbitmq: 以docker的形式运行,container名称为rabbitmq,端口5672,用户名和密码为 guest/guest

docker部署边缘连接服务集群

节点1上运行:

docker run -d --name edge-management --restart always --net iot \
    -p 9800:9800 \
    -v /opt/setting:/app/setting -v /opt/log:/opt/log -v /opt/plugins:/app/plugins \
    -e JAVA_OPTS=" \
        -Dserver.port=9800 \
        -Diot.id=1 \
        -Diot.name=Edge Connection Servcie 1 \
        -Diot.cluster.enable=true \
        -Diot.cluster.server=192.168.1.101:2181;192.168.1.102:2181;192.168.1.103:2181 \
        -Drabbitmq.host=rabbitmq \
        -Drabbitmq.port=5672 \
        -Drabbitmq.username=guest \
        -Drabbitmq.password=guest \
        -Dlogging.file.name=/opt/log/equip-connection.log \
        -Diot.setting.path=/app/setting \
        -Dlogging.level.com.hvisions.iot.connection.collection=info \
        -Dlogging.level.com.hvisions.iot=debug \
        -Dlogging.level.com.hvisions.iot.drivers.manager.Subscriber=info \
        -Dlogging.level.com.hvisions.iot.connection.collection.taskDetail.AlarmProcess=info \
        -Dlogging.level.org.reflections=error \
        -XX:+HeapDumpOnOutOfMemoryError \
        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999 \
        -Diot.setting.syncAtStart=true \
        -Diot.setting.peroidStartDelay=0 \
        -Diot.command.type=MQ \
        -Dbroker.mqtt.url=tcp://rabbitmq:1883 \
        -Dbroker.mqtt.clientId=field-collection-edge \
        -Xmx512m \
    " \
    harbor.hipermatrix.com:10300/edge/edge-connection:1.1.15 

节点1上配置iot.id为1,iot.cluster.enable为true启用集群功能

节点2上运行:

docker run -d --name edge-management --restart always --net iot \
    -p 9800:9800 \
    -v /opt/setting:/app/setting -v /opt/log:/opt/log -v /opt/plugins:/app/plugins \
    -e JAVA_OPTS=" \
        -Dserver.port=9800 \
        -Diot.id=2 \
        -Diot.name=Edge Connection Servcie 2 \
        -Diot.cluster.enable=true \
        -Diot.cluster.server=192.168.1.101:2181;192.168.1.102:2181;192.168.1.103:2181 \
        -Drabbitmq.host=rabbitmq \
        -Drabbitmq.port=5672 \
        -Drabbitmq.username=guest \
        -Drabbitmq.password=guest \
        -Dlogging.file.name=/opt/log/equip-connection.log \
        -Diot.setting.path=/app/setting \
        -Dlogging.level.com.hvisions.iot.connection.collection=info \
        -Dlogging.level.com.hvisions.iot=debug \
        -Dlogging.level.com.hvisions.iot.drivers.manager.Subscriber=info \
        -Dlogging.level.com.hvisions.iot.connection.collection.taskDetail.AlarmProcess=info \
        -Dlogging.level.org.reflections=error \
        -XX:+HeapDumpOnOutOfMemoryError \
        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999 \
        -Diot.setting.syncAtStart=true \
        -Diot.setting.peroidStartDelay=0 \
        -Diot.command.type=MQ \
        -Dbroker.mqtt.url=tcp://rabbitmq:1883 \
        -Dbroker.mqtt.clientId=field-collection-edge \
        -Xmx512m \
    " \
    harbor.hipermatrix.com:10300/edge/edge-connection:1.1.15 

节点1上配置iot.id为2,iot.cluster.enable为true启用集群功能

windows部署边缘连接服务集群

2023-09-13
0