首页 > 解决方案 > 当 mongodb 实例作为 SECONDARY 添加到副本集时,本地用户和角色会发生什么?

问题描述

好吧,我正在将我的独立 mongo 部署转换为 3 成员副本集。为了加快速度,我已将数据目录从mongo1.example.com复制到其他 2 个虚拟机(mongo2.example.commongo3.example.com),但我想知道:

  1. 用户和角色也要复制吗?
  2. 如果是,在我添加到副本集后它们会发生什么?
  3. 如果我从 RS 中删除mongo2.example.com并将其转换为独立的,我可以使用添加到 RS 之前的凭据将任何客户端连接到mongo2.example.commongo3.example.com吗?
  4. 如果我将用户添加到主要用户,我是否必须在每个成员中添加它?

谢谢!

标签: mongodb

解决方案


一些非常好的问题。

用户和角色也要复制吗?

是的,用户记录和角色信息存储在管理数据库中。如果您复制整个数据目录,那么您也在复制这些目录。

如果是,在我添加到副本集后它们会发生什么?如果我将用户添加到主要用户,我是否必须将其添加到每个成员中?

如果您尝试将任何数据写入主副本集成员以外的副本集成员,则会收到错误消息。

在副本集中,添加到除 之外的数据库中的文档local,包括用户数据,都记录在 oplog 中并复制到辅助节点。

如果我从 RS 中删除 mongo2.example.com 并将其转换为独立的,我可以使用添加到 RS 之前的凭据将任何客户端连接到 mongo2.example.com 或 mongo3.example.com 吗?

如果将副本集成员转换为独立成员,它会保留之前拥有的所有数据,包括用户记录和角色。

如果将包含数据或用户记录的节点添加到副本集中,所有预先存在的数据将被丢弃并替换为副本集中的数据。如果您随后从副本集中删除此节点,它将拥有它在成为成员时所做的数据和用户,任何以前的数据都将无法挽回地丢失。


推荐阅读