问题标签 [mongodb-replica-set]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mongodb - 使用 replSet 的覆盖配置启动 mongod
我有几个 mongoDB 实例作为复制集运行。对于它们中的每一个,我都准备了带有 的配置文件,因此从没有replSetName
开始 mongo仍然将其添加到复制集中。但是,对于维护实例,我需要在禁用 replSet 的情况下运行它 - 是否可以通过某些 mongod 参数从配置中覆盖(例如,从 conf 文件中覆盖)mongod
-replSet
replSetName
mongod -port
port:
replication - 尝试复制时无法使用默认 oplog 大小启动 mongod 服务器
当 oplog 具有默认值时,我无法创建复制,即 rs.initiate()。我的服务器有 400+ GB 的可用空间。在 MongoDB 的官方文档中,MMAP 的默认范围是 990MB 到 50GB 之间可用磁盘空间的 5%,但在Memory Use下:-
使用 MMAPv1,MongoDB 会自动使用机器上的所有空闲内存作为其缓存。
在没有 oplog 大小选项的情况下启动 mongod 后执行 rs.initiate() 时控制台出错:
mmap 因内存不足而失败
“errmsg”:“无法启动:文件 /data/0/local.7 在 createPrivateMap 中打开/创建失败(查看日志以获取更多信息)”
所以,我只用 --oplogSize 4096 开始了 mongod,之后我才能够执行 rs.initiate。现在我知道小 oplog 大小的问题,但我想知道后台到底发生了什么。5% 的可用磁盘空间或 50 GB 上限,无论哪种方式,我的服务器中仍有 300 GB 可用。
mongodb - Mongo 可能的数据损坏将次要返回到副本集
我试图了解在将辅助节点返回到副本集的同时发生的一些数据损坏的来源。
我们有一个包含 4 个节点的生产副本集 - 3 个数据承载节点和一个仲裁器。
我从生产副本集中取出了一个次要副本(称为它X
),并用它来播种一个新的测试副本集以进行一些性能基准测试。播种新副本集后,我放回X
生产副本集。在大约 10 小时内,我们收到了客户的投诉,称他们丢失了大约 2 天的数据。X
也停产了2天。所以我们想知道重新引入是否会X
导致一些数据反转。
时间安排非常紧密,我们无法找到任何合理的替代理论 - 因此这篇文章。
奇怪的是,只有一些mongo 集合被“还原”。我们的数据库似乎是主数据库和X
.
更详细地说,这就是我所做的:
- 跑了
rs.remove(X)
- 从中删除了所有副本集信息
mongod.conf
- 重新启动
X
- 连接到
local
数据库并运行db.dropDatabase()
以清理生产副本集信息 - 恢复了副本信息,
mongod.conf
但使用了新的副本集名称 - 重新启动
X
- 提出 3 个空 mmapv1 节点和一个仲裁器并将它们连接到
X
新副本集中 - 让他们复制大约 48 小时
- 跑
rs.stepDown()
和rs.remove(X)
- 从中删除了所有副本集信息
mongod.conf
- 像上面一样,连接和删除
local
数据库 - 恢复了副本信息,
mongod.conf
但使用生产副本集名称 - 用于
rs.add(X)
添加X
回生产副本集
澄清一下 -X
当它是测试副本集中的主要数据时,没有添加新数据。
以下是一些可能相关的信息:
所有节点都是运行 mongo 3.2.7 的 mmapv1。
X
从生产副本集中删除后,生产主副本的条目意外/etc/hosts
被删除。它能够直接与其他辅助节点和仲裁器通信,但不能与主节点通信。有很多心跳错误日志。
我发现这些日志似乎表明X
's 的数据在重新进入生产副本集时被丢弃:
在此之前,开发人员也一直在报告主节点有时在较高负载下无响应的问题。这些是来自 reactivemongo 驱动程序的一些错误:
节点在 aws 上:主要运行在 上m3.xlarge
,次要运行在 上m3.large
,仲裁器在 上m3.medium
。
在我们收到客户投诉大约 30 小时后,我们的副本集举行了选举并X
成为主要副本。这些是日志:
这发生在我意识到/etc/hosts
文件被破坏之前X
。
在复制一个非常大的集合(2.6 亿个文档)时,我还在日志中发现了很多这样的错误:
这是一个不同的集合,但与已损坏的集合不同。
mongodb - PyMongo MongoClient 副本集不会连接
一些背景知识:我使用 Bitnami 在 Azure(1 个仲裁器)上启动了一个 3 节点的 Mongo 集群,每个 mongod 托管在单独的 VM 上。我已经确认副本集存在,并且每个节点都能够相互连接。我已经确认当我关闭我的主节点时,辅助节点会启动。当主节点返回时,它再次占据主位置。
我的问题是在指定副本集时我无法使用 MongoClient 连接到我的 MongoDB 副本集。我会收到这个错误:
pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] 由于目标机器主动拒绝,无法连接,PrimaryIP:27017: [WinError 10061] 由于目标机器主动拒绝,无法连接,SecondaryIP: 27017:超时
使用 MongoClient,如果我这样做:
connection = MongoClient('MyIP1:27017', w=2)
,它连接良好。当我做
,那是我得到错误的时候。
是否与仲裁节点没有用于身份验证的用户信息有关?
mongodb - Pymongo 副本集 NetworkTimeout
根据Pymongo的说法,我可以在我的副本集中只指定一个成员,只要我的一个种子在线,它就可以看到其余的。
我目前在我的副本集中只指定 1 个成员,其中 domain2 是我的次要成员而不是我的主要成员,当所有 3 个成员都启动时,这可以正常工作:
但是,如果我关闭 domain1,它会导致 pymongo.errors.NetworkTimeoutError 并且无法连接到新的主节点。我究竟做错了什么?
mongodb - pymongo ReplicaSet 用户名密码
我正在使用以下语法建立与我的副本集的连接:
但是,当我尝试插入这样的文档时:
我得到一个 pymongo ServerSelectionTimeOutError: Name or service not known
我究竟做错了什么?
mongodb - 忽略隐藏备份副本上的 dropDatabase 命令?
我正在运行一个隐藏的、优先级为 0 的副本服务器作为备份。我想知道是否可以忽略备份服务器上的dropDatabase
和之类的命令?removeJournalFiles
就我而言,假设备份服务器不应该删除任何复制的数据库是安全的。
mongodb - pymongo 复制集 NetworkTimeout 错误
我在 pymongo 3.4.0 上将以下连接字符串与 MongoClient 一起使用:
当我关闭我的主节点并尝试执行任何 CRUD 操作时,我收到一个 pymongo.errors.NetworkTimeout 错误。但是,当我使用相同的 uri 创建一个新的 MongoClient 并重试时,这个错误就会消失。如何确保无缝故障转移?
这是在主节点上运行的 db.isMaster() 的输出
mongodb - 跨多个 AWS 地理区域的 Mongodb 副本
我目前正在尝试确定在 AWS 中为 Mongodb 跨区域副本集实施的最佳方法。我的 3 个副本集将分布在多个区域,而不仅仅是多个可用区。例如,主要在东海岸,次要在西海岸和加拿大。
我的问题是如何最好地处理 IP 寻址,以便在 AWS 中跨地理区域设置这样的分布式副本集。它适用于跨区域的公共 IP 地址,但我想使用私有 IP 来保护。是否可以使用私有IP?
mongodb - Mongodb架构和两个数据中心的故障转移
我试图弄清楚是否有一种方法可以无缝地故障转移大多数 mongodb 节点位于主数据中心的 mongo 副本集。我目前的限制是 2 个数据中心,第三个数据中心是不可能的。我遇到的问题是,如果数据中心 1 出现故障,数据中心 2 中的辅助节点不会在没有人工干预的情况下提升为主节点。
数据中心1(Primary):Mongo Node(Primary) Mongo Node(Arbiter)
数据中心2(二级):Mongo Node(二级)
我查看了 mongodb 白皮书,但他们指出,如果 dc1 丢失,则需要手动干预才能使 dc2 中的 mongodb 实例成为主要实例。
我的问题是,是否有一种架构或配置可以让数据中心 1 丢失,并且仍然能够在无需手动干预/重新配置的情况下启用写入启用数据中心 2 接管。如果不走 3 个数据中心架构路径,这是否可能。是否可以在每个站点上保持两个 3 成员副本集同步,并可能在网络级别为连接的应用程序进行故障转移?
谢谢。