天天看点

MongoDB复制集架构

MongoDB复制集架构

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

MongoDB复制集架构

副本集特征:

N 个节点的集群

任何节点可作为主节点

所有写入操作都在主节点上

自动故障转移

自动恢复

Replica Set角色

Replica Set 的成员是一堆有着同样的数据内容 mongod 的实例集合,包含以下三类角色:

主节点(Primary)

是 Replica Set 中唯一的接收写请求的节点,并将写入指令记录到 oplog 上。副本节点通过复制 oplog 的写入指令同步主节点的数据。Secondary。一个 Replica Set 有且只有Primary 节点,当Primar挂掉后,其他 Secondary 或者 Arbiter 节点会重新选举出来一个主节点。应用程序的默认读取请求也是发到 Primary节点处理的。

副本节点(Secondary)

通过复制主节点 oplog 中的指令与主节点保持同样的数据集,当主节点挂掉的时候,参与主节点选举。

仲裁者(Arbiter)

不存储实际应用数据,只投票参与选取主节点,但不会被选举成为主节点。

MongoDB复制集架构

复制集架构配置:

架构:

Arbite:127.0.0.1:27017  

primary:127.0.0.1:27018

secondary: 127.0.0.1:27019

配置文件内容如下,只要修改logpath、dbpath、pidfilepath和端口即可

arbiter.conf 

primary.conf

secondary.conf

分别启动这三个实例:

初始化:

使用mongodb客户端登陆两个常规节点(primary和secondary)中的任何一个,执行如下命令

登陆后执行初始化命令

查看集群状态:

登录127.0.0.1:27019  角色显示为Secondary

在primary上创建数据,测试secondary上是否会同步

登录secondary,查看

secondary上插入数据报错,说明secondary上没有写的权限

验证复制集架构容灾功能

kill掉primary的进程,登录127.0.0.1:27019

可以看到127.0.0.1:27018 有一个 "stateStr" : "(not reachable/healthy)"的报错,而127.0.0.1:27019已经变成了primary角色

MongoDB复制集架构

启动原来的primary.conf配置的实例,角色由原来的primary变成了secondary

其他命令: rs.help()

rs.slaveOk():secondary默认不允许读写,执行此命令后,从节点有可读权限

rs.conf():查看配置情况

rs.add():新增一个节点到副本集中,注意只能在primary上操作,secondary角色执行该命令会报错,例如:

test-set:SECONDARY> rs.add("127.0.0.1:27020")

测试:

登录primary,新建一个third.conf的配置文件,并启动实例,端口为127.0.0.1:27020

添加新的secondary角色

rs.remove(hostportstr):删除一个secondary节点

编辑修改集群配置(只能在primary节点上操作)

登录到MongoDB的primary实例

执行cfg=rs.conf()命令,将集群配置保存在cfg变量中

查看集群第一个成员的配置

修改第一个成员的优先级配置

保存配置使生效