三、MongoDB复制集

一、复制集特性

  • 数据一致性
    • 主是唯一的 没有MySql那样的双主结构
    • 大多数原则 集群存活节点数小于等于1/2时,只可读,不可写
    • 从库无法写入 MySql从库的readonly对具有super权限的账户无效
  • 自动容灾

二、快速搭建复制集

(一)编写配置文件

  新建三个配置文件:28001.conf、28002.conf、28003.conf,以28001.conf为例,另外两个配置文件把对应的端口号及其相关改动即可:

#端口
port=28001
#绑定ip
bind_ip=192.168.10.130
#采用指定引擎为mmapv1(这项必须有,否则会报错)
storageEngine=mmapv1
#日志存储路径(logs路径默认没有,要自己创建)
logpath=/usr/local/mongodb/logs/28001.log
#数据存储路径(data/db/28001/路径默认没有,要自己创建)
dbpath=/usr/local/mongodb/data/db/28001/
#开启日志追加(默认是覆盖)
logappend=true
#指定pid文件目录(data/db/28001/28001.pid文件默认没有,要自己创建)
pidfilepath=/usr/local/mongodb/data/db/28001/28001.pid
#后台运行
fork=true
#同步日志大小
oplogSize=512
#持久化选项
journal=true
#复制集名称(同一复制集,要保持一致)
replSet=IMOOC

(二)启动实例

cd /usr/local/mongodb/bin
 #启动三个实例
./mongod -f ../conf/28001.conf
./mongod -f ../conf/28002.conf
./mongod -f ../conf/28003.conf

(三)复制集初始化
1、连接进入28001实例的admin

./mongo 192.168.10.130:28001/admin

2、书写配置项

config = {
	_id:"IMOOC",
	members:[
		{_id:0,host:"192.168.10.130:28001"},
		{_id:1,host:"192.168.10.130:28002"},
		{_id:2,host:"192.168.10.130:28003","arbiterOnly":true}
	]
}

  备注:我们可以在写完该配置项以后,继续更改这些配置项。比如28003实例,我们需要将其设置为选举节点(PS:选举节点不存储数据),则可以通过如下步骤设置:

#"arbiterOnly":true 设置该节点为选举节点
config.members[2].={_id:2,host:"192.168.10.130:28003","arbiterOnly":true}

3、初始化

rs.initiate(config)

4、查看复制集状态

rs.status()

通过该命令,即可查看整个复制集中各个节点的属性,包括:主从节点等

5、验证复制集同步

#在主节点中
use imooc
db.imooc.insert("name":"imooc")


#在从节点中,验证数据是否同步过来
db.imooc.find()

#此时报错如下
Error: error:{
	"ok":0,
	"errmsg":"not master and slaveOk=false",
	"code":13435
}

#出现此错误时,我们需要在从节点中手动开启从节点
rs.slaveOk(true)

#再次验证,即可发现主节点的数据已同步过来
db.imooc.find()

备注:
  出现 “not master and slaveOk=false” 错误时,需要手动设置 rs.slaveOk(true)。

(四)复制集成员介绍

1、按是否存放数据区分为:

  • 数据节点:存放数据(实体物理文件 *.ns *.0等)的节点,包括主节点和从节点
  • 投票节点:不存放数据,只作选举和充当复制集节点

2、按功能区分

  • 主节点:提供读写服务的节点(只有主节点可以写数据)
  • 从节点:提供读服务的节点
    • 隐藏节点:多程序不可见的节点
    • 延时节点:延时复制节点
    • ‘投票节点’:具有投票权的节点,不是 arbiter
  • 投票节点:Arbiter节点,无数据,仅作选举和充当复制集节点,也称它为选举节点

(五)复制集配置文件参数

  就是我们在初始化之前所设置的 config(参见上面的 2、书写配置项

复制集成员配置文件参数:
1.priority 表示当前成员是否有资格成为一个主节点,默认是1 范围:0~1000 。0 永远没有资格提升为主节点;
2.arbiterOnly默认为true
3.host表示一段字符串"192.168.10.130:28001"
4.hidden隐藏节点,权重为0,不接受读请求,有true|false(0|1)
用途:生产环境中上锁备份,不会堵塞其他节点的读。
5.votes投票权(0|1),当节点数多余7个的时候。其他的节点votes都要设置为0.
在生产环境,当节点真的大于7个的时候,会选择分片来解决。
6.slaveDelay 延迟节点的作用,例如slaveDelay=3600秒
生产中如果有dba或者开发在master误操作删除了,延迟节点就可以做别分恢复来用。
7.buildIndexes布尔值,buildIndex=true|false,0|1,master上建立了索引,其他复制节点是否也同步建立索引。

(六)常用命令

  • 查看配置
    rs.conf()

  • 把当前主节点降级为从节点
    rs.setpDown(10)

  • 之后分别查看连接主从节点状态
    rs.status()

  • 查看节点状态
    rs.isMaster()

三、复制集同步机制

  MongoDB进行主从同步复制,靠的是 oplog (operation log),记录的全部是写操作。
oplog:
作用: 记录主节点的写入操作,充当复制源
特点:封顶表 Capped collection 滚动覆盖写入
默认大小:64位Linux,Windows操作系统下为当前分区可用空间的5%

四、复制集故障处理

(一)复制集健康

  心跳 heartBeat
  频率 次/2s
  作用:状态检查(主节点不可达,从节点不可达)

(二)选举原则
  只有存活的节点数量占总数量的比率大于1/2,才会触发选举(这是能选举的先决条件)。

这里的存活节点,不仅包括数据节点,还包括 Arbiter节点
  一旦存货比率小于等于1/2,主节点就会降级为从节点,当前复制集中暂时会没有主节点,所有的节点只能读,不能写
  奇数个节点利用率比偶数个节点利用率更高。

(三)选举触发的时机

1、主节点服务器宕机;
2、主节点服务进程挂了;
3、主节点网络中断;
4、维护时,手动挂主节点:rs.stepDown(600),这里的 600 代表,600s内,该节点不可能被选举为主节点。

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/84968670