MongoDB 主机名/URI 配置

2024-01-09

请注意,这看起来很长,但提供了上下文并在底部列出了我的主要问题。我研究了所有部分并包括参考资料。

我用的是。这在三个独立的虚拟机上创建了两个 Mongo 服务器(主服务器和辅助服务器)和仲裁器的副本集。我没有更改任何虚拟机配置(除了打开防火墙)。我已通过 SSH 连接到两台服务器,并验证 Mongo 是否按预期进行复制。我将外部 IP 从 x.x.x.x 更改为 FIRST.EXTERNAL.IP 和 SECOND.EXTERNAL.IP 以使帖子更具可读性(和安全性)。

我现在尝试通过 Java MongoClient 连接到数据库:

MongoClientOptions.Builder mongoClientOptions = MongoClientOptions.builder().connectionsPerHost(40)
  .writeConcern(WriteConcern.ACKNOWLEDGED).readPreference(ReadPreference.secondaryPreferred())
  .readConcern(ReadConcern.LOCAL).socketTimeout(60000).threadsAllowedToBlockForConnectionMultiplier(1500);
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://FIRST.EXTERNAL.IP:27017,SECOND.EXTERNAL.IP:27017", mongoClientOptions);
mongoClient = new MongoClient(mongoClientURI);

我想要验证我应该在 URI 中包含主要外部 IP 和辅助外部 IP. I 不包括仲裁者,因为 MongoClient 直接与仲裁器交互是没有意义的。

下面显示了我尝试 find() 时的 Java 异常。 Insert() 会产生相同的错误,但使用 WritePreferenceServerSelector 而不是 ReadPref 除外。

1449 [main] INFO org.mongodb.driver.cluster - Cluster created with settings {hosts=[SECOND.EXTERNAL.IP:27017, FIRST.EXTERNAL.IP:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=60000}
1449 [main] INFO org.mongodb.driver.cluster - Adding discovered server SECOND.EXTERNAL.IP:27017 to client view of cluster
1558 [main] INFO org.mongodb.driver.cluster - Adding discovered server FIRST.EXTERNAL.IP:27017 to client view of cluster
1579 [main] INFO org.mongodb.driver.cluster - No server chosen by ReadPreferenceServerSelector{readPreference=ReadPreference{name=secondaryPreferred}} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=SECOND.EXTERNAL.IP:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=FIRST.EXTERNAL.IP:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
1743 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:12}] to FIRST.EXTERNAL.IP:27017
1766 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-SECOND.EXTERNAL.IP:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:1, serverValue:9}] to SECOND.EXTERNAL.IP:27017
1790 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=FIRST.EXTERNAL.IP:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 1]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, roundTripTimeNanos=41160155, setName='rs0', canonicalAddress=my-project-name-mongo-server-1:27017, hosts=[my-project-name-mongo-server-1:27017, my-project-name-mongo-server-2:27017], passives=[], arbiters=[my-project-name-mongo-arbiter-1:27017], primary='my-project-name-mongo-server-1:27017', tagSet=TagSet{[]}, electionId=7fffffff0000000000000003, setVersion=3, lastWriteDate=Fri Jan 27 02:30:26 PST 2017, lastUpdateTimeNanos=165366848909779}
1791 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Discovered cluster type of REPLICA_SET
1791 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Adding discovered server my-project-name-mongo-server-1:27017 to client view of cluster
1793 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Adding discovered server my-project-name-mongo-server-2:27017 to client view of cluster
1794 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Adding discovered server my-project-name-mongo-arbiter-1:27017 to client view of cluster
1796 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Server SECOND.EXTERNAL.IP:27017 is no longer a member of the replica set.  Removing from client view of cluster.
1797 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Server FIRST.EXTERNAL.IP:27017 is no longer a member of the replica set.  Removing from client view of cluster.
1798 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-FIRST.EXTERNAL.IP:27017] INFO org.mongodb.driver.cluster - Canonical address my-project-name-mongo-server-1:27017 does not match server address.  Removing FIRST.EXTERNAL.IP:27017 from client view of cluster
1799 [cluster-ClusterId{value='588b214418786c23f4fcf845', description='null'}-my-project-name-mongo-server-1:27017] INFO org.mongodb.driver.cluster - Exception in monitor thread while connecting to server my-project-name-mongo-server-1:27017
com.mongodb.MongoSocketException: my-project-name-mongo-server-1: unknown error
   at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188)
   at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57)
   at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
   at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
   at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113)
   at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: my-project-name-mongo-server-1: unknown error
