Skip to main content

MongoDB 副本集群搭建

概念

详细技术规格 请参考:Replication

MongoDB中的副本集是一组维护相同数据集的mongod进程。复制集提供了冗余和高可用性,并且是所有生产部署的基础。
本节介绍了MongoDB中的基于 Docker 副本集群搭建 配置。

deploy

概要

整个过程分为三步:

  1. 启动 mongod 实例
  2. 获取 实例 信息
  3. 在 实例中初始化集群配置

1. 启动实例

这里以两个副本为例 分别叫 mongo-primary,mongo-secondary

docker run -d --name mongo-primary mongo:4.2-bionic mongod --replSet "mongors" 
docker run -d --name mongo-secondary mongo:4.2-bionic mongod --replSet "mongors"

2. 获取 实例 信息

如果你使用图形化k8s 或有更复杂的网络设置 这一步可以被省略,仅需要找到正确的ip即可

docker inspect mongo-primary
docker inspect mongo-secondary

3. 初始化集群配置

3.1 进入容器

docker exec -it mongo-primary /bin/bash

3.2 登入到mongo

mongo

3.3 initiate

如果有认证 先进行认证

rs.initiate({"_id": "mongors", "members": [{"_id":0, "host":"mongo-primary:27017"}, {"_id":1, "host":"mongo-secondary:27017"}]})

应该会返回类似下面的信息:

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1624258568, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1624258568, 1)
}

ok 为 1 则认为成功

想要开启认证?

开启认证后 集群内通讯默认采用 keyfile,这个key需要预先生成 并在实例启动的时候作为参数输入

参考:mongodb-setting-security.keyFile

另外需要 在启动参数下 加入 --auth

-e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456  --auth

相关命令

查看副本集状态

rs.status()

查看数据库状态

db.conf()

副本集可读

rs.secondaryOk()

创建一个用户

示例为创建一个所有数据库可读写的用户

db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })