`

MongoDB单机, 主从, 分布式部署

 
阅读更多

MongoDB是最易用的NoSQL,比较适合取代MySQL做一些存储,不过不是强一致性的。本文介绍一下MongoDB各种部署方式,并分享一些感受。前两部分“单机部署”和“主从部署”是“分片部署”的基础。

 

MongoDB单机部署

启动下载来的MongoDB包的bin目录下的mongod.exe即可打开MongoDB服务,可以添加的基本配置是:

 

[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/data --port 127.0.0.1:10000 --logpath ~/db/log  

 

 

默认的端口是27017。启动的时候必须有一个data目录,让mongod读写数据。写入数据后,data目录里的文件如图:

.lock文件如果在下次启动时候还存在,需要删除才能成功启动。"article"和"config"是数据库名字,可以特别注意一下每个文件块的大小(16M, 32M, 64M, 128M)。

 

MongoDB主从部署

主从配置是MongoDB特色之一,使之具备了容错,故障恢复等性能。主节点要声明"master",从节点们要声明"slave"和"--source"。最简单的主从配置如下:

 

[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/master --port 10000 --master  
[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/slave --port 10001 --slave --source localhost:10001  

从节点直接从主节点同步数据,从节点之间不互相同步。容错性更强的部署是一个主从集群,互相都能成为“主节点”,叫做Replica Set。在Replica Set里会有一个活跃节点和若干个备份节点。配置的时候,整个Replica Set要取个名字,然后每台都要指明一个或几个伙伴:

 

 

[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/node1 --port 10001 --replSet setname/localhost:10002  
[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/node2 --port 10002 --replSet setname/localhost:10001  

 

 

[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/node3 --port 10003 --replSet setname/localhost:10001  

 

谁成为活跃节点取决于优先级,优先级默认是1,也可以启动mongod进行设置(不具体介绍了),总之是内部的选举机制。

 

MongoDB分片部署

介绍完以上,组合起来就可以搭建一个比较强壮的分布式MongoDB集群。分片类似分布式,MongoDB以新增分片的方式,扩展自己的容量,并且能给读写负载均衡。

1. 每一个启动的mongod都是实际存放数据的地方,都能作为别人的sharding

2. 分片部署需要一个mongos,起路由分发的作用;需要一个配置服务器和若干个分片服务器(都是mongod)

3. 单机的时候,应用连接的是mongod;分布式的时候,应用连接的是mongos。

最简单的分片部署是单个的配置服务器,一个config(即mongod),一个mongos,几个sharding(即mongod):

 

[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/config --port 20000  
[java] view plaincopy
 
  1. ./mongos.exe --configdb 127.0.0.1:20000 --port 30000  
[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/shard1 --port 10001  
[java] view plaincopy
 
  1. ./mongod.exe --dbpath ~/db/shard2 --port 10002  

如果有时候启动不了某个mongod,可能和端口有关。在windows下,这样一个集群会打开很多shell窗口。这种情况下,还是三个独立的mongd,要打开上面的mongos,输入命令加入sharding片:

 

 

[java] view plaincopy
 
  1. > use admin  
  2. > db.runCommand({addshard : "localhost:10001", allowLocal : true})  
  3. > db.runCommand({addshard : "localhost:10002", allowLocal : true})  

 

 

[java] view plaincopy
 
  1. > db.runCommand({"enablesharding" : "dbname"})  

 

还要设置片建,以提供负载均衡的依据:

 

[java] view plaincopy
 
  1. > db.runCommand({"shardcollection" : "dbname.collection""key" : {"_id":1}})  

dbname.collection是自己的数据库的数据集。设置的"key"需要已经建立索引。

 

mongos下还有一些查看分片情况的命令,方便集群的管理和监控,可以自己体验下:

 

[java] view plaincopy
 
  1. > db.shards.find()  
  2. > db.chunks.find()  
  3. > db.printShardingStatus()  

也可以通过runCommand的其他命令添加新的片,删除已有的片,而且添加的片可以是旧的mongod。

 

测试开发的时候像上面这样的一组可能够了,真正健壮的集群可能要具备下面三个条件:

1. 多个配置服务器config1, config2, config3(可以都经过一个mongos来路由)

2. 每个sharding都是Replica Set

3. 每一台物理物理服务器承担若干个不同的进程(mongos, shards, config)

就像下面这种图呈现的一样:


我们可以这样理解mongos, shards, config三样东西:

1. shards是一些实际存数据的可以单独使用的db,他们能分配给任何config server,而且添加删除都很方便。

2. 每个shard里有若干个地位平等的mongods,所以每个是一个Replica Set(副本集)

3. 一个config手下带领好几个shards,目的是负载和扩容,他们之间需要mongos来路由

4. mongos是一个路由,可以路由一个或多个config servers,不需要很大的分配空间

5. 每一个客户端的应用,每一张数据库表,最好对应一个config server和一个mongos

以上内容里的"--port" 部分改为IP:port就可以分布式环境了。比较合理的节省物理服务器的配置方法可以像下图这样:

不把所有鸡蛋扔一个篮子里。

分享到:
评论

相关推荐

    mongodb的大型分布式部署

    ### MongoDB大型分布式部署详解 #### 一、MongoDB大型分布式部署概述 MongoDB是一种非常流行的NoSQL数据库系统,尤其适用于需要处理大量非结构化数据的应用场景。随着业务的增长和技术的发展,单机部署往往无法...

    58同城高级系统架构师带你实战MongoDB集群分布式存储

    MongoDB支持多种部署模式,包括单机部署、主从复制、副本集和分片等。其中,**集群**主要是指通过**分片(Sharding)**和**副本集(Replica Set)**两种技术实现的数据分布和高可用解决方案。 1. **分片(Sharding...

    Difeye-敏捷的轻量级PHP框架 v1.1.5

    ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例; ◆增加thrift模块,多线程支持hadoop HDFS海量存储组件 ◆增加hadoop、LEMP、Mongodb等配置手册;

    Difeye-敏捷的轻量级PHP框架 v1.1.5.zip

    ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例; ◆增加thrift模块,多线程支持hadoop HDFS海量存储组件 ◆修正thrift传输编码问题、优化传输速度 ◆增加...

    Difeye 1.1.5.rar

    ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例; ◆增加thrift模块,多线程支持hadoop HDFS海量存储组件 ◆修正thrift传输编码问题、优化传输速度 ◆增加...

    MongoDB权威指南中文版

    MongoDB支持多种部署模式,包括单机部署、主从复制、分片集群等。其中,分片集群是一种水平扩展的方式,通过将数据分布在多个服务器上来提高系统的负载能力。此外,MongoDB还支持自动故障转移和数据冗余,确保系统的...

    基于Scrapy技术的分布式爬虫的设计与优化.pdf

    本文介绍了一种基于Scrapy框架和Redis数据库的主从模式分布式爬虫系统的设计与优化,旨在克服传统单机爬虫的局限,并提供系统的稳定性、扩展性和效率。 首先,我们了解爬虫的基本工作原理。爬虫在工作时将网页链接...

    分布式数据库选型方案.docx

    - **分布式中间件**:采用存储与计算分离的架构,底层使用传统的单机数据库,通过主从复制机制实现副本间的同步。上层进行计算并将部分任务下推至存储节点。 - **分布式事务**:底层采用单机库,通过分布式一致性...

    大型分布式网站架构设计与实战

    3. **数据库分布式**:单机数据库往往无法满足高性能和高可用性的需求,因此需要采用分布式数据库如MySQL主从复制、分片、读写分离、分布式事务等策略。NoSQL数据库如MongoDB、Cassandra也在处理非结构化数据时发挥...

    分布式数据库选型分析.docx

    - **分布式中间件**:基于中间件技术演进而来,采用存储与计算分离架构,底层使用标准单机数据库,副本间基于数据库主从复制机制。上层进行计算,部分计算可下推到存储节点执行。 - **分布式事务**:受到Google论文...

    Java思维导图xmind文件+导出图片

    如何把应用从单机扩展到分布式 大型分布式架构演进过程 分布式架构设计 主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么是分布式架构下的高可用...

    易买网电商项目 数据集 集群 单机 包含需要的war包

    为了保证数据安全和高可用,数据库通常会设置主从复制或者分布式集群。 此外,考虑到电商系统的安全性,项目可能还涉及SSL证书、身份验证(如OAuth2)、授权(如JWT)以及防止SQL注入和XSS攻击的安全措施。同时,...

    分布式架构的演进.docx

    当数据量达到一定程度,单机数据库无法满足需求,这时可以引入分布式数据库,如MySQL主从复制、ShardingSphere等,以及分布式文件系统,如Hadoop HDFS,解决大规模数据的存储和处理问题。 随着业务复杂度的增加,...

    10NoSQL非关系型数据库.zip

    - **部署**:MongoDB的部署包括单机、复制集、分片集群等多种模式,适应不同规模的场景。 - **数据类型**:MongoDB同样有多种数据类型,如整数、浮点数、字符串、数组、对象等,且支持复杂查询和聚合操作。 - **...

    最热门的Java 分布式面试题汇总

    18. 分布式ID生成:可使用雪花算法、UUID、MongoDB自增ID、Twitter的Snowflake或分布式ID生成服务如Seq。 19. 分布式事务解决方案:两阶段提交、三阶段提交、Saga、分布式事务协调器(如X/Open XA)等。 20. 大...

    淘宝数据库架构演进历程.pdf

    2. 集群化阶段:随着业务的发展,单机数据库无法满足高并发和大规模数据的需求,淘宝开始采用数据库集群,通过主从复制、读写分离来提高系统性能。这一阶段,MySQL Replication和Master-Slave架构成为了主流,读写...

    高并发架构一些技术套路杂谈

    随着数据规模的不断扩大,传统的单机存储已经无法满足需求,分布式存储与计算技术应运而生。 - **Hadoop**:基于MapReduce计算模型,可以处理PB级别的数据,是大数据处理领域的主流技术之一。 - **Spark**:相较于...

    在线百万用户量下的系统架构

    考虑使用分布式数据库,如MySQL的主从复制、分片或者更先进的NoSQL解决方案,如MongoDB、Cassandra,来分散读写压力。此外,缓存机制如Redis或Memcached也能显著提升读取速度。 **微服务架构**也是处理大规模用户的...

    大型网站架构演变和知识体系

    数据库方面,从最初的单机数据库演变为分布式数据库,如分片、读写分离、主从复制等策略,以应对大数据量和高并发的挑战。NoSQL数据库如MongoDB、Cassandra也因其灵活性和可扩展性得到了广泛应用。 缓存策略是提升...

    从运维角度看中大型网站架构的演变之路

    【运维角度看中大型网站架构的演变之路】 随着网站规模的扩大和用户数量的...以上就是中大型网站架构从单机到分布式、从简单到复杂的演进过程,每个阶段都针对特定问题提出了解决方案,以确保网站的稳定性和高效运行。

Global site tag (gtag.js) - Google Analytics