Mongodb副本集
Posted 张小贱1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb副本集相关的知识,希望对你有一定的参考价值。
副本集(Replica Set):
通俗的说,副本集就是集群,主从复制,读写分离,故障切换。
副本集是Mongodb原来的主从模式的升级版本,官方已经不再推荐使用主从模式。
MongoDB的副本集与主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
Ps:这张图中读写都是从主节点,其实可以设置读操作走从节点,但是写入操作只能是在主节点上。
副本集特征:
- N 个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
复制集主节点
在复制集中,主节点是唯一能够接收写请求的节点。MongoDB在 主节点 上进行写操作,并会将这些操作记录到主节点的 oplog 中。 从节点 会将oplog复制到其本机并将这些操作应用到其自己的数据集上。
之前的 主节点 在 故障切换 后重新回归 复制集 时将会发生写操作的回滚。回滚只会发生在主节点的写操作 没能 成功在 从节点 上应用就Down 掉的情况下。当主节点重新以一个从节点加入复制集,它将进行 "回滚" ,其上得写操作将与复制集中其他成员的保持一致。
复制集的读与写:
从客户端应用程序的角度看,MongoDB实例是作为单个服务器(即"独立")运行还是复制集是透明的。 但是,MongoDB为副本集提供了额外的读写配置。
复制集上的读操作:
配置从哪个节点返回数据:
我们需要谨慎选择是否在从节点上进行读操作,与在 primary 进行读操作不同,在从节点上进行读操作时返回的数据可能不是 主节点 上最新的数据。
主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。
首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。
从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。
首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
实际上可以详细设置某一次操作的ReadPreference,具体实现查询api。
以上是关于Mongodb副本集的主要内容,如果未能解决你的问题,请参考以下文章