我有 2 个虚拟机,两个虚拟机都运行 mongodb。我创建了一个用户和角色并添加了用于测试的数据。一切正常,直到我尝试设置副本集。当我运行 rs.initiate() 时,出现“...replSetHeartbeat 需要身份验证...”错误,如下所示。我可以通过传递 --host "nodeserver-hulk:27017"手动从 "hawkeye"连接到 "hulk"服务器。有什么想法吗?

系统

Ubuntu Server 18.04.4 LTS
Mongod v.4.2.3

rs.initiate 命令
rs.initiate(
   {
      _id: "r1",
      version: 1,
      members: [
         { _id: 0, host : "nodeserver-hulk:27017"},
         { _id: 1, host : "nodeserver-hawkeye:27017"}
      ]
   }
)

rs.initiate 错误
{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: nodeserver-hawkeye:27017 failed with command replSetHeartbeat requires authentication",
        "code" : 74,
        "codeName" : "NodeNotFound"
}


mongod.conf 文件(两台服务器相同)
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /mnt/mongo/data
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

#security:
security:
  authorization: 'enabled'
#operationProfiling:

#replication:
replication:
   replSetName: 'r1'

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:


显示用户命令
> show users
{
        "_id" : "admin.james",
        "userId" : UUID("3ed97f2e-de49-4b98-84c8-566b34805863"),
        "user" : "james",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                {
                        "role" : "dbOwner",
                        "db" : "admin"
                },
                {
                        "role" : "clusterAdmin",
                        "db" : "admin"
                },
                {
                        "role" : "readWriteAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}

最佳答案

您需要在安全配置中添加 keyFile,以便每个节点都可以针对其他节点进行身份验证。

https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/

security:
  keyFile: <path-to-keyfile>

关于运行 rs.initiate() 后 mongodb 副本集错误 "...replSetHeartbeat requires authentication...",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60269553/

10-11 13:08
查看更多