1 / 11
文档名称:

搭建高可用MongoDB集群.doc

格式:doc   大小:333KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

搭建高可用MongoDB集群.doc

上传人:文库旗舰店 2019/10/3 文件大小:333 KB

下载得到文件列表

搭建高可用MongoDB集群.doc

文档介绍

文档介绍:搭建高可用MongoDB集群(四):分片2014/07/02|分类: IT技术 | 0条评论 |标签: MONGODB分享到:5原文出处: 严澜的博客(@观澜而索源)   欢迎分享原创到伯乐头条按照上一节中《搭建高可用mongodb集群(三)——深入副本集》搭建后还有两个问题没有解决:l从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?l数据压力大到机器支撑不了的时候能否做到自动扩展?在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的。而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题。传统数据库怎么做海量数据读写?其实一句话概括:分而治之。上图看看就清楚了,如下taobao岳旭强在infoq中提到的架构图:上图中有个TDDL,是taobao的一个数据访问层组件,他主要的作用是SQL解析、路由处理。根据应用的请求的功能解析当前访问的sql判断是在哪个业务数据库、哪个表访问查询并返回数据结果。具体如图:说了这么多传统数据库的架构,那Nosql怎么去做到了这些呢?mysql要做到自动扩展需要加一个数据访问层用程序去扩展,数据库的增加、删除、备份还需要程序去控制。一但数据库的节点一多,要维护起来也是非常头疼的。不过mongodb所有的这一切通过他自己的内部机制就可以搞定!顿时石化了,这么牛X!还是上图看看mongodb通过哪些机制实现路由、分片:从图中可以看到有四个组件:mongos、configserver、shard、replicaset。mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。configserver,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从configserver加载配置信息,以后如果配置服务器信息变化会通知到所有的mongos更新自己的状态,这样mongos就能继续准确路由。在生产环境通常有多个configserver配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货,MongoDB集群就不会挂掉。shard,这就是传说中的分片了。上面提到一个机器就算能力再大也有天花板,就像军队打仗一样,一个人再厉害喝血瓶也拼不过对方的一个师。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做,如下图:一台机器的一个数据表Collection1存储了1T数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。也许有人问一台机器硬盘加大一点不就可以了,为什么要分给四台机器呢?不要光想到存储空间,实际运行的数据库还有硬盘的读写、网络的IO、CPU和内存的瓶颈。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况,这样还不如不分片!replicaset,上两节已经详细讲过了这个东东,怎么这里又来凑热闹!其实上图4个分片如果没有replicaset是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建replicaset副本集保证分片的可靠性。生产环境通常是2个副本+1个仲裁。说了这么多,还是来实战一下如何搭建高可用的MongoDB集群:首先确定各个组件的数量,mongos3个,configserver3个,数据分3片shardserver3个,每个shard有一个副本一个仲裁也就是3*2=6个,总共需要部署15个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里测试资源有限,只准备了3台机器,在同一台机器只要端口不同就可以,看一下物理部署图:架构搭好了,安装软件!l1、准备机器,IP分别设置为:、、。l2、分别在每台机器上建立mongodb分片对应测试文件夹。12345#存放mongodb数据文件mkdir-p/data/m