Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb副本集错误“;。。。replSetHeartbeat需要身份验证…“;在运行rs.initiate()之后_Mongodb_Replication_Mongo Shell - Fatal编程技术网

mongodb副本集错误“;。。。replSetHeartbeat需要身份验证…“;在运行rs.initiate()之后

mongodb副本集错误“;。。。replSetHeartbeat需要身份验证…“;在运行rs.initiate()之后,mongodb,replication,mongo-shell,Mongodb,Replication,Mongo Shell,我有两个虚拟机,两个虚拟机上都运行mongodb。我已经创建了一个用户和角色,并添加了用于测试的数据。在我尝试设置复制集之前,一切都正常。当我运行rs.initiate()时,会出现下面所示的“…replSetHeartbeat需要身份验证…”错误。我可以通过传递主机“nodeserver-hulk:27017”从“鹰眼”手动连接到“绿巨人”服务器。有什么想法吗 系统 Ubuntu Server 18.04.4 LTS Mongod v.4.2.3 启动命令 rs.initiate( {

我有两个虚拟机,两个虚拟机上都运行mongodb。我已经创建了一个用户和角色,并添加了用于测试的数据。在我尝试设置复制集之前,一切都正常。当我运行rs.initiate()时,会出现下面所示的“…replSetHeartbeat需要身份验证…”错误。我可以通过传递主机“nodeserver-hulk:27017”从“鹰眼”手动连接到“绿巨人”服务器。有什么想法吗

系统

Ubuntu Server 18.04.4 LTS
Mongod v.4.2.3
启动命令

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

{
        "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文件(两台服务器相同)

显示用户命令

> 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
,以便每个节点可以针对其他节点进行身份验证

安全性:
密钥文件:

这解决了问题!。我只补充说,它仅对密钥文件身份验证有效:如果要使用x509证书而不是密钥文件(这是另一种可能)进行内部身份验证,则需要以以下方式配置:
> 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"
        ]
}

security:
  keyFile: <path-to-keyfile>