如何在Docker上运行MongoDB sharding?MongoDB分片不';我不在码头工人那里工作

如何在Docker上运行MongoDB sharding?MongoDB分片不';我不在码头工人那里工作,mongodb,docker,docker-compose,sharding,Mongodb,Docker,Docker Compose,Sharding,我在Docker上有一个切分系统。我有一个带有副本集(P-S-a)的6个碎片,一个带有副本集的配置服务器,以及2个mongo服务器 当我关闭或移除碎片主容器时;中学在很短的一段时间内成为小学,然后又成为中学。我从未接触过数据库。 我总是犯错误 **Unable to reach primary for set shard01** 次要容器和仲裁器容器日志如下所示。 你能帮帮我吗 谢谢 辅助容器日志在下面 仲裁器容器日志如下所示 辅助节点无法成为主节点,因为仲裁器投了反对票,这可能与其无

我在Docker上有一个切分系统。我有一个带有副本集(P-S-a)的6个碎片,一个带有副本集的配置服务器,以及2个mongo服务器

当我关闭或移除碎片主容器时;中学在很短的一段时间内成为小学,然后又成为中学。我从未接触过数据库。 我总是犯错误

**Unable to reach primary for set shard01**
次要容器和仲裁器容器日志如下所示。 你能帮帮我吗

谢谢


辅助容器日志在下面



仲裁器容器日志如下所示



辅助节点无法成为主节点,因为仲裁器投了反对票,这可能与其无法解析DNS名称有关:

2020-07-14T14:06:39.449+0300 I选举[replexec-1151]VoteRequester(第二任期)收到了srd01仲裁人的反对票:27017,理由是“可以看到同等或更高优先级的健康初选(srd01初选:27017)”;响应消息:{term:2,voteGranted:false,原因:“可以看到具有相同或更高优先级的健康主服务器(srd01主服务器:27017)”,确定:1.0}

仲裁人投了反对票,因为它还不知道主服务器正在关闭:

2020-07-14T14:06:39.448+0300 I选举[conn10]发送投票响应:{任期:2,投票:错误,原因:“可以看到同等或更高优先级的健康小学(srd01小学:27017)}

2020-07-14T14:07:01.022+0300 I网络[ftdc]getaddrinfo(“srd01主”)失败:名称解析暂时失败

2020-07-14T14:07:01.024+0300 I REPL[replexec-1395]成员srd01 primary:27017现在处于RS_DOWN状态-无法在时间限制内获得连接

建议:

  • 在关闭主容器之前,运行命令并等待选择新的主容器
  • 检查主日志,查看它是否试图在关闭前退出
  • 除非绝对需要,否则不要使用仲裁者

次节点无法成为主节点,因为仲裁者投了反对票,这可能与它无法解析DNS名称有关:

2020-07-14T14:06:39.449+0300 I选举[replexec-1151]VoteRequester(第二任期)收到了srd01仲裁人的反对票:27017,理由是“可以看到同等或更高优先级的健康初选(srd01初选:27017)”;响应消息:{term:2,voteGranted:false,原因:“可以看到具有相同或更高优先级的健康主服务器(srd01主服务器:27017)”,确定:1.0}

仲裁人投了反对票,因为它还不知道主服务器正在关闭:

2020-07-14T14:06:39.448+0300 I选举[conn10]发送投票响应:{任期:2,投票:错误,原因:“可以看到同等或更高优先级的健康小学(srd01小学:27017)}

2020-07-14T14:07:01.022+0300 I网络[ftdc]getaddrinfo(“srd01主”)失败:名称解析暂时失败

2020-07-14T14:07:01.024+0300 I REPL[replexec-1395]成员srd01 primary:27017现在处于RS_DOWN状态-无法在时间限制内获得连接

建议:

  • 在关闭主容器之前,运行命令并等待选择新的主容器
  • 检查主日志,查看它是否试图在关闭前退出
  • 除非绝对需要,否则不要使用仲裁者

dockerize时,我们使用虚拟机的主机名来连接节点。 我们将虚拟机的主机名更改为Docker别名。问题解决了

旧的配置是

dockerize \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-arbiter.domainname:27017 -timeout 120s
dockerize \
-wait tcp://mongo-primary:27017 -timeout 120s \
-wait tcp://mongo-secondary:27017 -timeout 120s \
-wait tcp://mongo-arbiter:27017 -timeout 120s
新的配置是

dockerize \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-arbiter.domainname:27017 -timeout 120s
dockerize \
-wait tcp://mongo-primary:27017 -timeout 120s \
-wait tcp://mongo-secondary:27017 -timeout 120s \
-wait tcp://mongo-arbiter:27017 -timeout 120s

dockerize时,我们使用虚拟机的主机名来连接节点。 我们将虚拟机的主机名更改为Docker别名。问题解决了

旧的配置是

dockerize \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-arbiter.domainname:27017 -timeout 120s
dockerize \
-wait tcp://mongo-primary:27017 -timeout 120s \
-wait tcp://mongo-secondary:27017 -timeout 120s \
-wait tcp://mongo-arbiter:27017 -timeout 120s
新的配置是

dockerize \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-west.domainname:27017:27017 -timeout 120s \
-wait tcp://mongo-arbiter.domainname:27017 -timeout 120s
dockerize \
-wait tcp://mongo-primary:27017 -timeout 120s \
-wait tcp://mongo-secondary:27017 -timeout 120s \
-wait tcp://mongo-arbiter:27017 -timeout 120s

在关闭主电源之前,您是否已将其关闭?是的。我试过了。docker容器站mongo-shard01-primary和docker容器rm mongo-shard01-primary。错误仍然相同。在关闭主服务器之前是否已将其关闭?是。我试过了。docker容器站mongo-shard01-primary和docker容器rm mongo-shard01-primary。错误仍然相同。它抛出有关DNS的错误,因为它无法到达主服务器。我认为仲裁人投了反对票,因为我们的超时参数。当达到超时时,我们可以看到以下信息[replexec-1394]成员srd01 secondary:27017现在处于状态primary我尝试了replsetsteptown命令。一切正常。它抛出DNS错误,因为它无法到达主服务器。我认为仲裁人投了反对票,因为我们的超时参数。当达到超时时,我们可以看到以下信息[replexec-1394]成员srd01 secondary:27017现在处于状态primary我尝试了replsetsteptown命令。一切都很好。