- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
复制集成员
副本集成员¶
MongoDB 的副本集是一组提供冗余和高可用性的mongod
进程。一个副本集的成员有:
主节点接受所有的写操作。
从节点通过复制主节点的操作来维护一个相同的数据集。从节点为特殊用途的配置文件提供了额外的配置项。例如,从节点可配置成无投票权 或0优先级。
副本集的最小推荐配置是一个包含三个数据承载成员的三成员副本集:一个主节点 和两个从节点。在某些情况下(例如你有一个主节点和一个从节点,但由于成本约束无法添加另一个从节点),你可以选择使用一个仲裁节点。仲裁节点参与选举但不持有数据(即不提供数据冗余)。
一个副本集最多可以有50个成员,但仅能有7个可投票成员。
主节点¶
副本集的主节点是唯一一个可以接受写操作的成员。MongoDB在主节点 上应用写操作,然后将这些操作记录到主节点的oplog中。从节点成员复制这个日志然后应用到它们的数据集中。
在下图的三成员副本集中,主节点接受所有写操作。然后从节点复制oplog应用至它们的数据集中。
副本集所有的成员都可以接受读操作。但是,默认情况下,应用程序会将其读操作定向至主节点。有关更改默认读行为的详细信息,请参阅读偏好 。
副本集最多有一个主节点。 [2] 如果当前主节点不可用,一个选举会抉择出新的主节点。更多详细信息请参见副本集选举。
从节点¶
一个从节点维护了主节点数据集的一个副本。为了复制数据,从节点通过异步的方式将主节点oplog 应用至自己的数据集中。一个副本集可以有一个或多个从节点。
下图的三成员副本集有两个副本成员。从节点复制主节点的oplog并应用到它们的数据集上。
虽然客户端不能将数据写入到从节点,但客户端可以由从节点读取数据。有关客户端如何将读操作直接读入副本集的详细信息,请参阅读偏好 。
从节点可以成为主节点。如果当前主节点不可用,副本集会发起选举来选择哪个从节点成为新的主节点。
更多详细信息请参见副本集选举。
您可以出于特殊目的来配置从节点成员。您可以配置一个从节点用于:
- 阻止它在选举中成为主节点,适用于将该节点部署在备用数据中心或者充当一个冷备节点。请查考0优先级副本集成员。
- 防止应用程序从它读取数据,适用于在该节点上运行需要与正常流量分离的应用程序。请参考隐藏副本集成员。
- 保持一个运行的“历史”快照,以便在从某些错误(如无意中删除的数据库)恢复时使用。请参考延迟副本集成员。
[1] | 从4.2版本开始(从4.0.6也支持),副本集的副本成员会记录oplog中应用时间超过慢操作阈值的慢操作条目。这些慢oplog信息被记录在从节点的诊断日志 中,其路径位于REPL
组件的文本applied op: took ms
中。这些慢日志条目仅仅依赖于慢操作阈值。它们不依赖于日志级别(无论是系统还是组件级别)、过滤级别,或者慢操作采样比例。过滤器不会捕获慢日志条目。
仲裁节点¶
在某些情况下(例如有一个主节点和一个从节点,但由于成本约束无法添加另一个从节点),你可以在副本集中添加一个仲裁节点。仲裁节点没有数据集的副本,并且不能成为主节点。然而,仲裁节点可以参与主节点选举。一个仲裁节点只有 1
票选举权。
3.6版本的变化:从MongoDB 3.6版本开始,仲裁节点优先级为0。当您升级一个副本集至3.6版本时,如果当前配置中有一个优先级为1
的仲裁节点,则MongoDB 3.6会将仲裁节点的优先级重新配置为0
。
重要
不要在同时承载副本集的主节点或副本成员的系统上运行仲裁节点。
需要添加一个仲裁节点,请参考添加一个仲裁节点至副本集。
使用仲裁节点时的注意事项,请参考副本集仲裁节点。
[2] | 在 某些场景下, 一个副本集中的两个节点可能会认为它们是主节点,但至多,他们中的一个将能够完成写关心级别为{ w: "majority" }
的写操作。 可以完成 { w: "majority" }
写的节点是当前主节点,而另一个节点是原先的主节点,通常是由于网络分区导致它还没有意识到自己的降级。当这种情况发生时,连接到原先主节点的客户端尽管已经请求了读偏好primary
,但可能还会观察到过时的数据,并且对原先主节点新写的操作最终将回滚掉。
随附副本集主节点、从节点和仲裁节点的参看链接:
https://docs.mongodb.com/manual/core/replica-set-primary/
https://docs.mongodb.com/manual/core/replica-set-secondary/
https://docs.mongodb.com/manual/core/replica-set-arbiter/
原文链接:https://docs.mongodb.com/manual/core/replica-set-members/
译者:李正洋
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05