2017-02-12 7 views
2

Ich versuche ein mongodb replicaSet mit docker-compose zu konfigurieren, aber wenn ich den Master-Container stoppe, scheint es, dass es nicht an die sekundäre übergeben.replica Set mongo docker-komponieren

redis: 
image: redis 
ports: 
    - "6379:6379" 

mongo3: 
hostname: mongo3 
image: mongo 
entrypoint: [ "/usr/bin/mongod", "--replSet", "rs", "--journal","--dbpath","/data/db","--smallfiles", "--rest" ] 
volumes: 
    - ./data/mongo3:/data/db 
ports: 
    - "27018:27017" 
    - "28018:28017" 
restart: always 

mongo2: 
hostname: mongo2 
image: mongo 
entrypoint: [ "/usr/bin/mongod", "--replSet", "rs", "--journal","--dbpath","/data/db","--smallfiles", "--rest" ] 
volumes: 
    - ./data/mongo2:/data/db 
ports: 
    - "27019:27017" 
    - "28019:28017" 
restart: always 

mongo1: 
hostname: mongo1 
image: mongo 
entrypoint: [ "/usr/bin/mongod", "--replSet", "rs", "--journal","--dbpath","/data/db","--smallfiles", "--rest" ] 
volumes: 
    - ./data/mongo1:/data/db 
ports: 
    - "27017:27017" 
    - "28017:28017" 
links: 
- mongo2:mongo2 
- mongo3:mongo3 
restart: always 

web: 
build: . 
ports: 
    - "2000:2000" 
volumes: 
    - .:/vip 
links: 
    - redis 
    - mongo1 
    - mongo2 
    - mongo3 

nginx: 
restart: always 
build: ./nginx/ 
ports: 
    - "80:80" 
links: 
    - web:web 

mongosetup: 
image: mongo 
links: 
    - mongo1:mongo1 
    - mongo2:mongo2 
    - mongo3:mongo3 
volumes: 
    - ./scripts:/scripts 
entrypoint: [ "/scripts/setup.sh" ] 

setup.sh:

#!/bin/bash 

MONGODB1=`ping -c 1 mongo1 | head -1 | cut -d "(" -f 2 | cut -d ")" -f 1` 
MONGODB2=`ping -c 1 mongo2 | head -1 | cut -d "(" -f 2 | cut -d ")" -f 1` 
MONGODB3=`ping -c 1 mongo3 | head -1 | cut -d "(" -f 2 | cut -d ")" -f 1` 

echo "**********************************************" ${MONGODB1} 
echo "Waiting for startup.." 
until curl http://${MONGODB1}:28017/serverStatus\?text\=1 2>&1 | grep uptime | head -1; do 
    printf '.' 
    sleep 1 
done 

echo curl http://${MONGODB1}:28017/serverStatus\?text\=1 2>&1 | grep uptime | head -1 
echo "Started.." 


echo SETUP.sh time now: `date +"%T" ` 
mongo --host ${MONGODB1}:27017 <<EOF 
var cfg = { 
    "_id": "rs", 
    "version": 1, 
    "members": [ 
     { 
      "_id": 0, 
      "host": "${MONGODB1}:27017", 
      "priority": 2 
     }, 
     { 
      "_id": 1, 
      "host": "${MONGODB2}:27017", 
      "priority": 0 
     }, 
     { 
      "_id": 2, 
      "host": "${MONGODB3}:27017", 
      "priority": 0 
     } 
    ],settings: {chainingAllowed: true} 
}; 
rs.initiate(cfg, { force: true }); 
rs.reconfig(cfg, { force: true }); 
rs.slaveOk(); 
db.getMongo().setReadPref('nearest'); 
db.getMongo().setSlaveOk(); 
EOF 

Antwort

1

Ich würde Sie adivse einen Blick auf khezen/mongo haben.

version: '3' 

services: 

    replica1: 
    image: khezen/mongo:slim 
    deploy: 
     mode: replicated 
     replicas: 1 
     update_config: 
     parallelism: 1 
     delay: 10s 
     restart_policy: 
     condition: on-failure 
     palcement: 
     node.hostname: node-1 
    environment: 
     RS_NAME: shard1 
     SHARD_SVR: 'y' 
     AUTH: 'y' 
    volumes: 
     - /data/mongo/replica1:/data/db 
    networks: 
     - mongo_cluster 

    replica2: 
    image: khezen/mongo:slim 
    deploy: 
     mode: replicated 
     replicas: 1 
     update_config: 
     parallelism: 1 
     delay: 10s 
     restart_policy: 
     condition: on-failure 
     palcement: 
     node.hostname: node-2 
    environment: 
     RS_NAME: shard1 
     SHARD_SVR: 'y' 
     AUTH: 'y' 
    volumes: 
     - /data/mongo/replica2:/data/db 
    networks: 
     - mongo_cluster 

    replica3: 
    image: khezen/mongo:slim 
    deploy: 
     mode: replicated 
     replicas: 1 
     update_config: 
     parallelism: 1 
     delay: 10s 
     restart_policy: 
     condition: on-failure 
     palcement: 
     node.hostname: node-3 
    environment: 
     RS_NAME: shard1 
     SHARD_SVR: 'y' 
     MASTER: replica3 
     SLAVES: replica1 replica2 
     AUTH: 'y' 
    volumes: 
     - /data/mongo/replica3:/data/db 
    networks: 
     - mongo_cluster 

networks: 
    mongo_cluster: 
    driver: overlay 

Haftungsausschluss: Ich bin der Maintainer dieses Bildes

Sie können eine Mongo Replik über einen 3 Knoten Docker Schwarm mit der folgenden gesetzt einzusetzen.

Verwandte Themen