//(then it just repeats the socket exception through connection retries I believe)

我目前的理论是最初由 Google Cloud Launcher 设置的主机名配置需要使用外部 IP 进行更新。这意味着将 my-project-name-mongo-server-1 更改为 FIRST.EXTERNAL.IP,并且第二个服务器的更改相同,如MongoDB 文档 https://docs.mongodb.com/v3.2/tutorial/change-hostnames-in-a-replica-set/。如果这是正确的,我应该保留仲裁主机名吗? (旁注 - my-project-name-mongo-server-1:27017 如何解析?它是 Google Cloud 的内部 IP 吗?)

据我所知,这将解决我的问题和异常Canonical address my-project-name-mongo-server-1:27017 does not match server address.

回顾一下我关于我的问题的每个问题:

  1. 我应该在 Java MongoClient URI 中包含哪些 IP?
  2. 我应该将成员主机名重新配置为外部 IP 吗?如果有,是哪些?
  3. (可选)解释 my-project-name-mongo-server-1:27017 是否是本地主机名会很有帮助。
  4. 既然您了解我的应用程序设计,是否有更好的方法来连接我的外部连接?

将主机名更新为非内部 IP 修复了规范地址问题。我仍然不完全确定什么最适合 URI,但据我所知,包含副本集的所有服务器是最安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 主机名/URI 配置 的相关文章

