Развернуть fiware-orion в определенных настройках mongodb

Я использую монгодб, оголенный и скопированный с докером. ( 3 виртуальные машины с 15 контейнерами). Мой Mongodb кластер полностью функционален.

Сейчас я пытаюсь подключить к нему Orion CB. Обычно я должен подключить его к маршрутизаторам Mongo, но он не работает.

Вот мой файл стека для MongoDB

version: "3.4"
services:

  db1-1:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm1]
    image: mongo:3.6.2
    hostname: db1-1
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
    ports:
      - "27011:27011"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db1-1:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs1 --shardsvr --dbpath /data/db --port 27011
    networks:
      STC-nw-mongo1:
        aliases:
          - db1-1

  db1-2:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm2]
    image: mongo:3.6.2
    hostname: db1-2
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary

    ports:
      - "27012:27012"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db1-2:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs1 --shardsvr --dbpath /data/db --port 27012
    networks:
      STC-nw-mongo1:
        aliases:
          - db1-2

  db1-3:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm3]
    image: mongo:3.6.2
    hostname: db1-3
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27013:27013"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db1-3:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs1 --shardsvr --dbpath /data/db --port 27013
    networks:
      STC-nw-mongo1:
        aliases:
          - db1-3

  db2-1:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm1]
    image: mongo:3.6.2
    hostname: db2-1
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
    ports:
      - "27021:27021"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db2-1:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs2 --shardsvr --dbpath /data/db --port 27021
    networks:
      STC-nw-mongo1:
        aliases:
          - db2-1

  db2-2:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm2]
    image: mongo:3.6.2
    hostname: db2-2
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27022:27022"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db2-2:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs2 --shardsvr --dbpath /data/db --port 27022
    networks:
      STC-nw-mongo1:
        aliases:
          - db2-2

  db2-3:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm3]
    image: mongo:3.6.2
    hostname: db2-3
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27023:27023"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db2-3:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs2 --shardsvr --dbpath /data/db --port 27023
    networks:
      STC-nw-mongo1:
        aliases:
          - db2-3

  db3-1:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm1]
    image: mongo:3.6.2
    hostname: db3-1
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27031:27031"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db3-1:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs3 --shardsvr --dbpath /data/db --port 27031
    networks:
      STC-nw-mongo1:
        aliases:
          - db3-1

  db3-2:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm2]
    image: mongo:3.6.2
    hostname: db3-2
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27032:27032"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db3-2:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs3 --shardsvr --dbpath /data/db --port 27032
    networks:
      STC-nw-mongo1:
        aliases:
          - db3-2

  db3-3:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm3]
    image: mongo:3.6.2
    hostname: db3-3
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "27033:27033"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/db3-3:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet iot-rs3 --shardsvr --dbpath /data/db --port 27033
    networks:
      STC-nw-mongo1:
        aliases:
          - db3-3

  dbconfig1:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm1]
    image: mongo:3.6.2
    hostname: dbconfig1
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
    ports:
      - "37001:37001"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbconfig1:/data/configdb
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet conf-serv --configsvr --port 37001
    networks:
      STC-nw-mongo1:
        aliases:
          - dbconfig1

  dbconfig2:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm2]
    image: mongo:3.6.2
    hostname: dbcoonfig2
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "37002:37002"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbconfig2:/data/configdb
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet conf-serv --configsvr --port 37002
    networks:
      STC-nw-mongo1:
        aliases:
          - dbconfig2

  dbconfig3:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm3]
    image: mongo:3.6.2
    hostname: dbconfig3
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
    ports:
      - "37003:37003"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbconfig3:/data/configdb
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongod --replSet conf-serv --configsvr --port 37003
    networks:
      STC-nw-mongo1:
        aliases:
          - dbconfig3

  dbrouter1:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm1]
    image: mongo:3.6.2
    hostname: dbrouter1
    ports:
      - "27997:27997"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbrouter1:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongos --configdb conf-serv/dbconfig1:37001,dbconfig2:37002,dbconfig3:37003 --port 27997 --bind_ip_all
    networks:
      STC-nw-mongo1:
        aliases:
          - dbrouter1

  dbrouter2:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm2]
    image: mongo:3.6.2
    hostname: dbrouter2
    ports:
      - "27998:27998"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbrouter2:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongos --configdb conf-serv/dbconfig1:37001,dbconfig2:37002,dbconfig3:37003 --port 27998 --bind_ip_all
    networks:
      STC-nw-mongo1:
        aliases:
          - dbrouter2

  dbrouter3:
    deploy:
      placement:
        constraints: [node.hostname == docker-vm3]
    image: mongo:3.6.2
    hostname: dbrouter3
    ports:
      - "27999:27999"
    volumes:
      - /var/lib/docker/config/STC-mongo1/data/dbrouter3:/data/db
      - /var/lib/docker/config/STC-mongo1/data/certificats:/etc/ssl/iot-certs
      - /var/lib/docker/config/STC-mongo1/config:/etc/config
    command: mongos --configdb conf-serv/dbconfig1:37001,dbconfig2:37002,dbconfig3:37003 --port 27999 --bind_ip_all
    networks:
      STC-nw-mongo1:
        aliases:
          - dbrouter3

