MongoDB 副本集群搭建
概念
详细技术规格 请参考:Replication
MongoDB中的副本集是一组维护相同数据集的mongod进程。复制集提供了冗余和 高可用性,并且是所有生产部署的基础。
本节介绍了MongoDB中的基于 Docker 副本集群搭建 配置。
deploy
概要
整个过程分为三步:
- 启动 mongod 实例
- 获取 实例 信息
- 在 实例中初始化集群配置
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" }] })