0
点赞
收藏
分享

微信扫一扫

3-2:mongo复制集

MongoDB复制集

Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。

复制集的作用

MongoDB的复制集主要是为了实现服务的高可用。

他的实现依赖于两个方面的功能

数据写入是将数据迅速复制到另一个独立节点上 在接受写入节点发生故障时自动选举出一个新的替代节点

在实现高可用的同时,复制集实现了几个附加功能:

数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟 读写分离:不同类型的压力分别在不同的节点上执行 异地容灾:在数据中心故障时候快速切换到异地

三、常见复制集结构

一个典型的复制集由三个以上具有投票权的节点组成:

一个主节点:接受写入操作和选举时投票(读写都可以) 两个(或多个)从节点:复制主节点上的新数据和选举时投票(只读) 不推荐使用Arbiter(投票节点:空节点不接受读写只作用于投票)

复制集原理与故障恢复

5.1. 节点之间数据复制(MongoDB主从复制的原理)

当一个修改操作,无论是插入、更新或者删除,到达主节点时,它对数据的操作将被记录下来(经过一些转换),这些记录称为oplog

从节点通过在主节点上打开一个tailable游标不断获取新进入主节点的oplog,并在自己的数据上回放,以此保持跟主节点的数据一致。

5.2. 故障恢复过程

具有投票权的节点之间两两互相发送心跳,当五次心跳未收到时判断节点失联;如果失联的是主节点,从节点就会发起选举,选出新的主节点;如果失联的是从节点则不会产生新的选举。

选举基于RAFT一致性算法实现,选举成功的必要条件是大多数投票节点存活。

复制集中最多可以有50个节点,但是具有投票权的节点最多有7个

影响选举的因素:

整个集群必须有大多数节点存活 被选举为主节点的节点必须能够被多数节点建立链接,具有较新的oplog,具有较高的优先级(手动设置)

5.3. 复制集节点常用配置

在配置复制集的时候可以添加这些参数来控制节点的状态:

priority: 副本集中通过设置priority的值来决定优先权的大小,这个值的范围是0--100,值越大,优先权越高。默认的值是1。如果值是0,那么不能成为primay

hidden: 将一个副节点配置成隐藏节点,首先要将members[n].priority 值设置成0和members[n].hidden值设置为true,隐藏节点既不能变成Primary也不能被客户端访问,但是拥有投票选举的权利。

slaveDelay: 延迟,复制n秒前的数据,保持与主节点的时间差。这样当操作失误的时候可以用来恢复数据。

v: 是否具有投票权

六、复制集注意事项

硬件:

因为正常的复制集节点都有可能成为主节点,他们的地位是一样的,因此硬件配置要一致 为了保证节点不会宕机,各节点使用的硬件必须具有独立性 软件:

复制集各节点软件版本必须一致,以避免出现不可预知的问题

一个复制集里最多只能有50个节点,具有投票权的节点最多只能有7个,【注意】并不是具有投票权的节点才能被推选为主机,所有具有成为主机条件的节点都能成为主节点

搭建

1-准备多个实例

2-搭建复制集

登录到作为主库的实例 mongo --port 28017 admin

config = {_id: 'my_repl', members: [

{_id: 0, host: '192.168.110.11:28017'},

{_id: 1, host: '192.168.110.11:28018'},

{_id: 2, host: '192.168.110.11:28019'}]

}

rs.initiate(config)

如图表示配置成功

复制集管理操作

rs.status(); //查看整体复制集状态

rs.isMaster(); // 查看当前是否是主节点

rs.conf(); //查看复制集配置信息

rs.remove("ip:port"); // 删除一个节点

rs.add("ip:port"); // 新增从节点

rs.addArb("ip:port"); // 新增仲裁节点

特殊从节点

介绍:

arbiter节点:主要负责选主过程中的投票,但是不存储任何数据,也不提供任何服务

hidden节点:隐藏节点,不参与选主,也不对外提供服务。

delay节点:延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,所以通常会配合hidden(隐藏)

一般情况下会将delay+hidden一起配置使用

######

举报

相关推荐

0 条评论