3

我已经建立了一个全新的分片 MongoDb(3 个配置服务器,3 个节点副本集)。按照网上的文档,真的没有任何问题。分片一个数据库和一个集合;mongos 连接到系统;一切正常。

我不了解的一件事是在分片系统中身份验证如何工作。我为所有 6 个节点设置了密钥文件。当我想添加一个用户时,我是从 mongos 做的吗?我是否必须登录到副本集中的每个节点并添加用户?我必须将用户添加到配置服务器吗?

特别是,我通过 mongos 创建了一个 MMS 用户,这允许 mms-monitoring-agent 连接到足以了解各种服务器的信息。但它实际上不能从其中任何一个中读取数据;我收到如下错误:

ask failure `serverStatus`. Err: `Failed command to mongoshard1:27017 running 
[{serverStatus 1} {recordStats 0} {locks 0}] against DB admin. 
Err: `not authorized on admin to execute command { serverStatus: 1, recordStats: 0, locks: 0 }`

当我通过 mongos 连接并使用管理员时;显示我看到的用户:

{
"_id" : "admin.mms",
"user" : "mms",
"db" : "admin",
"roles" : [
    {
        "role" : "readAnyDatabase",
        "db" : "admin"
    },
    {
        "role" : "clusterMonitor",
        "db" : "admin"
    }
]
}

我想我只是不了解用户需要添加到哪些实例。

4

1 回答 1

0

我希望以下步骤可以解决问题:

  1. 在不启用身份验证的情况下设置分片集群(甚至不使用密钥文件)。
  2. 使用 admin db,使用 mongoose 添加超级用户,如“siteUserAdmin”和“siteRootAdmin”。
  3. 然后使用 auth 重新启动每台机器(或 mongo 进程)并使用密钥文件。
  4. 连接 mogoose 并使用“siteRootAdmin”进行身份验证,并创建所有其他必需的用户并授予角色。
于 2016-07-02T19:09:50.700 回答