Mongodb 如何使用分子从一个实例访问另一个实例

Mongodb 如何使用分子从一个实例访问另一个实例,mongodb,vagrant,ansible,molecule,Mongodb,Vagrant,Ansible,Molecule,我正在尝试使用脚本创建mongodb集群。 我编辑主机是为了只拥有一个主主机和一个从主机。 我使用with来测试它 这是我的分子 ansible: playbook: 01_create_cluster.yml verbose: vvv inventory: hosts vagrant: platforms: - name: centos box: centos/7 providers: - name: virtualbox type: v

我正在尝试使用脚本创建mongodb集群。 我编辑主机是为了只拥有一个主主机和一个从主机。 我使用with来测试它

这是我的分子

ansible:
  playbook: 01_create_cluster.yml
  verbose: vvv
inventory: hosts
vagrant:
  platforms:
    - name: centos
      box: centos/7
  providers:
    - name: virtualbox
      type: virtualbox
      options:
        memory: 512
        cpus: 2
  instances:
    - name: mongo1
      ansible_groups:
        - mongo_servers
        - mongod_primary
        - mongod_slaves
      interfaces:
        - network_name: private_network
          type: static
          ip: 192.168.80.1
    - name: mongo2
      ansible_groups:
        - mongo_servers
        - mongod_primary
        - mongod_slaves
      interfaces:
        - network_name: private_network
          type: static
          ip: 192.168.80.2
这是
hosts
inventory-ansible文件:

[mongo_servers]
mongo1 mongod_port=27017
mongo2 mongod_port=27017

[mongod_primary]
mongo1 mongod_port=27017

[mongod_slaves]
mongo2 mongod_port=27017
当创建主服务器并在其上激活复制后,从服务器尝试连接到主服务器时,问题就会出现:

"MongoDB shell version v3.4.4", 
        "connecting to: mongodb://mongo1:27017/", 
        "2017-05-25T15:38:51.399+0000 I NETWORK  [thread1] getaddrinfo(\"mongo1\") failed: Name or service not known", 
        "2017-05-25T15:38:51.400+0000 E QUERY    [thread1] Error: couldn't initialize connection to host mongo1, address is invalid :", 
        "connect@src/mongo/shell/mongo.js:237:13", 
        "@(connect):1:6"
它不知道
mongo1
host

即使我添加了
/etc/hosts
关系

192.168.80.1 mongo1
它告诉我,
目标网络不可到达

如何解决并让每个虚拟机“看到”网络中的其他虚拟机

编辑

ping进入超时,telnet也进入

EDIT2

这是追踪路线

[vagrant@mongo2 ~]$ traceroute mongo1
traceroute to mongo1 (192.168.80.1), 30 hops max, 60 byte packets
 1  gateway (10.0.2.2)  0.191 ms  0.111 ms  0.063 ms
 2  192.168.93.254 (192.168.93.254)  0.614 ms  0.716 ms  0.710 ms
 3  10.17.254.1 (10.17.254.1)  3.410 ms  3.366 ms  3.316 ms
 4  93-57-16-193.ip162.fastwebnet.it (93.57.16.193)  5.409 ms  5.384 ms  5.340 ms
 5  93-54-33-65.ip127.fastwebnet.it (93.54.33.65)  21.192 ms  21.135 ms  21.084 ms
 6  10.2.7.101 (10.2.7.101)  10.390 ms  2.447 ms  2.318 ms
 7  10.254.20.77 (10.254.20.77)  2.228 ms 10.254.20.73 (10.254.20.73)  2.171 ms  2.045 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
[vagrant@mongo2 ~]$ 

我解决了在molecule.yml中添加两个其他配置的问题:

interfaces:
        - network_name: private_network
          type: static
          ip: 192.168.80.1
          auto_config: true
      options:
        append_platform_to_hostname: no


auto_config: true


现在,如果我ping其他虚拟机,它们将成功回复

我解决了在分子中添加另外两种构型的问题。yml:

interfaces:
        - network_name: private_network
          type: static
          ip: 192.168.80.1
          auto_config: true
      options:
        append_platform_to_hostname: no


auto_config: true


现在,如果我ping其他虚拟机,它们将成功回复

你能在secondary bash中
telnet mongo1 27017
吗?好的。请问您为什么要创建只有两个节点的副本集。根据MongoDB的建议,副本应至少有3个mongod节点,包括一个仲裁器。然而,这可能不是这个问题的原因。您能否在辅助服务器上运行
traceroute
命令以到达主服务器?此外,在主mongod主机上,
27017
端口是否已打开?很明显,虚拟机不会通过名称看到彼此,因此您可以在将主机添加到
/etc/hosts
之前删除其中的描述。这无关紧要,只会掩盖问题。现在您得到了一个“可到达的目的地网络”。在这种情况下,您要做的第一件事是
ping
,检查分配的地址。为什么问题中缺少这些信息?@AlexBlex我无法通过telnet进行连接。你能从辅助bash中
telnet mongo1 27017
吗?好的。请问您为什么要创建只有两个节点的副本集。根据MongoDB的建议,副本应至少有3个mongod节点,包括一个仲裁器。然而,这可能不是这个问题的原因。您能否在辅助服务器上运行
traceroute
命令以到达主服务器?此外,在主mongod主机上,
27017
端口是否已打开?很明显,虚拟机不会通过名称看到彼此,因此您可以在将主机添加到
/etc/hosts
之前删除其中的描述。这无关紧要,只会掩盖问题。现在您得到了一个“可到达的目的地网络”。在这种情况下,您要做的第一件事是
ping
,检查分配的地址。为什么问题中缺少这些信息?@Alexlex我无法通过telnet连接。