在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。

转载自严澜的博文——《如何搭建高效的MongoDB集群》

NOSQL有这些优势:

  1. 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。
  2. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。
  3. 高性能,Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。
  4. 灵活的数据模型,NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
  5. 高可用,NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。
  6. 在nosql数据库里,大部分的查询都是键值对(key、value)的方式。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

(MongoDB 高可用集群架构)

一、mongos

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

二、config server

顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。

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

三、副本集 replica set

MongoDB中,主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,并且解决了上面第一个问题:“主节点挂掉了,整个集群内会自动切换”。

客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一旦主节点挂掉,副本集通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器,这一切对于应用服务器透明存在。

四、分片 shard

        

通过将单节点中一个数据表 Collection1 存储的 1T 数据分给4个机器,以缓解硬盘读写、网络的IO、CPU和内存的瓶颈。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片服务器上。在生产环境中分片的片键要设置合理,这影响到怎么把数据均匀分到多个分片服务器中。

最新文章

  1. php设计模式之单例模式使用示例
  2. Addthis使用
  3. Mac终端Terminal调用Sublime Text
  4. MVC Model数据验证
  5. Spring Boot 4 MyBatis
  6. 【python,threading】python多线程
  7. 字符串反转(charat)
  8. SVN和Maven及Jenkins(转)
  9. Linux下查看文件夹或目录大小
  10. Java之字符串String,StringBuffer,StringBuilder
  11. SparkMLlib-----GMM算法
  12. 【Hdu3652】B-number(数位DP)
  13. Vue基础(环境配置、内部指令、全局API、选项、内置组件)
  14. [Kubernetes]容器日志的收集与管理
  15. LeakCanary监测内存泄漏的原理
  16. 关于Axure RP软件的介绍——软件工程实践第二次个人作业
  17. 修改应用进程open file值
  18. Python3.7 dataclass 介绍
  19. 前后端分离djangorestframework——分页组件
  20. Java的类继承

热门文章

  1. Django的模型层(2) - 多表操作(下)
  2. 【JUnit】junit4的几个assert方法
  3. java.net.SocketException四大异常解决方案(转)
  4. Redis五(其他操作命令)
  5. decorator & generator & iterator
  6. Python(文件处理)
  7. Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile、Study
  8. NSIS卸载后无法删除开始菜单中的内容
  9. springboot的Scheduled定时器不工作
  10. 【Head First Servlets and JSP】笔记20:EL以及<jsp:useBean ....>的补充