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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

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


MongoDB单机部署

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

./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"。最简单的主从配置如下:

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

./mongod.exe --dbpath ~/db/node1 --port 10001 --replSet setname/localhost:10002
./mongod.exe --dbpath ~/db/node2 --port 10002 --replSet setname/localhost:10001

./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):

./mongod.exe --dbpath ~/db/config --port 20000
./mongos.exe --configdb 127.0.0.1:20000 --port 30000
./mongod.exe --dbpath ~/db/shard1 --port 10001
./mongod.exe --dbpath ~/db/shard2 --port 10002
如果有时候启动不了某个mongod,可能和端口有关。在windows下,这样一个集群会打开很多shell窗口。这种情况下,还是三个独立的mongd,要打开上面的mongos,输入命令加入sharding片:

> use admin
> db.runCommand({addshard : "localhost:10001", allowLocal : true})
> db.runCommand({addshard : "localhost:10002", allowLocal : true})

> db.runCommand({"enablesharding" : "dbname"})

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

> db.runCommand({"shardcollection" : "dbname.collection", "key" : {"_id":1}})
dbname.collection是自己的数据库的数据集。设置的"key"需要已经建立索引。

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

> db.shards.find()
> db.chunks.find()
> 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数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
144 5
|
2月前
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
|
3月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
68 0
|
5月前
|
存储 分布式计算 算法
探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
在配置Hadoop集群之前,了解这三种模式的特点、适用场景和配置差异是非常重要的。这有助于用户根据个人需求和资源情况,选择最适合自己的Hadoop运行模式。在最初的学习和开发阶段,单机模式和伪分布式模式能为用户提供便利和成本效益。进而,当用户要处理大规模数据集时,完全分布式模式将是理想的选择。
354 2
|
5月前
|
存储 NoSQL MongoDB
今日分享MongoDB一键部署脚本
今日分享MongoDB一键部署脚本
50 0
|
5月前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
605 15
|
7月前
|
人工智能 NoSQL 关系型数据库
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
329 5
|
7月前
|
XML 分布式计算 Hadoop
分布式系统详解--框架(Hadoop-单机版搭建)
分布式系统详解--框架(Hadoop-单机版搭建)
81 0
分布式系统详解--框架(Hadoop-单机版搭建)
|
8月前
|
NoSQL 分布式数据库 MongoDB
【MongoDB 专栏】MongoDB 的分布式事务解决方案
【5月更文挑战第11天】本文探讨了MongoDB的分布式事务处理,涉及两阶段提交(2PC)、TCC补偿事务、分布式锁和幂等处理。2PC通过协调者与参与者确保数据一致性,而TCC提供更高性能和容错性。分布式锁解决并发冲突,幂等处理保证事务正确性。根据业务需求选择合适方案,并关注性能、可靠性和容错。
401 2
【MongoDB 专栏】MongoDB 的分布式事务解决方案
|
6月前
|
消息中间件 NoSQL 中间件
MongoDB多数据中心的主从结构
【7月更文挑战第3天】
61 0

热门文章

最新文章