如何在Elixir中连接到Mongo副本集群

Yatender辛格

我创建了一个mongo副本集,试图从中连接长生不老药。我在副本集中创建了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")

引发语法错误。

** (SyntaxError) iex:6: syntax error before: "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)

当我在worker中使用以下配置时

{:ok, pid} = Mongo.start_link(database: "yatender", seeds: ["xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017","xxx.xxx.xxx.xxx:27017"])

这个错误来了

    [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

当我直接连接到不属于副本集的独立mongodb服务器时,它可以正常工作。

# Starts an unpooled connection
{:ok, conn} = Mongo.start_link(database: "test",hostname: Application.get_env(:api, :api_env)[:mongo_host])

# Gets an enumerable cursor for the results
cursor = Mongo.find(conn, "test-collection", %{})

cursor
|> Enum.to_list()
|> IO.inspect

所以我被困在这里,我不知道自己在想什么。请有人指导我在错误的地方如何解决此问题。

提前致谢

Yatender辛格

经过如此多的尝试和尝试,而不是服务器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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试连接到 Mongo 中的副本集时出错

使用mongoose将Node.js连接到MongoDB中的分片副本集群的正确方法

Pymongo将无法连接到Mongo副本集

如何连接到 Kubernetes 上的 MongoDB 副本集

您如何在Kubernetes上设置Mongo副本集?

连接到远程dockerized MongoDB副本集

使用mgo连接到副本集

猫鼬连接到副本集

无法使用 Node.js 连接到 Mongo 3.6 副本集

为什么我不能使用mongo shell连接到副本集?

如何使用Ansible设置mongo副本集?

在CircleCI作业中创建Mongo副本集

如何在docker compose中运行mongodb副本集

如何在 microk8s 集群上部署 Mongodb 副本集

MongoDB 错误:连接到 mongo 副本集时无法访问集 [set_name] 的主服务器

Spring Boot连接到使用Arbiter运行的MongoDB副本集

mongodb客户端库无法连接到副本集

无法连接到mongodb副本集Google Compute Engine

如何使用pymongo在已经初始化的副本集中的mongo中添加新节点?

在docker-compose中运行mongo副本集

Mongo副本集负载管理

Django 连接到 Mongo Atlas 集群

如何在本地连接到AWS Redis集群?

如何在mongoDB中的副本集之间实现同步。需要自动还是手动触发?

MongoDB副本集群集中的索引

连接到副本集时,MongoDB连接被拒绝到本地节点

如何使用SQLAlchemy连接到Amazon Redshift中的集群?

如何将 Docker 中的 Prometheus 连接到 Kubernetes 集群?

如何在我的 Java 应用程序中连接到 mongo db?