随机推荐

  • 无法让 mongoose-unique-validator 工作

    这不可能那么困难 但我总是收到默认的 mongoose 11000 错误 这是我的代码的简化版本 model import mongoose from mongoose import uniqueValidator from mongoos
  • 将 BlackBerry 应用程序设计得像 iPhone

    我正在将应用程序从 iPhone 移植到 BlackBerry BlackBerry 应用程序往往看起来不像 iPhone 那样精美 但自然地 我希望尽可能保持精美 而不破坏任何重要的 UI 约定 有没有任何 UI 组件可以帮助解决这个问题
  • 带图像的自定义标题

    我正在通过禁用标准标题并自己管理所有内容来为活动创建自定义标题 我想知道是否可以根据我的需要替换 主题标准标题 我可以通过更改 windowXYZStyle 项目来通过主题自定义大小 背景图像和文本 我唯一找不到的东西 如何添加图像而不是文
  • 设置 Qt QPushButton 弹出菜单的位置(向右)

    我正在为 Qt 按钮小部件编写弹出菜单 每当单击按钮时 就会弹出一个菜单 在按钮下方 默认情况下 弹出菜单位于下方左侧 有没有办法让弹出菜单在按钮下方的右侧弹出 没有设置位置的功能 所以我想知道是否有一些复杂的方法可以做到这一点 这是一些代
  • 在 Flask 的 url_for 函数中禁用字符转义

    Flask 有吗url for方法有一个选项可以禁用自动转义吗 所以如果我有一个名为getUser像这样的路线 user
  • pandas read_sql 在列名中删除点

    这是一个错误还是我做错了什么 我创建一个 df 将其放入 sql 表中 df 和表有一列 其中有一个点 现在 当我从 sql 表中读取 df 时 列名不一样 我编写了这段小代码 以便人们可以测试它 import sqlalchemy imp
  • 如何在不配置的情况下更改 npm 前缀?

    我不小心将 npm 前缀更改为不存在的地方 是否有一个我可以访问的配置文件可以让我将其更改回来 我能想到的唯一选择是 完全卸载节点 更改前缀后 npm 没有响应 https stackoverflow com questions 39250
  • H264 中的 Elementary Stream 是什么意思

    我读了 Elementary Stream 的内容维基百科 http en wikipedia org wiki Elementary stream 我正在使用的工具 Live555 需要 H 264 视频基本流文件 因此 当从视频应用程序
  • 在Java中仅获取路径目录并丢弃文件

    我们如何实际丢弃 java 字符串中的最后一个文件并仅获取文件路径目录 用户输入的随机路径 C my folder tree apple exe 期望的输出 C my folder tree 我找到的最接近的解决方案来自here https
  • Dockerfile 中 VOLUME 的用途是什么

    我试图更深入地了解 Docker 的体积 但我很难找出以下方面的差异 用例 The docker volume create command The docker run v path host path The VOLUME条目在Dock
  • 移动 N 天活跃用户 (BigQuery)

    我有一个由两列组成的 事件 表 userId eventDate s234124 2015 01 01 a2s3166 2015 01 02 c216782 2015 01 03 z312235 2015 01 04 userId 是用户
  • 如何将“ON更新当前时间戳”添加到现有表列

    我有一个列 例如 ts activity 其数据类型为 MYSQL 时间戳 默认值为当前时间戳 我想添加更新应用当前时间戳到该列值 我无法通过更改查询来执行此操作 在创建新表及其列时 我可以添加该列 但无法通过添加更新应用当前时间戳来修改现
  • 将 ExpressionEngine 成员导出到 WordPress

    我需要将所有成员从 ExpressionEngine 站点导出到 WordPress 我该怎么办呢 将它们全部移动 包括所有密码等 似乎是一项艰巨的任务 关于如何开始有什么想法吗 如果是这种情况 用户在登录新的 WordPress 站点时必
  • 为什么pip从10版本升级到18版本?

    运行时pip install脚本我收到以下警告 You are using pip version 10 0 1 however version 18 0 is available 这很奇怪 pip项目刚刚从版本10升级到版本18吗 为什么
  • 使用 SQLBrite + Retrofit 刷新数据

    这是我的用例 我正在开发一个应用程序 它通过 REST API 与服务器通信 并将接收到的数据存储在 SQLite 数据库中 它将其用作某种缓存 当用户打开屏幕时 必须发生以下情况 数据从数据库加载 如果可用 应用程序调用API刷新数据 A
  • C 或 C++ 中的函数类型

    我有一个简单的问题 C 或 C 中的函数类型是什么 由于我们可以在 C 或 C 中拥有指向函数的指针 这意味着函数应该具有特定的类型 否则在函数创建期间进行类型检查就没有任何意义 有人可以解释一下我是否走在正确的道路上吗 如果我走在正确的道
  • 使用多个 baseurl 的 ES6 异步模块

    ES6 模块系统似乎非常适合统一 CommonJs AMD 语法 作为一个 requireJs AMD 用户 我想转换为 ES6 模块 目前使用 babel js 但似乎有一个问题 通读文档和教程 似乎无法加载依赖于多个 baseurl 的
  • WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素

    任何想法如何解决这一问题 UserService UserServiceClient userServiceClient new UserServiceClient userServiceClient GetUsersCompleted n
  • pandas,按函数分组后的列名称

    我有一个简单的 Pandas Dataframe 名为purchase cat df email cat 0 email protected cdn cgi l email protection Mobiles Tablets 1 emai
  • MongoDB 主机名/URI 配置

    请注意 这看起来很长 但提供了上下文并在底部列出了我的主要问题 我研究了所有部分并包括参考资料 我用的是 这在三个独立的虚拟机上创建了两个 Mongo 服务器 主服务器和辅助服务器 和仲裁器的副本集 我没有更改任何虚拟机配置 除了打开防火墙