热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库集群安装配置

MongoDB集群中包含一个自动分片模块(“mongos”).自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器。自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。在一个mongodb的集群中包括一些s

MongoDB 集群中包含一个自动分片模块 (“mongos”). 自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器。自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。在一个mongodb的集群中包括一些shards(mongod进程),mongos的路由进程,一个或多个config服务器。sharding是一种对大规模数据存储的一种策略,关于sharding的详细信息可以查看这里。也许有人会问,为什么需要做这种策略,因为在一个大型系统中最后的瓶颈会落在网络的带宽和磁盘的读写上,如果将数据分布在多个机器上的多个磁盘上,将会系统数据的处理能有所提高。

MongoDB 集群的结构
下图中Shard是指每个节点的shard有一个或更多的服务器和存储数据的mongod进程,而mongod是MongoDB数据的核心进程。

每台机器上的mongod从配置获取服务器(元数据metadata ),然后,当收到客户端请求时,它请求路由到相应的服务器组和编译结果发送回客户端。

mongos进行可以被看作是一个路由和协调的过程,因为他可以使得每个单一的各个节点组成一个集群系统。 另外还需要强调一点mongos进程没有持久状态,每个实例都需要一定的数据存储的内存空间。

换而言之,所谓MongoDB 集群也就是 MongoDB做了一个数据库路由的策略,而且保证跨库操作的数据库事务,而MongoDB 集群中的关键部分Sharding不是一门新技术,而是一种策略,关键还是看应用场景和案例提供的可用性,因为Sharding不仅仅是MongoDB 集群中所提到的分布在不同的机器上,还可以分表,分区,分数据,等等。

http://upload.server110.com/image/20131127/1255015029-0.png

MongoDB 集群的工作原理:

其中有一个服务器上存储着集群的metadata信息,包括每个服务器,每个shard的基本信息和chunk信息Config Server 主要存储的是chunk信息。每一个config服务器都复制了完整的chunk信息,就是下图中左边黄色的部分。

如果客户端对集群的MongoDB插入一条数据,客户端并不知道刚刚插入的数据被分配到具体哪个MongoDB节点上了,因为当一条数据被传入 MongoDB集群中通过mongos路由,所以我们并感觉不到是数据存放在哪个shard的 chunk上,但是通过后台的Sharding的管理命令可以看到插入的数据存放在哪个节点上。

http://upload.server110.com/image/20131127/1255014Z3-1.png

配置MongoDB集群

模拟2个shard服务、一个config服务、一个mongos process,全部运行在一个测试的服务器上,具体配置步骤如下:
口水: ?shardsvr 是表示以sharding模式启动Mongodb服务器,Mongodb数据同步方式参见我写的另外一篇文章“MongoDB 主(Master)/从(Slave)数据同步 ”

$ mkdir /data/db/a
$ mkdir /data/db/b
$ mkdir /data/db/config
$ ./mongod ?shardsvr ?dbpath /data/db/a ?port 10000 > /tmp/sharda.log &
$ cat /tmp/sharda.log
$ ./mongod ?shardsvr ?dbpath /data/db/b ?port 10001 > /tmp/shardb.log &
$ cat /tmp/shardb.log
$ ./mongod ?configsvr ?dbpath /data/db/config ?port 20000 > /tmp/configdb.log &
$ cat /tmp/configdb.log
$ ./mongos ?configdb localhost:20000 > /tmp/mongos.log &
$ cat /tmp/mongos.log
$ # we connect to mongos process
$ ./mongo
MongoDB shell version: 1.1.0-
url: test
connecting to: test
type "help" for help
> use admin
switched to db admin
> db.runCommand( { addshard : "localhost:10000", allowLocal : true } )
{"ok" : 1 , "added" : "localhost:10000"}
> db.runCommand( { addshard : "localhost:10001", allowLocal : true } )
{"ok" : 1 , "added" : "localhost:10001"}
> config = connect("localhost:20000")
> config = config.getSisterDB("config")
> test = db.getSisterDB("test")
test
> db.runCommand( { enablesharding : "test" } )
{"ok" : 1}
> db.runCommand( { shardcollection : "test.people", key : {name : 1} } )
{"ok" : 1}
> db.runCommand({listshards:1})
{"servers" : [{"_id" :  ObjectId( "4a9d40c981ba1487ccfaa634")  , "host" : "localhost:10000"},
{"_id" :  ObjectId( "4a9d40df81ba1487ccfaa635")  , "host" : "localhost:10001"}] ,
"ok" : 1}
>

BTW:
MongoDB是一个介于关系数据库和非关系数据库之间的产品,MongoDB的数据结构非常松散,他的数据格式类似json的bjson格式,因此可以存储比较复杂的数据类型。

另外,Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongo还可以解决海量数据的查询效率,根据官方文档,当数据量达到50GB以上数据时,Mongo数据库访问速度是MySQL10 倍以上。对于这点我将来会去做些试验来进行证明。

每个节点上都是单点的,不知道MongoDB Sharding+Replication是什么效果,因为被散列的服务器还是存在着单点的现象,如果其中一个散列的节点坏点那么数据就不存在了。下面还要试试这2种方式的结合。


推荐阅读
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 利用 Jest 和 Supertest 实现接口测试的全面指南
    本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
author-avatar
sprite_77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有