Mongodb 如何在elixir中连接到mongo副本群集

Mongodb 如何在elixir中连接到mongo副本群集,mongodb,erlang,elixir,replicaset,Mongodb,Erlang,Elixir,Replicaset,我创建了一个mongo副本集,我正试图从中连接elixir。我在副本集中创建了3个mongo实例,并在/etc/hosts中给出了主机名,因此,mongo终端中的一切工作正常,我能够正确连接mongo副本集。 我在NODE.JS中编写了代码,使用mongodb库从副本集中获取数据,它也工作得很好(据我所知,这意味着mongo服务器和本地服务器中的配置很好),但当我试图通过elixir连接它时,在连接到该副本集时会抛出错误 我正在使用以下库来连接它 https://github.com/ankhe

我创建了一个mongo副本集,我正试图从中连接elixir。我在副本集中创建了3个mongo实例,并在
/etc/hosts
中给出了主机名,因此,mongo终端中的一切工作正常,我能够正确连接mongo副本集。 我在
NODE.JS
中编写了代码,使用
mongodb
库从副本集中获取数据,它也工作得很好(据我所知,这意味着mongo服务器和本地服务器中的配置很好),但当我试图通过elixir连接它时,在连接到该副本集时会抛出错误

我正在使用以下库来连接它

https://github.com/ankhers/mongodb
正如在库中一样,作者建议使用以下配置

{:ok, pid} = Mongo.start_link(database: "test", seeds: "hostname1.net:27017", "hostname2.net:27017")
worker(Mongo, [[name: :mongo,database: "yatender", topology: "replica_set_no_primary",seeds: ["xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017"] ,pool: DBConnection.Poolboy]])
这是抛出语法错误

** (SyntaxError) iex:6: syntax error before: "hostname2.net:27017"
这是显而易见的,因为它是错误的

当我使用此配置时

{:ok, pid} = Mongo.start_link(database: "test", seeds: "hostname1.net:27017", "hostname2.net:27017")
worker(Mongo, [[name: :mongo,database: "yatender", topology: "replica_set_no_primary",seeds: ["xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017"] ,pool: DBConnection.Poolboy]])
注意:我已将主机地址更改为xxx,所以不要对此感到混淆

GenServer #PID<0.1436.0> terminating
** (stop) exited in: GenServer.call(#PID<0.1410.0>, 
{:server_description, %{address: "xxx.xxx.xxx.xxx:27017", arbiters: [], 
election_id: nil, error: nil, hosts: ["mongo.host1:27017", 
"mongo.host2:27017", "mongo.host3:27017"], 
last_update_time: -576460750248, last_write_date: %DateTime{calendar: 
Calendar.ISO, day: 26, hour: 6, microsecond: {0, 3}, minute: 47, month: 
7, second: 23, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, 
year: 2017, zone_abbr: "UTC"}, max_wire_version: 5, me: 
"mongo.host3:27027", min_wire_version: 0, op_time: %{"t" => 
2, "ts" => #BSON.Timestamp<6446967716292067329>}, passives: [], 
primary: "mongo.host2:27017", round_trip_time: 240, set_name: 
"rs0", set_version: 4, tag_set: %{}, type: :rs_secondary}}, 30000)
这个错误来了

    [warn]  Logger dropped 999 OTP/SASL messages as it exceeded the amount of 500 messages/second                                                                                    
** (EXIT from #PID<0.1410.0>) exited in: GenServer.call(#PID<0.1415.0>, 
{:server_description, %{address: "xxx.xxx.xxx.xxx:27017", arbiters: [], 
election_id: nil, error: nil, hosts: ["mongo.host1:27017", 
"mongo.host2:27017", "mongo.host3:27027"], 
last_update_time: -576460688733, last_write_date: %DateTime{calendar: 
Calendar.ISO, day: 26, hour: 6, microsecond: {0, 3}, minute: 58, month: 
7, second: 13, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, 
year: 2017, zone_abbr: "UTC"}, max_wire_version: 5, me: 
"mongo.host1:27017", min_wire_version: 0, op_time: %{"t" => 2, 
"ts" => #BSON.Timestamp<6446970508020809729>}, passives: [], primary: 
"mongo.host2:27017", round_trip_time: 42, set_name: "rs0", 
set_version: 4, tag_set: %{}, type: :rs_secondary}}, 30000)
** (EXIT) time out
所以我被困在这里,我不知道我错过了什么。请有人指导我如何处理这个问题,我错在哪里

经过这么多的试玩之后,请提前感谢

而不是服务器IP

{:ok, pid} = Mongo.start_link(database: "yatender", seeds: ["xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017"])
我们必须说出主人的名字

{:ok, pid} = Mongo.start_link(database: "yatender", seeds: ["mongo.host1:27017","mongo.host2:27017","mongo.host3:27017"])

我们也可以使用poolboy来处理这个问题。

我想建议使用种子,但这不是唯一的方法。也许您应该尝试连接到该副本集,就像连接到单个节点一样?(只是为了确保它工作正常)你确定每个节点都启动了吗?你认为这个问题可能与此有关吗?一切都很好,我可以在node.js中完美地完成一切,但我是elixir的新手,所以我被困在这里。此驱动程序可能与副本集有问题。也许你应该问问作者本人?在github seams上发布问题是个好主意。当然可以:)非常感谢您的帮助这听起来不太对。您应该能够使用ip:端口对的种子列表连接到集群。我只是能够在自己的集群上完成它。免责声明:我是当前的
mongodb
软件包维护者。