第1页
2015-4-28
Mongodb复制集的原理机制
@eshujiushiwo (周李洋)
个人 qq:378013446
Mongodb上海用户组:192202324
第2页
2015-4-28
Mongodb在DeNA的应用
第3页
2015-4-28
选择Mongodb的原因
1.原生支持的复制集架构
2.扩展性极强
3.Bson文档结构
第4页
2015-4-28
《NBA梦之队》:
月流水:3500W+,注册用户:1600W+
《变形金刚 崛起》:
月流水:1500W+,注册用户:500W+
《航海王 启航》:
即将启航
第5页
2015-4-28
第6页
2015-4-28
复制集架构
第7页
2015-4-28
Heartbeat
(Every 2 sec)
Write
Oplog
Oplog
Oplog
replicate
replicate
apply
apply
第8页
2015-4-28
slaveDelay:3600
Priority:0
Hidden:true
Priority:0
Hidden:true
第9页
2015-4-28
priority(优先级)
1.优先级为0的节点将不能成为主节点。
2.在选举中,选举票将优先投给priority更高的节点。
第10页
2015-4-28
Hidden(隐藏与否)
当我们将hidden设置为true的时候,该节点将对应用程序不可见。(即当应用程序通过复制集读选项访问从节点的时候,请求将不会发送到该节点上。)
第11页
2015-4-28
Application
Read &write
第12页
2015-4-28
Read Preference Modes
(复制集读选项)
5 种模式
1.primary (only)(只在主节点上读) – Default
2.primaryPreferred(优先在主节点上读)
3.Secondary(在从节点上读)
4.secondaryPreferred(优先在从节点上读)
5.Nearest(就近读)
第13页
2015-4-28
Application
write
read
第14页
2015-4-28
Application
write
read
read
第15页
2015-4-28
第16页
2015-4-28
Election(选举)
第17页
Heartbeat
(Every 2 sec)
第18页
Heartbeat check
Heartbeat check
第19页
response
response
1.其现在是什么角色(primary或是其他)
2.其是否有资格成为primary(包括priority、arbiter与否、delayslave情况)
3.两者之间的网络延时等等
将这些信息写入其自己的映射表,并判断是否有变化,如某个节点挂了,或是有新节点加入。
第20页
Heartbeat
每隔一段时间,就会进行一次状态监测,或是当状态映射表变动了,如有节点新增或是down了.也会进行。
进行状态检测,具有一票否决权,内容包括:
1.自身是否处于选举过程
2.是否能与复制集中多数节点进行通讯。
3.是否满足成为主节点的条件(priority,arbiter,映射表是否最新,optime)
若都满足,则将自身加入主节点候选人名单否则从名单中剔除。
候选人
1.node1
2.Xxxxxx
3.xxxxxx
第21页
Heartbeat
如果复制集中存在primary且本节点为primary。
若发现主节点候选人中存在priority比其更高的,且optime落后最新操作10s内,就会进行选举,给priority更高的实例升级为主的机会。
或者该节点为主节点,但是发现自身无法与复制集中多数节点通讯,则也会降级为secondary
候选人
1.node1
2.Xxxxxx
3.xxxxxx
Priority 2
第22页
Heartbeat
检测自己是否在主节点候选人名单中,若不在,则退出该流程
如果复制集中不存在primary。
若在,则开始判断自己能否发起选举。判断有以下内容,具有一票否决权
1.是否能与复制集中多数成员通讯。
2.是否在主节点候选人列表中。
3.是否满足成为主节点的条件(priority,arbiter,slavedelay,optime是否最新)。
4.30s内是否透过赞成票。
若满足则会标示自己已经在选举中。并发起选举。
候选人
1.node3
2.node2
3.xxxxxx
第23页
发送一个请求,“我觉得我可以做primary,你们觉得怎么样?”
收到请求后,进行判断:
1.复制集中是不是已经有一个主了
2.是否存在priority比它高的节点。
3.彼此的状态映射表是否最新(若自己的不是,则不投票)
4.它的oplog time是不是最新的。
5.自己在30s内是否投过赞成票
request
第24页
Heartbeat
反对/赞成
第25页
Heartbeat
如果收到了反对票,那么其继续保持secondary状态
第26页
Heartbeat
如果没收到反对票,且投赞成票的占多数,那么升职为Primary
第27页
第28页
2015-4-28
Write Concern(安全写级别)
1. Unacknowledged
2. Acknowledged
3.Wait for journal sync
4.Wait for replication(2,majority,all)
第29页
Unacknowledged
2015-4-28
Driver
Primary
Write
apply in
memory
W:0
第30页
acknowledged
2015-4-28
Driver
Primary
Write
apply in
memory
response
W:1
第31页
Wait for Journal Sync
2015-4-28
Driver
Primary
Write
apply in
memory
Write to journal
w:1 J:true
第32页
Wait for Replication
2015-4-28
Driver
Primary
Write
apply in
memory
w:2
Secondary
replicate
第33页
2015-4-28
Driver
Primary
Write
apply in
memory
w:all
Secondary
replicate
Secondary
replicate
第34页
END