在对mongoDB的操作有了一定基础后,终于可以扯扯HA和架构这两个高大上的概念了。在这之前当然还得弄清楚mongoDB的Key feature:Sharding。

1. Sharding

  Shard从逻辑上来说就是整个数据的一个子集,从物理来说就是管理这一子集的服务器。一个分片可以包含多台服务器。若一个分片包含多台服务器则每台服务器都有一份完全相同的数据子集副本(Replica set)。

  分片是MongoDB强调的一个Feature。分片的目的就在于完成自动化集群运维。mongoDB cluster需要三种角色,Sharding server /Config Server /Route。

2. HA

  HA是个大话题,从一个简单系统的部署为点开始谈谈吧。

  如图所示,架构上一个mongoDB集群需要上述三种角色,这三种角色分别对应三个进程:mongos,shardsvr mongod和config mongod。

figure1

Step1:启动shard server实例1与实例2

>mongod   --shardsvr  --port  20000  --dbpath=/data/shared/s0   --fork   --logpath=/data/shard/log/s0.log   --directoryperdb

>mongod   --shardsvr  --port  20001  --dbpath=/data/shared/s1   --fork   --logpath=/data/shard/log/s1.log   --directoryperdb

Step2:启动Config Server实例

>mongod   --configsvr  --port  30000  --dbpath=/data/shared/config   --fork   --logpath=/data/shard/log/config.log   --directoryperdb

Step3:启动Route Server实例

>mongos --port 40000 --configdb  localhost:30000  --fork  --logpath=/data/shared/log/route.log  --chunkSize 64

  

  其中chunkSize指定chunk大小,单位为MB,默认大小为200MB。

  MongoDB auto-sharding解决了海量存储和动态扩容问题,然而以上离真正的生产环境HA方案还差的远。下面更进一步,搭建Replica Sets + Sharding解决方案,设计案例。

Case1:

  • Shard:使用Replica Sets,确保每个数据节点都具有备份、自动容错转移、自动恢复能力。
  • Config Server:使用3个配置服务器,确保元数据完整性,存放key的对应关系。
  • Route Server:使用方法3个路由进程,实现负载均衡,提高客户端的接入性能及并发度。
  • 搭建上述集群完毕后,可以加入memcached服务器,将高访问量的数据缓存在内存中,避免高频度的磁盘I/O,从而进一步提升性能。

                                                                          表1 小型使用案例举例

Host

IP

服务及端口分配

Server A

192.168.3.231

Mongod shard1_1: 27017

Mongod shard2_1: 27018

Mongod config1: 20000

Mongos1: 30000

Server B

192.168.3.232

Mongod shard1_2: 27017

Mongod shard2_2: 27018

Mongod config2: 20000

Mongos2: 30000

Server C

192.168.3.233

Mongod shard1_3: 27017

Mongod shard2_3: 27018

Mongod config3: 20000

Mongos3: 30000

  当然实际使用环境中的集群系统肯定更复杂,HA不是一个简单的话题,更包括容灾备份等问题,本人也没有什么实践经验,因此也只能说说一些理论的东西,希望与大家共同交流学习。

  按照惯例,要图文并茂,今天画的是坂田银时,相信园子里喜欢银魂的人不在少数,之前看到许多朋友都是银魂的头像。在孤独地编程、写作时,《银魂》似乎支撑了很多人,毒舌吐槽的背后是一个个简单而又平凡的人生真谛,温暖人心。有兴趣的可以看看新世相的这篇文章《阁下想要保护的东西已经是一片虚无》。

  

  全栈路上,没有归途。

