Mongodb 以Docker的方式部署多副本集(replSet)

准备工作:

  docker安装(如果需要,参考https://blog.csdn.net/nickDaDa/article/details/92816938

  拉取镜像(这里使用3.6版本测试)  

sudo docker pull mongo:3.6

  创建宿主机数据挂载目录 /data/mongo0  /data/mongo1  /data/mongo2

安装:

sudo docker run --name mongo0 -p 27017:27017 -v /data/mongo0/:/data/db/ -d mongo:3.6 --replSet "mongoRs" --bind_ip_all

sudo docker run --name mongo1 -p 37017:27017 -v /data/mongo1/:/data/db/ -d mongo:3.6 --replSet "mongoRs" --bind_ip_all

sudo docker run --name mongo2 -p 47017:27017 -v /data/mongo2/:/data/db/ -d mongo:3.6 --replSet "mongoRs" --bind_ip_all
sudo docker exec -it mongo0 /bin/bash 。进入到mongo0的容器内部
执行 mongo 。 连接到mongodb
执行:rs.initiate({

   _id : "mongoRs",

   members: [

      { _id: 0, host: "10.0.0.5:27017" },

      { _id: 1, host: "10.0.0.6:37017" },

      { _id: 2, host: "10.0.0.7:47017" }

   ]

});

返回OK即可,间隔10s,执行rs.status(); 可以看到集群关系

连接:

以nodejs为例,其它语言同理:

var dbclient;
var db;

// mongo config
var cfg = {
  "dbconn": "mongodb://宿主机IP:27017,宿主机IP:37017,宿主机IP:47017",
  "dbname": "db-name",
  "rsconf": {
    replicaSet: 'mongoRs',
    poolSize: 5,
    autoReconnect: true,
    useNewUrlParser: true 
  }
}

// connect
async function SetupConnection() {
  try {
    dbclient = await mongo.MongoClient.connect(cfg["dbconn"], cfg["rsconf"]);
    db = dbclient.db(cfg["dbname"]);
  } catch (error) {
    console.log(`Connect to mongodb error for ${error.message}`);
  }
}

测试:

  1. 程序连接成功之后,写入一条数据
  2. 以docker exec -it mongo0/1/2 /bin/bash 的方式分别进入三个容器,执行mongo命令连接之后查看,数据如果已经同步,则表示成功
  3. 如果在slave节点报错,不能查看,执行 rs.slaveOk(); 即可查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值