MongoDB自学日记3——架构及HA

  在对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不是一个简单的话题,更包括容灾备份等问题,本人也没有什么实践经验,因此也只能说说一些理论的东西,希望与大家共同交流学习。

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

  

  全栈路上,没有归途。

时间: 2024-12-30 01:22:25

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

MongoDB自学日记2

首先应该明确的是为什么要学MongoDB.OK,如果是仅仅出于对于流行技术的原始兴趣,可能并不能深入学习,还必须有应用需求.刚开始学习MongoDB,因为以前对其它数据库的了解也不是特别深入,所以许多概念和原理需要梳理. 本节主要是学习访问控制权限的问题.第一步就需要创建用户,手头有一些mongodb的文档,然而估计是出版时间和版本太老了,基本都说用db.addUser创建用户,结果执行不成功.原因在于我所使用的mongodb版本是3.0.6,而从2.6版本起已经deprecated了addUs

android 自学日记(一)

android 自学日记(一) 说起日记,记忆还是小学时候学校里的作业,只记得当时通篇都是流水账,例如"几点起床,去哪里玩了,干了啥坏事什么的(额,这不能写!)...",反正都是应付学校作业,胡乱凑字数的.主要那还是自知没啥写作的天赋,上学时候的作文都是挤牙膏似地才能凑满要求的800字.理所当然的文科不好的人,理科一般都还不错,我也在偏科厉害的情况下进入了一个三流工科大学. 之后没有了这些令人痛苦的要求之后,基本就是和写东西无缘了,那是能不写就不写,包括当时的毕业论文,那是头疼了好几个

【Android自学日记】关于Bitmap的理解和使用-不完整版

最近的Android自学刚好学习到异步线程的使用,对于开启异步线程加载网络图片中用到的Bitmap有点小蒙逼,这到底是个啥???所以我就自信的打开了百度!!以下就是我学习到的知识! 百度定义: 位图文件(Bitmap),扩展名可以是.bmp或者.dib.位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2.4.8.16.24和32位色彩.例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/(8*1024)

Linux架构之HA配置

简介 通过安装该Linux-HA软件,可以实现Linux双机系统的高可用性解决方案,实现双机系统的热备份,并能够做到双机之间的无缝切换,从而对外 提供稳定可靠的服务,最终实现系统高性能RAS(reliability, availability, and serviceability). 实验环境 这里使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务. Chumjtest01 eth0 172.31.24.199  eth0:1   192.168.1.109 VIP: 

XenServer架构之HA概述

一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池中主机的运行状况.如果当前 VM 主机发生故障,HA 机制会自动将受保护的 VM 移动到一台运行状况良好的主机上.此外,如果发生故障的主机是Pool Master,HA 会自动选择另一台主机来接管Pool Master的角色,以便XenServer 资源池能够继续正常的工作. XenServer H

【Android自学日记】【转】Android Fragment 真正的完全解析(上)

自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务:以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activity交互?Fragment如何创建对话框?Frag

【Android自学日记】【转】Android Fragment 真正的完全解析(下)

上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成等~~ 1.管理Fragment回退栈 类似与Android系统为Activi

[WPF] 我的WPF自学日记2,自定义入口

在winform中入口文件就是Program.cs,而在WPF中看不到,因为它是自动生成的,可以说隐藏了,我们可以自定义一个入口文件,然后修改项目属性中的启动对象为我们自定义的入口文件. 首先新建入口文件,名字随意. 代码如下: 1 [STAThread] 2 static void Main(string[] args) 3 { 4 if (args.Length > 0) 5 { 6 App app = new App(); 7 app.Run(new MainWindow(args[0].

JAVA自学日记——Part Ⅲ

终于来到了可视化窗口制作的部分了,从学习JAVA之前,到开始入手学习,一直到现在,都在盼望着有一天可以自己写出一款有界面而且是很美观的应用程序,今天算是一个真正开始的时间节点,值得纪念. 内容有很多,首先是Swing和抽象窗口工具包:Swing提供了编写使用图形用户界面的程序所需的一切,是现在应用最广泛的一种GUI. 组件图形用户界面时,需要使用两类对象:组件和容器.组件是用户界面中的独立元素,如按钮或者滑块:容器是用于容纳其它组件的组件. 我们所需的容器和组件基本全都在javax.swing.