MongoDB自学日记3——架构及HA的更多相关文章

  1. MongoDB自学日记2——权限

    首先应该明确的是为什么要学MongoDB.OK,如果是仅仅出于对于流行技术的原始兴趣,可能并不能深入学习,还必须有应用需求.刚开始学习MongoDB,因为以前对其它数据库的了解也不是特别深入,所以许多 ...

  2. MongoDB自学日记1——基本操作

    作为一个做底层及后台研发的,最近对NoSQL却产生了浓厚的兴趣,加入了一个DBA群,据说北京排的上号的DBA都在里面,然而里面基本都是Oracle系的,MySQL和MongoDB系的少之又少.学习靠不 ...

  3. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

  4. 2020重新出发,NOSQL,MongoDB分布式集群架构

    MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...

  5. Hadoop_HDFS架构和HA机制

    Hadoop学习笔记总结 01.HDFS架构 1. NameNode和ResourceManager NameNode负责HDFS,从节点是DataNode:ResourceManager负责MapR ...

  6. MongoDB自学笔记1----1.1 NoSQL是什么?

    第一章 走进MongoDB 1.1NoSQL是什么?       1.1.1NoSQL简介        对于不了解NoSQL的人都会认为NoSQL为No SQL,即不是SQL.但是这种理解是错误的, ...

  7. HDFS2.0架构以及HA详解

    HDFS2.0概述 一背景,Hadoop1.0中HDFS和MapReduce在高可用,扩展性等方面存在问题    HDFS存在问题,1,NameNode单点故障,难以应用于在线场景.2,NameNod ...

  8. MongoDB复制集概念架构浅析

    一.复制集的作用 (1) 高可用 防止设备(服务器.网络)故障. 提供自动failover 功能. 技术来保证数 (2) 灾难恢复 当发生故障时,可以从其他节点恢复. (3) 功能隔离 用于分析.报表 ...

  9. 【转】 XenServer架构之HA概述

    一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...

随机推荐

  1. 解析URL查询字符串参数为对象以及老浏览器的getElementsByClassName

    高程3使用拼接字符串形式解析的查询字符串,网上有各种正则方式解析的,记得太多,临时需要写的时候,自己都搞混乱了.只记一种吧,用正则. function getQueryStringArgs() { v ...

  2. 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]

    前言 很多地方我们都需要用到多标签分类,比如一张图片,上面有只蓝猫,另一张图片上面有一只黄狗,那么我们要识别的时候,就可以采用多标签分类这一思想了.任务一是识别出这个到底是猫还是狗?(类型)任务二是识 ...

  3. Array方法总结

    一.不影响原数组产生一个新数组 slice:切片->返回新数组->复制数组:arr.slice(0) arrayObject.slice(start,end): 切片 var arr= [ ...

  4. STL algorithm算法lexicographical_compare(30)

    lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator ...

  5. 【狼窝乀野狼】Windows Server 2008 R 配置 Microsoft Server 2008 远程登录连接

    如果你已经了解了,或者你已经经历了,那么此篇文章对你是毫无用处.因为文笔深处未必有自己亲身体验来的真实有效. 闲话少说,直接上菜. 最近脑子“抽筋”,想安装一个服务器来玩玩,那么怎么选择呢?我的PC是 ...

  6. mybatis 使用经验小结 good

    一.多数据源问题 主要思路是把dataSource.sqlSesstionFactory(用来产生sqlSession).MapperScannerConfigurer在配置中区分开,各Mapper对 ...

  7. WPF 窗体中获取键盘和鼠标无操作时的超时提示

    原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 , , );            timer.Tic ...

  8. C#实现进程内存信息获取

    using System.Collections.Generic;using System.Runtime.InteropServices;using System;using System.Diag ...

  9. cocos2d-x 在XML分析和数据存储

    无意中起到一周中的游戏,哎,时间过得总是打得那么快时,. .. 于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML.但这块是还有一个同事在做,所以不怎么熟悉), 看了看 ...

  10. 让你的sublime text写C代码 (sublime text 2 配置构建C开发环境)

    原则 1. 首先你要配置能够编译C++/C环境 2. window中配置该执行环境的环境变量,能够全局使用 3. sublime Text创建新的构建机制.并设置用改全局编译环境 具体过程 能够编译C ...