Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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如何知道副本集中的主DB服务器ip?_Mongodb - Fatal编程技术网

MongoDB如何知道副本集中的主DB服务器ip?

MongoDB如何知道副本集中的主DB服务器ip?,mongodb,Mongodb,我在3个节点上运行mongodb副本集,让它们的ip为192.168.1.100、192.168.1.101192.168.1.102 现在,在当前副本集中192.168.1.100是主副本,192.168.1.101和192.168.1.102是次副本,我的应用程序连接192.168.1.100进行写操作。现在,两天后192.168.1.100关闭,mongodb选择192.168.1.101作为主副本。我的应用程序如何知道192.168.1.101是主要的 它们是mongodb中的任何浮动i

我在3个节点上运行mongodb副本集,让它们的ip为192.168.1.100、192.168.1.101192.168.1.102

现在,在当前副本集中192.168.1.100是主副本,192.168.1.101和192.168.1.102是次副本,我的应用程序连接192.168.1.100进行写操作。现在,两天后192.168.1.100关闭,mongodb选择192.168.1.101作为主副本。我的应用程序如何知道192.168.1.101是主要的


它们是mongodb中的任何浮动ip概念,因此当主服务器在副本集中切换时不需要手动操作。

当您的客户端连接到副本集中的任何给定成员(“种子”)时,它将查询副本集中的其他成员。因此,如果您连接到.100,它将查询集合并发现.101和.102也是集合的有效成员

如果驱动程序失去与.100的连接,它将运行已发现的其他种子并尝试找到连接。一旦它这样做了,它将查询副本集,找出当前主机是谁,并连接到它。这一切都是透明的

您可以通过登录到主机并运行以下命令来测试这一点:

rs.stepDown(60)
这将导致该机器作为主机退出(并导致选择新主机)。在60秒之内,它将没有资格再次当选。在主节点发生更改的情况下,您可以使用此选项测试应用程序的行为


设置副本集连接时,通常会指定要连接到的多个主机。这些都是驱动程序用来映射副本集的种子,这样当您配置的单个主机停机时重新启动应用程序时,就不会出现单点故障。不过,具体操作取决于您使用的驱动程序-请查看驱动程序文档。

显然,您应该能够使用“驱动程序”(mongo cli工具或首选语言绑定,例如node mongo)连接到副本集的任何成员。连接后,只需为集合中的其他成员询问当前mongod服务:

> db.runCommand("ismaster")
{
     "ismaster" : false,
     "secondary" : true,
     "hosts" : [
             "ny1.acme.com",
             "ny2.acme.com",
             "sf1.acme.com"
     ],
     "passives" : [
          "ny3.acme.com",
          "sf3.acme.com"
     ],
     "arbiters" : [
         "sf2.acme.com",
     ]
     "primary" : "ny2.acme.com",
     "ok" : true
}
对于我来说,重要的是不要连接到主设备。与OP一样,我希望减少查找辅助成员所需的连接数。这种方法应该适合您,但是这里的文档可能有点过时


要通过命令行运行来确定当前主服务器的IP:

rs.status().members.find(r=>r.state==1).name
根据应用程序的堆栈和驱动程序,您可能需要指定副本中的所有主机,以便自动选择主主机进行写入。

rs.isMaster().primary


如果您使用的是单行程序,请访问任何一个mongo实例并运行该rascal

Hi All,如何使用mongo命令行进行测试。由于我想使用mongo命令行进行测试,是否有任何方法可以使用mongo命令行连接副本集。如果您使用的是命令行,确保使用副本集连接进行连接,例如mongo“replSetName/member1:27017、member2:27017、member3:27017”。