MongoDB如何知道副本集中的主DB服务器ip?
我在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如何知道副本集中的主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
它们是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实例并运行该rascalHi All,如何使用mongo命令行进行测试。由于我想使用mongo命令行进行测试,是否有任何方法可以使用mongo命令行连接副本集。如果您使用的是命令行,确保使用副本集连接进行连接,例如mongo“replSetName/member1:27017、member2:27017、member3:27017”。