Deploy a MongoDB Cluster using Docker compose

Viewed 696

I'm trying to install mongo DB using docker compose file, i have created single EC2 instances to configure basic installation of docker engine and docker compose.

docker-compose.yml

version: '3.9'

services: 

    # setup MongoDB cluster for production
    mongo-replica-setup:
        container_name: mongo-setup
        image: 'mongo:4.2'
        restart: on-failure
        networks:
            - netApplication
        volumes:
        - ./.docker/mongodb/scripts/mongosetup.sh:/scripts/mongosetup.sh
        # entrypoint: ["bash"]
        entrypoint: ["bash", "/scripts/mongosetup.sh" ]
        env_file:
            - .env
        environment:
            MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
            MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
        depends_on:
            - mongo1
            - mongo2
            - mongo3

    mongo1:
        hostname: 'mongo1'
        container_name: 'mongo1'
        image: 'mongo:4.2'
        restart: 'on-failure'
        command: ["-f", "/etc/mongod.conf", "--port", "30001", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        expose: 
            - 30001
        ports: 
            - 30001:30001 
        networks: 
            - netApplication
        volumes:
            - mongoData1:/data/db
            - mongoLog1:/var/log/mongodb
            - ./.docker/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
            - ./.docker/mongodb/mongod.conf:/etc/mongod.conf
            - ./.docker/mongodb/file.key:/auth/file.key
        healthcheck:
            test: echo 'rs.status().ok' | mongo admin --port 30001 -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
            interval: 30s
            start_period: 60s
        env_file:
            - .env
        environment:
            MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
            MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
            MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}

    mongo2:
        hostname: 'mongo2'
        container_name: 'mongo2'
        image: 'mongo:4.2'
        command: ["-f", "/etc/mongod.conf","--port", "30002", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        restart: 'on-failure'
        expose: 
            - 30002
        ports: 
            - 30002:30002  
        networks: 
            - netApplication
        volumes:
            - mongoData2:/data/db
            - mongoLog2:/var/log/mongodb
            - ./.docker/mongodb/mongod.conf:/etc/mongod.conf
            - ./.docker/mongodb/file.key:/auth/file.key
        env_file:
            - .env
        healthcheck:
            test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
            interval: 30s
            start_period: 60s
        environment:
            MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
            MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
            MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        depends_on: 
            - mongo1

    mongo3:
        hostname: 'mongo3'
        container_name: 'mongo3'
        image: 'mongo:4.2'
        command: ["-f", "/etc/mongod.conf", "--port", "30003", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        restart: 'on-failure'
        expose: 
            - 30003
        ports: 
            - 30003:30003  
        networks: 
            - netApplication
        volumes:
            - mongoData3:/data/db
            - mongoLog3:/var/log/mongodb
            - ./.docker/mongodb/mongod.conf:/etc/mongod.conf
            - ./.docker/mongodb/file.key:/auth/file.key
        env_file:
            - .env
        healthcheck:
            test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
            interval: 30s
            start_period: 60s
        environment:
            MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
            MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
            MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        depends_on: 
            - mongo1

volumes: 
    mongoData1:
    mongoData2:
    mongoData3:
    mongoLog1:
    mongoLog2:
    mongoLog3:

networks: 
    netApplication:

dev.env

MONGO_URL=mongodb://mongodb:27017
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=admin
MONGO_INITDB_DATABASE=cms
MONGO_INITDB_USERNAME=cms-user
MONGO_INITDB_PASSWORD=cms-pass
MONGO_REPLICA_SET_NAME=rs0

pwd

.docker/mongodb/mongod.conf

# mongod.conf
 
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
 
# Where and how to store data.
storage:
  dbPath: /data/db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:
 
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
 
# network interfaces
# net:
#   port: 27017
#   bindIp: 127.0.0.1
 
 
# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
 
security:
  authorization: enabled
 
#operationProfiling:
 
#replication:
 
#sharding:
 
## Enterprise-Only Options:
 
#auditLog:
 
#snmp:

mongosetup.sh

#!/bin/bash

MONGODB1=mongo1
MONGODB2=mongo2
MONGODB3=mongo3

echo "**********************************************" ${MONGODB1}
echo "Waiting for startup.."
sleep 30
echo "done"

echo SETUP.sh time now: `date +"%T" `
mongo --host ${MONGODB1}:30001 -u ${MONGO_INITDB_ROOT_USERNAME} -p ${MONGO_INITDB_ROOT_PASSWORD} <<EOF
var cfg = {
    "_id": "rs0",
    "protocolVersion": 1,
    "version": 1,
    "members": [
        {
            "_id": 0,
            "host": "${MONGODB1}:30001",
            "priority": 2
        },
        {
            "_id": 1,
            "host": "${MONGODB2}:30002",
            "priority": 0
        },
        {
            "_id": 2,
            "host": "${MONGODB3}:30003",
            "priority": 0,
        }
    ]
};
rs.initiate(cfg, { force: true });
rs.secondaryOk();
db.getMongo().setReadPref('primary');
rs.status();
EOF

when we are trying to start docker compose i'm getting below logs container keep restring

docker-compose up -d
Creating network "devcontainers-mongodb-replica-set-with-docker_netApplication" with the default driver
Creating mongo1 ... done
Creating mongo2 ... done
Creating mongo3 ... done
Creating mongo-setup ... done
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker# docker-compose ps
   Name                  Command                       State                                    Ports
------------------------------------------------------------------------------------------------------------------------------
mongo-setup   bash /scripts/mongosetup.sh      Up                      27017/tcp
mongo1        docker-entrypoint.sh -f /e ...   Restarting
mongo2        docker-entrypoint.sh -f /e ...   Restarting
mongo3        docker-entrypoint.sh -f /e ...   Up (health: starting)   27017/tcp, 0.0.0.0:30003->30003/tcp,:::30003->30003/tcp
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker#
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker#
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker# docker-compose ps
   Name                  Command                 State        Ports
---------------------------------------------------------------------
mongo-setup   bash /scripts/mongosetup.sh      Up           27017/tcp
mongo1        docker-entrypoint.sh -f /e ...   Restarting
mongo2        docker-entrypoint.sh -f /e ...   Restarting
mongo3        docker-entrypoint.sh -f /e ...   Restarting
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker#  docker-compose logs
Attaching to mongo-setup, mongo3, mongo2, mongo1
mongo-setup            | ********************************************** mongo1
mongo-setup            | Waiting for startup..
mongo-setup            | done
mongo-setup            | SETUP.sh time now: 03:44:22
mongo-setup            | MongoDB shell version v4.2.17
mongo-setup            | connecting to: mongodb://mongo1:30001/?compressors=disabled&gssapiServiceName=mongodb
mongo-setup            | 2021-10-23T03:44:22.386+0000 E  QUERY    [js] Error: **couldn't connect to server mongo1:30001, connection attempt failed**: SocketException: Error connecting to mongo1:30001 (127.0.0.1:30001) :: caused by :: Connection refused :
mongo-setup            | connect@src/mongo/shell/mongo.js:353:17
mongo-setup            | @(connect):2:6
mongo-setup            | 2021-10-23T03:44:22.388+0000 F  -        [main] exception: connect failed
mongo-setup            | 2021-10-23T03:44:22.388+0000 E  -        [main] exiting with code 1
mongo-setup            | ********************************************** mongo1
mongo-setup            | Waiting for startup..

Added host entry inside the EC2 vm, still not able to resolve the hostname. cloud you please some one help me on this.

vi /etc/hosts

127.0.0.1 localhost mongo1 mongo2 mongo3
0 Answers
Related