我正在尝试初始化mongo副本集模式并向其中添加两个节点(群集服务),我正在使用docker-compose 3.4我正在使用在ansible剧本(版本2.7.10)上执行的脚本外壳
以下代码分别是docker-compose,ansible剧本和shell脚本:
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剧本:
########################################################## # 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"
该脚本应该使用群集服务mongo:27017(它是主副本)来初始化mongodb的副本集模式,并向其中添加服务mongo02:27018和mongo03:27019,但它只使用第一个服务mongo进行了初始化: 27017,当我尝试手动添加节点时:
rs.add({host:"mongo02:27018",priority:0.5});
我收到此错误
{ "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") } } }
请提供任何建议
我正在尝试初始化一个mongo副本集模式,并向其中添加两个节点(swarm服务),我正在使用docker-compose 3.4,我正在一个脚本外壳上执行脚本(在2.7版本上执行)。 10)...
我更喜欢通过同时定义副本集的所有参数来初始化副本集。即,调用init并加在一起...