Развернуть 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++ реализацию для проверки).
Между прочим, маршрутизатор - это безголовый сервис, поэтому (при условии, что вы используете развертывание стека) у меня будет один сервис, который вы будете увеличивать и уменьшать, чтобы вам не нужно было размещать балансировщик нагрузки вперед (чтобы его можно было честно проверить)
Чтобы иметь более настраиваемую / масштабируемую докерскую службу, вы, вероятно, можете настроить работу, которую мы здесь выполняем:
- https://github.com/smartsdk/smartsdk-recipes/tree/master/recipes/data-management/context-broker/ha
- https://github.com/smartsdk/mongo-rs-controller-swarm
Конечно, не стесняйтесь делать запрос на тягу, если хотите.
Спасибо за все ваши советы. Вот мой файл стека 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.