AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Mongodb在DeNA的应用-复制集的原理和机制 by 周李洋

发布者 mongoconf   简介 MongoDB北京2014大会
发布于 1430229371808  浏览 7068 关键词 MongoDB, NoSQL, 游戏 
分享到

第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
支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。