http://www.xuchanggang.cn/archives/1015.html

1.副本集 Replicat sets模式

MongoDB副本和分片基本概念
MongoDB副本和分片基本概念

1.主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心
2.副本集中的副本节点,在主节点挂掉后,通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器
3.Mongodb 提供了各种开发语言访问 Mongodb replica sets 的驱动程序,所以,访问地址的高可用在客户端访问代码中实现
4.Mongodb Replicat sets 同步测试
5.Mongodb Replicat sets 故障切换测试
6.Mongodb Replicat sets 读写分离配置
读写分离,将读压力分散到副本集的副本节点上,可以减轻主节点的读写压力
(1)设置读写分离,需要先在副本节点SECONDARY ,设置 setSlaveOk。
(2)在程序中设置副本节点负责读操作,

2.分片

mongos:

      数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器;
      mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上;
      在生产环境,通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server:

      顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置;
      mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据;
      mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后,如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态;
      这样, mongos 就能继续准确路由;
      在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

shard:

      这就是传说中的分片了。
      一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了;
      在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力;
      也许有人问一台机器硬盘加大一点不就可以了,为什么要分给四台机器呢?不要光想到存储空间,实际运行的数据库还有硬盘的读写、网络的IO、CPU和内存的瓶颈;
      在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上;
      在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况,这样还不如不分片!

replica set:

      分片如果没有 replica set 是个不完整架构; 假设,其中的一个分片挂掉那四分之一的数据就丢失了,所以,在高可用性的分片架构,还需要对于每一个分片构建 replica set 副本集保证分片的可靠性;      生产环境通常是 2个副本 + 1个仲裁。 

MongoDB副本和分片基本概念

 mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例

3.问题

db.books.stats(); 从上面看,我们这个插入的数据,分配很不均衡,至于何解,有待研究