陷入恶性循环。正如 MongoDB 官方文档建议的那样,副本集成员应使用域名而不是 IP 地址。正在努力实现这一点。我所有成为 RS 成员的 mongos 都有域名,我可以使用 Compass 连接到它们。我选择有实际数据可复制给其他人的那个并尝试:
他们目前都没有工作。核心问题是MongoDB副本集不能将localhost与域名混合使用。它给出了明显的错误。
尝试 rs.initiate 时,出现错误“未在启用复制的情况下启动”。好的,我去调整配置以启用复制并添加“rs0”。重新启动 mongo,登录到 shell,并且已经看到我已经是带有单个成员“127.0.0.1”的 rs0。尝试使用域名而不是 IP 地址进行 rs.initiate,显然会失败 - “已启动”。所以 MongoDB 没有机会使用自定义配置进行 rs.initialise ??
剩下的唯一选择是 rs.reconfig(new_config)
尝试使用 IP 地址:
rs0 [direct: primary] admin> rs.reconfig({_id: "rs0", members: [{_id: 0, host: "127.0.0.1"}] })
它有效。
尝试使用域名:
rs0 [direct: primary] admin> rs.reconfig({_id: "rs0", members: [{_id: 0, host: "myDomain.com"}] })
给出错误:在新配置中没有描述主机,副本集 rs0 的 {version: 5, term: 4} 映射到此节点
如果在 url 中添加 mongodb://
rs.reconfig({_id: "rs0", members: [{_id: 0, host: "mongodb://myDomain.com"}] })
给出错误::: 由 :: 引起:没有消耗整个字符串。
有什么想法吗??
您是否遵循了教程部署自我管理副本集?
一定是这样的:
rs.initiate( {
_id : "rs0",
members: [ { _id: 0, host: "myDomain.com:port" } ]
})
或者如果您有不止一名成员
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "myDomain1.com:port" },
{ _id: 1, host: "myDomain2.com:port" },
{ _id: 2, host: "myDomain3.com:port" }
]
})
如果使用默认的27017,可以跳过port
。它必须是主机名(更准确地说是接口的名称),而不是域。但是,我怀疑您的计算机是否有 .com
顶级域名。
我还怀疑您的部署是否已准备好使用 TLS/SSL 证书。通常,这是在您熟悉副本集和身份验证之后进行的。