1. mongo集群部署和分片方式
mongo集群部署需要:
- 路由接入节点
- 配置文件存储节点
- 实际数据存储节点
一次访问流程:
从mongo客户端进录入路由节点,从配置节点查询数据,根据查询结果到实际的存储结点上查询和存储数据。如下图所示:
mongo 部署方式同其他分布式组件一致,为单机部署,副本部署(也叫主从部署),分片部署,主从与分片混合部署
对于副本部署,写数据的过程是只写到主结点中,由主结点以异步的方式同步到从结点中。
而读数据,只要从任一结点中读取,具体到哪个结点读取是可以指定的。
分片:(参考mysql垂直分库)
对于MongoDB的分片,假设我们以某一索引键(ID)为片键,ID的区间[0,50],划分成5个chunk,分别存储到3个片服务器中,如图所示:
假如数据量很大,需要增加片服务器时可以只要移动chunk来均分数据即可。
存储配置文件的服务器其实存储的是片键与chunk以及chunk与server的映射关系,用上面的数据表示的配置结点存储的数据模型如图:
路由结点:
路由角色的结点在分片的情况下起到负载均衡的作用。
2. mongo持久化
mongodb在启动时,专门初始化一个线程不断循环(除非应用crash掉),用于在一定时间周期内来从defer队列中获取要持久化的数据并写入到磁盘的journal(日志)和mongofile(数据)处。