networks:
  STC-nw-mongo1:

а вот и докер-сочинение моего ориона

version: '3.4'
services:

  orion1:
    deploy:
        placement:
          constraints: [node.hostname == docker-vm1]
    image: fiware/orion:latest
    hostname: orion1
    ports:
      - "1026:1026"
    volumes:
      - /var/lib/docker/config/STC-orion/config:/etc/sysconfig
    command: -dbhost "dbrouter1:27997,dbrouter2:27998,dbrouter3:27999" -rplSet "iot-rs1,iot-rs2,iot-rs3" -corsOrigin __ALL
    networks: 
      STC-nw-orion:
        aliases:
          - orion1

networks:
  STC-nw-orion:
    external:
      name: STC-mongo1_STC-nw-mongo1

Мой контейнер orion работает, но когда я просматриваю логи, у меня есть только эта информация:

docker logs -f STC-orion_orion1.1.iiv0xf6qe4pco4fk679b1s3i9 time=Wednesday 28 Feb 14:07:47 2018.732Z | lvl=ERROR | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=mongoConnectionPool.cpp[195]:mongoConnect | msg=Database Startup Error (cannot connect to mongo - doing 100 retries with a 1000 microsecond interval)

Спасибо за вашу помощь

3 ответа

Решение

Это сообщение в журнале в основном означает, что Орион не может подключиться к MongoDB. Вероятно, -rplSet "iot-rs1,iot-rs2,iot-rs3" не работает, так как ожидает только одно имя набора реплик.

Я не очень хорошо помню аспекты конфигурации конфигураций сегментированных MongoDB, в которых каждый шард реализован набором реплик, но я бы сказал, что имя набора реплик является внутренним аспектом в каждом шарде. Другими словами, процесс, обращающийся к mongos (в данном случае Context Broker), не должен знать о имени набора реплик, используемого внутри каждого сегмента.

Я бы рекомендовал начать с более простой установки, используя:

command: -dbhost dbrouter1:27997 -corsOrigin __ALL

Как только вы заработаете, попробуйте развиваться вместе со 2-м и 3-м монго одновременно. Однако, не уверен, будет ли драйвер Orion его поддерживать. Обратите внимание, что типичное развертывание мультимонго предполагает несколько экземпляров приложения (т. Е. 3 узла с CB), запускающих монго локально в каждом узле (то есть по одному монго в каждом из 3 узлов с CB, каждый CB связан со своими локальными монго).

Следующая ссылка может быть полезна (хотя я не уверен, что это моделирует тот же случай, который вы пытаетесь достичь).

Я не эксперт по шардингу, и я никогда не проверял его с Орионом, но с технической точки зрения, @fgalan прав.

При использовании шардинга монго доступ осуществляется через монго, которые действуют как маршрутизаторы, то есть они обладают знаниями через сервер конфигурации для маршрутизации записи и чтения в правильный кластер сегментов, что также означает, что они обрабатывают соединение с набором сегментированных реплик для клиент получает доступ к маршрутизаторам. поэтому вам не нужно указывать какой-либо репликационный набор, вам нужно только перечислить маршрутизаторы, к которым вы хотите подключиться (которые, вероятно, будут выбраны драйвером с циклическим подходом, но я не уверен, что вы должны проверить устаревший драйвер C++ реализацию для проверки).

Между прочим, маршрутизатор - это безголовый сервис, поэтому (при условии, что вы используете развертывание стека) у меня будет один сервис, который вы будете увеличивать и уменьшать, чтобы вам не нужно было размещать балансировщик нагрузки вперед (чтобы его можно было честно проверить)

Чтобы иметь более настраиваемую / масштабируемую докерскую службу, вы, вероятно, можете настроить работу, которую мы здесь выполняем:

Конечно, не стесняйтесь делать запрос на тягу, если хотите.

Спасибо за все ваши советы. Вот мой файл стека Orion.

version: '3.4'
services:

  orion1:
    deploy:
        placement:
          constraints: [node.hostname == docker-vm1]
    image: fiware/orion:latest
    hostname: orion1
    ports:
      - "1026:1026"
    command: -dbhost dbrouter1:27997 -corsOrigin __ALL
    networks: 
      STC-nw-orion:
        aliases:
          - orion1

  orion2:
    deploy:
        placement:
          constraints: [node.hostname == docker-vm2]
    image: fiware/orion:latest
    hostname: orion2
    ports:
      - "1027:1026"
    command: -dbhost dbrouter2:27998 -corsOrigin __ALL
    networks: 
      STC-nw-orion:
        aliases:
          - orion2

  orion3:
    deploy:
        placement:
          constraints: [node.hostname == docker-vm3]
    image: fiware/orion:latest
    hostname: orion3
    ports:
      - "1028:1026"
    command: -dbhost dbrouter3:27999 -corsOrigin __ALL
    networks: 
      STC-nw-orion:
        aliases:
          - orion3

networks:
  STC-nw-orion:
    external:
      name: STC-mongo1_STC-nw-mongo1

Теперь я настраиваю HAProxy для балансировки нагрузки. Следующий шаг - добавьте аутентификацию в мой специальный кластер MongoDB.

Другие вопросы по тегам