Master/Slave 先说最后一个,是Master/Slave,不是Slaver。这种方式基本上不再推荐使用,只能从Master复制数据到Slave,并不提供高可用,一旦Master结点出故障就比较难处理。具体细节就不说了,反正已经不推荐使用。 Replica Set 即常说的复制集。复制集的主要目标有几个: 高可用(主要目标):当一个结点故障时自动切换到其他结点; 数据冗余(主要目标):数据复制到n个结点上,增加数据安全性,同时为高可用提供基础; 功能隔离(次要目标):使用不同的结点隔离某些有特殊需求的功能,比如使用一个结点进行OLAP运算(大规模资源占用),使用一个结点在远程做灾备(性能要求不如本地高),读写分离等等; Sharded Cluster 即分片集。分片集的主要设计目标是: 水平扩展:当一台服务器满足不了需求的时候,我们可以选择垂直扩展(增加服务器硬件),它虽然简单,但很容易达到极限,并且面临成本高等明显缺点。成本更低的方式是使用n台服务器组成集群来满足系统需求。这就是分片集的主要设计目标; 缩短响应时间:因为可以把数据分散到多台服务器上,自然每台服务器的处理压力减小,处理时间就会缩短; 这里会出现一个问题:假设每台服务器出故障的机率是x%,那么n台服务器有一台出现故障的机率就是x% * n,如果不做高可用设计,集群出现故障的概率就会随机器数量成正比增长,这在工程上是不能接受的。幸运的是我们已经有了解决高可用的方案,也就是复制集。所以MongoDB的分片集群要求每一个片都是复制集(当然测试环境也可以使用单结点,生产环境不推荐)。 总结 大概就是这样,大家的设计目标不一样,各做各的事情。
Master/Slave
先说最后一个,是Master/Slave,不是Slaver。这种方式基本上不再推荐使用,只能从Master复制数据到Slave,并不提供高可用,一旦Master结点出故障就比较难处理。具体细节就不说了,反正已经不推荐使用。
Replica Set
即常说的复制集。复制集的主要目标有几个:
Sharded Cluster
即分片集。分片集的主要设计目标是:
这里会出现一个问题:假设每台服务器出故障的机率是
x%
,那么n
台服务器有一台出现故障的机率就是x% * n
,如果不做高可用设计,集群出现故障的概率就会随机器数量成正比增长,这在工程上是不能接受的。幸运的是我们已经有了解决高可用的方案,也就是复制集。所以MongoDB的分片集群要求每一个片都是复制集(当然测试环境也可以使用单结点,生产环境不推荐)。总结
大概就是这样,大家的设计目标不一样,各做各的事情。