引子:如何使用三台服务器搭建高可用mongodb集群。
从技术角度出发,基本上聊完这个话题就可以清晰地知道对mongodb的掌握程度。
mongodb副本集故障转移功能得益于它的选举机制,采用了bully算法。一般分布式集群都会有一个所谓的主节点。比如常用的mysql经常会申明一个主节点,其他的都为从节点。这样一个问题就是当主节点挂掉,我们就需要手工操作,上架一个新的主节点或者从从节点恢复数据等手段,并不太灵活。
而mongodb采用的架构模式为不指定主节点,一旦主节点挂掉了,其他从节点自动接替变为主节点。一个副本集包含三个节点,主节点、从节点、仲裁节点。之间会有心跳检测(可以理解为不断地ping—-ping),当主节点down掉,会提升secondary为新的primary,仲裁节点升为新的副节点。oplogSize和更换服务器时间为容灾关键点。
一个简单充分实现的集群方式为下图所示。主写副读仲裁心跳。根据各负责的相关工作内容分担压力可最优放置在不同服务器。
但是此引题优解方式:
因为当三台服务器撑不住,主节点挂掉,从节点一旦升为主节点,同时接受读写的压力和同步数据到新从节点,那么肯定也是支撑不住服务的,所以分析最终结果要最少四台服务器参与到集群中容灾。O(∩_∩)O。
数据库的发展经历了人工管理阶段,文件系统阶段,数据库系统阶段。从第三范式到反第三范式。无不体现了互联的一种发展趋势。而当关系数据库越来越庞大的时候,又出现了各种nosql数据库,比如基于内存的memcache,redis。内存缓存模式。
其实仍然是‘分而治之’的思想(map reduce)。
根据业界的理论来讲,写代码重要的是理解思想,深入底层原理和设计模式以及算法,酱紫更有利于写出优质别人能看懂的代码。