Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
配置MongoDB群集_Mongodb_Docker_Cluster Computing_Mongodb Replica Set - Fatal编程技术网

配置MongoDB群集

配置MongoDB群集,mongodb,docker,cluster-computing,mongodb-replica-set,Mongodb,Docker,Cluster Computing,Mongodb Replica Set,我应该配置一个包含两个节点的mongodb集群。每个节点都应该复制所有数据。如果一台服务器死亡,则另一台应假定为主服务器 在配置集群之前,我正在使用docker实例进行本地测试以对其进行配置,我应该有至少3个MongoDB实例。对吗 首先,我用docker创建了树实例,我将实例1配置为主实例。下面的代码是我的docker compose和配置脚本 Docker编写: version: '3' services: mongo-2: container_name: mongo

我应该配置一个包含两个节点的mongodb集群。每个节点都应该复制所有数据。如果一台服务器死亡,则另一台应假定为主服务器

在配置集群之前,我正在使用docker实例进行本地测试以对其进行配置,我应该有至少3个MongoDB实例。对吗

首先,我用docker创建了树实例,我将实例1配置为主实例。下面的代码是我的docker compose和配置脚本

Docker编写:

version: '3'
services:
    mongo-2:
        container_name: mongo-2
        image: mongo:4
        ports:
            - 30102:27017
        command: mongod --replSet cnf-serv --port 27017 --oplogSize 16 --bind_ip_all
        restart: always

    mongo-3:
        container_name: mongo-3
        image: mongo:4
        ports:
            - 30103:27017
        command: mongod --replSet cnf-serv --port 27017 --oplogSize 16 --bind_ip_all
        restart: always 

    mongo-1:
        container_name: mongo-1
        image: mongo:4
        ports:
            - 30101:27017
        command: mongod --replSet cnf-serv --port 27017 --oplogSize 16 --bind_ip_all
        links:
            - mongo-2:mongo-2
            - mongo-3:mongo-3
        restart: always

    mongo-setup:
        container_name: mongo-setup
        image: mongo:4
        depends_on:
            - mongo-1
            - mongo-2
            - mongo-3
        links:
            - mongo-1:mongo-1
            - mongo-2:mongo-2
            - mongo-3:mongo-3
        volumes:
            - ./scripts:/scripts
        environment: 
            - MONGO1=mongo-1
            - MONGO2=mongo-2
            - MONGO3=mongo-3
            - RS=cnf-serv
            - PORT=27017
        entrypoint: [ "/scripts/setup.sh" ]
配置脚本:

#!/bin/bash 

mongodb1=`getent hosts ${MONGO1} | awk '{ print $1 }'`
mongodb2=`getent hosts ${MONGO2} | awk '{ print $1 }'`
mongodb3=`getent hosts ${MONGO3} | awk '{ print $1 }'`

port=${PORT:-27017}

echo "Waiting for startup.."
until mongo --host ${mongodb1}:${port} --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)' &>/dev/null; do
printf '.'
sleep 1
done

echo "Started.."

echo setup.sh time now: `date +"%T" `
mongo --host ${mongodb1}:${port} <<EOF
var cfg = {
        "_id": "${RS}",
        "protocolVersion": 1,
        "members": [
            {
                "_id": 100,
                "host": "${mongodb1}:${port}"
            },
            {
                "_id": 101,
                "host": "${mongodb2}:${port}"
            },
            {
                "_id": 102,
                "host": "${mongodb3}:${port}"
            }
        ]
    };
    rs.initiate(cfg, { force: true });
    rs.reconfig(cfg, { force: true });
EOF
#/bin/bash
mongodb1=`getenthosts${MONGO1}| awk'{print$1}'`
mongodb2=`getenthosts${MONGO2}| awk'{print$1}'`
mongodb3=`getenthosts${MONGO3}| awk'{print$1}'`
端口=${port:-27017}
回显“等待启动…”
直到mongo--host${mongodb1}:${port}--eval'退出(db.runCommand({ping:1}).ok?0:2)&>/dev/null;做
printf''
睡眠1
完成
echo“已启动…”
echo setup.sh现在的时间:`date+%T'`

mongo——主机${mongodb1}:${port}一个2节点副本集不会有太大帮助;如果其中一个节点失败,那么另一个节点就不能作为主要节点接管,因为它无法在选举中获得多数票。您可以在第二个节点上获得数据的完整副本,但为了充分利用副本集(冗余和高可用性),您需要添加第三个节点。

在setup.sh中等待几秒钟。在容器成功启动并显示可供依赖者使用后,Mongodb需要一些时间启动并开始侦听端口。