热门标签 | 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种方式的结合。


推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
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社区 版权所有