Jusene's Blog

MongoDB副本集与MongoDB分片

字数统计: 1.1k阅读时长: 4 min
2017/07/08 Share

上面我们简单的了解了下mongodb的基本操作指令,现在我们来进行mongodb的高端操作,这里主要进行的是mongodb副本集和mongodb分片。

mongodb副本集

mongodb的复制有两种类型:

  • master/slave
  • replica set

master/slave不常用,基本处于废弃的状态,而replica set是mongodb复制常用的框架,真个运行机制和redis的哨兵机制很相似,可以在主节点出现故障的时候,副本集配置的从服务器会自动选举产生主节点,从而保障系统的稳定性。

replica set是服务于同一数据集的多个mongodb实例,一个replica set只有一个主机点,可以有多个从节点,主节点将数据修改操作保存在oplog中,从节点通过同步主节点的oplog来保障数据同步,为了实现replica set可以检测整个集群的的健康状态,整个replica set集群中的各个节点需要发送heartbeat信号。

工作特性:

  • 至少3个,且应该为奇数个节点,可以使用arbiter(仲裁节点)来参加选举
  • hearbeat信号检测存活
  • 自动失效转移,通过选举的方式实现

复制集的节点分类:

  • 0优先级的节点;冷备节点,不会被选举成为主节点,但可以参加选举
  • 隐藏的从节点;首先是一个0优先级的节点,且对客户端不可见
  • 延迟复制的从节点;首先是一个0节点的从节点,且复制时间落后于主节点一个固定时长
  • arbiter:仲裁解节点

mongodb的复制架构:oplog,hearbeat

oplog:大小固定的文件,存储在local数据库,最小1g,默认为文件系统的5%的容量

整个复制过程:

  • 初始同步(initial sync)
  • 回滚后追赶(post-rollback catch-up)
  • 切分块迁移(sharding chunk migrations)

local:存放了副本集的所有元数据和oplog,用于存储oplog的一个名为oplog.rs的collection:oplog.rs的大小依赖于os及文件系统,但可以自定义其大小oplogSize。

mongodb的数据同步类型:

  • 初始同步:
    • 节点没有任何数据时
    • 节点丢失副本的复制历史
  • 初始同步的步骤
  1. 克隆所有数据库
  2. 应用数据集的所有改变,复制oplog并应用于本地
  3. 为所有collection构建索引

配置mongodb副本集

共创建奇数个节点

1
~]# cat /etc/mongodb.conf
2
dbpath=/data/mongodb
3
logpath=/var/log/mongodb.log
4
logappend=true
5
port=27017
6
fork=true
7
auth=false
8
nohttpinterface=false
9
bind_ip=0.0.0.0
10
journal=true
11
quiet=true
12
replSet=testSet
13
replIndexPrefetch=_id_only
14
~]# ./mongodb -f /etc/mongodb.conf

主节点配置

1
~]# ./mongo
2
> rs.conf()  查看副本集节点配置
3
> rs.status() 查看副本集节点状态
4
> rs.initiate() 初始化副本集节点,新节点需要操作
5
> rs.add() 添加从节点的ip于端口

从节点配置

1
~]# ./mongo
2
> rs.slaveOk()  确认从节点ok,必须操作

主节点切换为从节点

1
~]# ./mongo
2
> rs.stepDown()

副本集的重新选举的影响条件:

  • 心跳信息
  • 优先级
  • optime
  • 网络连接
  • 网络分区

触发选举的事件:

  • 新副本初始化
  • 从节点联系不到主节点
  • 主节点‘下台’时
    • 主节点受到stepDown()命令时
    • 某从节点有更高的优先级且已经满足主节点其他所有条件
    • 主节点无法联系到副本集的‘多数方’

修改优先级示例:
需要在主节点执行

1
> cfg=rs.conf()
2
> cfg.members[1].priority=2
3
> rs.reconfig(cfg)

mongodb分片

单个数据集过大时,将一个数据集分成n个数据集,我们称为sharding集群。

分片架构中的角色:

  • mongos:router
  • config server:云数据服务器,对应shard的索引
  • shard:数据节点,也称mongod实例

配置sharding集群

先配置config server

1
~]# cat /etc/mongodb.conf
2
dbpath=/data/mongodb
3
logpath=/var/log/mongodb.log
4
logappend=true
5
fork=true
6
auth=false
7
nohttpinterface=false
8
bind_ip=0.0.0.0
9
journal=true
10
quiet=true
11
configsvr=true

配置shard,即配置正常的mongd

1
~]cat /etc/mongodb.conf
2
dbpath=/data/mongodb
3
logpath=/var/log/mongodb.log
4
logappend=true
5
fork=true
6
auth=false
7
nohttpinterface=false
8
bind_ip=0.0.0.0
9
journal=true
10
quiet=true
11
~]# ./mongod -f /etc/mongodb.conf

配置mongos

1
~]# ./mongos --configdb=configserver_ip:27019 --fork --logpath=/var/log/mongos.log
2
~]# ./mongo
3
> sh.help()
4
> sh.addShard("10.211.55.2")
5
> sh.status()
6
> sh.enableSharding(dbname)
7
> sh.shardCollection(fullname,key,unique)
8
> use admin
9
> db.runCommand("listShards")
CATALOG
  1. 1. mongodb副本集
    1. 1.1. 配置mongodb副本集
  2. 2. mongodb分片
    1. 2.1. 配置sharding集群