简体   繁体   English

将 Fiware IoT Agent 连接到分片 MongoDB

[英]Connect Fiware IoT Agent to sharded MongoDB

I am using to following docker-compose file to setup my sharded MongoDB which has 3 shards, 3 config servers and 2 router instances:我正在使用 docker-compose 文件来设置我的分片 MongoDB,它有 3 个分片、3 个配置服务器和 2 个路由器实例:

version: "3.5"
services:

  mongorsn1:
    container_name: mongors1n1
    hostname: mongors1n1
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27017:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/data1:/data/db

  mongors1n2:
    container_name: mongors1n2
    hostname: mongors1n2
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27027:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/data2:/data/db

  mongors1n3:
    container_name: mongors1n3
    hostname: mongors1n3
    image: mongo
    command: mongod --shardsvr --replSet mongors1 --dbpath /data/db --port 27017
    ports:
      - 27037:27017
    expose:
      - "27017"
    environment:
      TERM: xterm
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/data3:/data/db
      
  mongocfg1:
    container_name: mongocfg1
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/config1:/data/db
      
  mongocfg2:
    container_name: mongocfg2
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/config2:/data/db
      
  mongocfg3:
    container_name: mongocfg3
    image: mongo
    command: mongod --configsvr --replSet mongors1conf --dbpath /data/db --port 27017
    environment:
      TERM: xterm
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mongo_cluster/config3:/data/db

  mongos1:
    container_name: mongos1
    image: mongo
    hostname: mongos1
    depends_on:
      - mongocfg1
      - mongocfg2
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
    ports:
      - 27019:27017
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro

  mongos2:
    container_name: mongos2
    image: mongo
    hostname: mongos2
    depends_on:
      - mongocfg1
      - mongocfg2
    command: mongos --configdb mongors1conf/mongocfg1:27017,mongocfg2:27017,mongocfg3:27017 --port 27017
    ports:
      - 27020:27017
    expose:
      - "27017"
    volumes:
      - /etc/localtime:/etc/localtime:ro

As you can see it is up and running correctly.如您所见,它已启动并正常运行。

docker exec -it mongos1 bash -c "echo 'sh.status()' | mongo "
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f00e3ac7-e114-40b3-b7f8-0e5cf9c56e10") }
MongoDB server version: 4.4.6
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("609e21145937100b3f006e20")
  }
  shards:
        {  "_id" : "mongors1",  "host" : "mongors1/mongors1n1:27017,mongors1n2:27017,mongors1n3:27017",  "state" : 1 }
  active mongoses:
        "4.4.6" : 2
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
bye

Now here is the docker-compose file I use to connect Orion and the IoT Agent to my MongoDB shards.现在这里是 docker-compose 文件,我用于将 Orion 和 IoT 代理连接到我的 MongoDB 分片。

version: "3.5"
services:

  orion:
    image: atos/smbt/orion:2.5.2
    hostname: orion
    container_name: orion
    restart: unless-stopped
    ports:
      - "1026:1026"
    entrypoint:
      - /usr/bin/contextBroker
      - -fg 
      - -multiservice
      - -ngsiv1Autocast
      - -corsOrigin
      - __ALL
    command: -dbhost mongors1n1:27017,mongors1n2:27027,mongors1n3:27037 -rplSet mongors1 -logLevel ERROR -noCache
    healthcheck:
      test: curl --fail -s http://orion:1026/version || exit 1
    networks:
      - fiware_mongo_sharding_default
  
  iot-agent:
    image: atos/smbt/iotagent-ul:1.15.0
    hostname: iot-agent
    container_name: iot-agent
    restart: unless-stopped
    expose:
        - "4041"
        - "7896"
    ports:
        - "4041:4041"
        - "7896:7896"
    environment:
        - IOTA_CB_HOST=orion
        - IOTA_CB_PORT=1026
        - IOTA_NORTH_PORT=4041
        - IOTA_REGISTRY_TYPE=mongodb
        - IOTA_LOG_LEVEL=ERROR
        - IOTA_TIMESTAMP=true
        - IOTA_CB_NGSI_VERSION=v2
        - IOTA_AUTOCAST=true
        - IOTA_MONGO_HOST=mongors1n1
        - IOTA_MONGO_PORT=27017
        - IOTA_MONGO_DB=iotagentul
        - IOTA_HTTP_PORT=7896
        - IOTA_PROVIDER_URL=http://iot-agent:4041
    networks:
      - fiware_mongo_sharding_default      
  
networks:
  fiware_mongo_sharding_default:
    external: true

Orion is connected to MongoDB but with the IoT Agent I get the following error message. Orion 连接到 MongoDB 但使用 IoT 代理时,我收到以下错误消息。

time=2021-05-14T07:51:51.086Z | lvl=ERROR | corr=28202651-30e1-48dc-88a9-53de603e7e6d | trans=28202651-30e1-48dc-88a9-53de603e7e6d | op=IoTAgentNGSI.DbConn | from=n/a | srv=n/a | subsrv=n/a | msg=MONGODB-001: Error trying to connect to MongoDB: MongoNetworkError: failed to connect to server [mongos1:27019] on first connect [MongoNetworkError: connect ECONNREFUSED 172.20.0.9:27019] | comp=IoTAgent

I have tried different things such as:我尝试了不同的方法,例如:

- IOTA_MONGO_HOST=mongos1
- IOTA_MONGO_PORT=27019

but to no avail unfortunately.但不幸的是无济于事。 Is there something I am doing wrong?有什么我做错了吗?

Thanks in advance for your help.在此先感谢您的帮助。

I found the solution myself.我自己找到了解决方案。 What I was doing wrong is that the IoT Agent should be NOT be connected with a Sharded MongoDB as it only expects one Mongo instance.我做错的是物联网代理不应该与分片 MongoDB 连接,因为它只需要一个 Mongo 实例。 That instance is used to persist and retrieve IoT device created when you provision a sensor via the IoT Agent.该实例用于保存和检索通过 IoT 代理配置传感器时创建的 IoT 设备。 Device measurement are sent to the Orion Context Broket which will persist into the Sharded MongoDB.设备测量值被发送到 Orion Context Broket,它将持续到 Sharded MongoDB 中。 Hope it can help somebody else.希望它可以帮助别人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM