Я пытаюсь инициализировать режим установки реплики Монго и добавить к нему два узла (службы роя), я использую docker-compose 3.4
Я использую скрипт-оболочку, которую я выполняю на ANSIBLE playbook(версия 2.7.10)
Следующие фрагменты кода соответственно составляют docker-compose, ANSIBLE PlayBook и сценарий оболочки:
version: '3.4'
services:
mongo:
image: mongodb:4.0.9-debian8-1
command: mongod --smallfiles --replSet rs_mongo --port 27017
ports:
- 27017:27017
volumes:
- /opt/application/fwcwas/mongo/:/data/db
deploy:
replicas: 1
placement:
constraints:
- node.labels.mongo == true
environment:
MONGO_INITDB_ROOT_USERNAME: username
MONGO_INITDB_ROOT_PASSWORD: pwd
MONGO_REPLICATION_MODE: RS
MONGO_REPLICATION_REPLSETNAME: rs_mongo
networks:
- web
mongo02:
image: mongodb:4.0.9-debian8-1
command: mongod --smallfiles --replSet rs_mongo --port 27018
ports:
- 27018:27017
volumes:
- /opt/application/fwcwas/mongo02/:/data/db
deploy:
replicas: 1
placement:
constraints:
- node.labels.mongo == true
environment:
MONGO_INITDB_ROOT_USERNAME: username
MONGO_INITDB_ROOT_PASSWORD: pwd
MONGO_REPLICATION_MODE: RS
MONGO_REPLICATION_REPLSETNAME: rs_mongo
networks:
- web
mongo03:
image: mongodb:4.0.9-debian8-1
command: mongod --smallfiles --replSet rs_mongo --port 27019
ports:
- 27019:27017
volumes:
- /opt/application/fwcwas/mongo03/:/data/db
deploy:
replicas: 1
placement:
constraints:
- node.labels.mongo == true
environment:
MONGO_INITDB_ROOT_USERNAME: username
MONGO_INITDB_ROOT_PASSWORD: pwd
MONGO_REPLICATION_MODE: RS
MONGO_REPLICATION_REPLSETNAME: rs_mongo
networks:
- web
networks:
web:
external:
name: mongo_network
Ansible playbook:
##########################################################
# Create a mongo replicaset using a script shell
##########################################################
- name: Ensure replicaset rs_mongo exist
shell: chmod +x init_replica_set.sh
args:
chdir: /home/docker/mongo/
when:
- ansible_host in groups['manager_launcher']
Оболочка сценария, которая инициализирует режим установки реплик и добавляет реплики mongo (init_replica_set.sh):
#!/bin/bash
echo "Intializing replica set on master"
replicate='rs.initiate();sleep(1000);cfg=rs.conf();cfg.members[0].host="mongo:27017";rs.reconfig(cfg);rs.add({host:"mongo02:27018",priority:0.5});rs.add({host:"mongo03:27019",priority:0.5});rs.status();'
docker exec -it $(docker ps -qf "name = mongo_mongo.1") bash -c "echo '$replicate' | mongo --port 27017 -u username -p pwd"
Скрипт, предназначенный для инициализации режима установки реплик mongodb с помощью службы swarm mongo: 27017, которыйявляется основной репликой и добавляет к ней службы mongo02: 27018 и mongo03: 27019, но она выполняла инициализацию только с первой службой mongo: 27017, и когда я пытался добавить узлы вручную:
rs.add({host:"mongo02:27018",priority:0.5});
Iполучил эту ошибку
{
"operationTime" : Timestamp(1571407148, 1),
"ok" : 0,
"errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: mongo:27017; the following nodes did not respond affirmatively: mongo02:27018 failed with Error connecting to mongo02:27018 (10.0.2.24:27018) :: caused by :: Connection refused",
"code" : 74,
"codeName" : "NodeNotFound",
"$clusterTime" : {
"clusterTime" : Timestamp(1571407148, 1),
"signature" : {
"hash" : BinData(0,"IAMJw09rJWNAcRle0WWba1eE8os="),
"keyId" : NumberLong("6749137026550857730")
}
}
}
любой совет, пожалуйста