MongoDB集群

1:replica set

数据冗余(保证数据不丢失)+主节点切换(服务可用)

Primary/Secondary/其他类型节点(为了投票选primary、数据备份、延迟复制等)

MongoDB集群_第1张图片

读写都是primary,保证强一致性

读写分离:写必须primary读secondary,此时保证的是最终一致性而非强一致性

read preference和write concern

如何复制?联想下mysql的主从复制如何实现?复制到一半断电了怎么办?

replica set oplog

如何选举?联想下分布式系统的选举算法(redis、zookeeper各自是如何实现)?

http://docs.mongodb.org/manual/core/replica-set-elections/#replica-set-elections

paxos?

2:分片

数据量太大单节点存储不够、单节点读写压力过大

MongoDB集群_第2张图片

query routers:请求入口,可以有多个,做负载均衡。接受请求再请求shard然后再返回结果给请求者

config servers:存储分片的元数据,每个shard存储的数据key范围。replica set防止单点故障

shards:存储分片数据 replica set防止数据丢失

如何分片?

将shard key映射到chunk,然后将chunk存储到指定的shard

shard key的选择

range based sharding

MongoDB集群_第3张图片

hash based sharding

MongoDB集群_第4张图片

分片的split和rebalanc?

某些范围的shard key对应的数据越来越多 对应chunk越来越大,当超过指定大小max之后,会split chunk(两个大小为max的chunk),就会造成某些shard上的chunk越来越多

然后就会启动rebalance,平衡每个shard上的chunk的数量

rebalance过程中的读写如何保证?

你可能感兴趣的:(MongoDB集群)