MongoDB具有扩展能力,可在分布式平台集群环境下运行,即分片。

数据的不同部分可利用索引分配给不同的服务器。例如,索引记录中的客户放在一组服务器上,供应商放在另一组服务器上。但是,若要完全随机分布,则需使用索引散列值。您也可以利用一系列值将数据分配给多个服务器。

分片集群
MongoDB基础架构如图所示。您可与路由器进行通信,它们可以轮询配置(config)服务器,以确定写入和读取数据的分片(shard)服务器,即数据存储位置。配置服务器也可作为复制集,即在此复制数据,以获得额外副本。

生产环境下应至少有3个配置服务器。这里,我们展示开发环境如何建立分片配置,其中至少使用1个路由器、1个配置服务器和1个分片服务器。

安装软件和设置虚拟机
我们需要三个虚拟机。如下所示,在/ etc / hosts中,我们设置了三个虚拟机。您可以设置任何想要的IP地址,但为了本教程的目的,我们使用下面相同的名称设置主机名。

我们采用:

mongomaster—这是路由器。
mongoshard—这是我们用来分片的数据库服务器,即在集群环境下运行。
mongoconfig—这是配置服务器和数据库副本。
192.168.20.150 mongomaster
192.168.20.149 mongoshard
192.168.20.170 mongoconfig
安装软件
我们在Ubuntu 16.04上使用Mongo 3.4.10。我说过,因为Mongo改变了软件,服务器不再只是配置服务器。相反,配置服务器可用作副本。其他副本只能是副本。

Mongo软件安装在所有三个服务器上。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 -- recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
创建配置服务器复制集
rs是我们给这个复制集的命名。–-configsvr 切换表示这个复制集可以用作副本服务器和配置服务器。
ssh mongoconfig
sudo mongod --configsvr --dbpath /data/configdb --replSet rs
现在,通过任何服务器运行mongo。我们连接到端口27019,因为标准输出(stdout)中,启动mongod时,这是mongod显示正在监听的位置:

这个节点在配置中是mongoconfig:27019。

初始化。
mongo --host mongoconfig --port 27019
rs.initiate()
然后观察状态,确认是配置服务器:
rs.status()
{
"set" : "rs",
"date" : ISODate("2017-10-28T06:38:52.355Z"),
"myState" : 1,
"term" : NumberLong(1),
"configsvr" : true,

在分片服务器上启动Mongod
ssh mongoshard
sudo mongod --shardsvr --replSet
现在,使用mongo客户端连接并对其进行初始化:
mongo --host monogshard --port 2718
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "mongoshard:27018",
"ok" : 1
}
在路由器上启动Mongos
ssh mongomaster
mongos --configdb rs/mongoconfig:27019
注意标准输出中的这个消息,它给我们提供下一步的端口号:

等待27017端口连接
在集群中添加分片
mongo --host mongomaster --port 27017
sh.addShard( "rs/mongoshard:27018")
{ "shardAdded" : "rs", "ok" : 1 }
启用数据库分片
可以使用任何数据库名。记住数据库名,以便不存在时创建。我们使用烟草,因为这是我们上一篇教程中使用的名称,即使用NodeJS和MongoDB时的数据库名。
sh.enableSharding("tobacco")
{ "ok" : 1 }
检查状态
看看数据库是否存在并且分片。
sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("59f425f12fdbabb0db68b690")
}
shards:
{ "_id" : "rs", "host" : "rs/mongoshard:27018", "state" : 1 }
active mongoses:
"3.4.10" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
NaN
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "tobacco", "primary" : "rs", "partitioned" : true }

转载于:https://blog.51cto.com/13674496/2091569

MongoDB分片详细说明(ITSOM)相关推荐

  1. MongoDB 分片的原理、搭建、应用

    一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...

  2. mongodb 启动_精心总结--mongodb分片集群启动与关闭

    概述 网上教程有点坑啊,很多bug,今天刚好涉及到所以抽空整理了下mongodb分片集群启动与关闭方面的教程.希望对大家有点帮助. 基础环境配置 192.168.240.145 测试Nosql服务器1 ...

  3. MongoDb分片集群认证

    本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), Mong ...

  4. mongodb分片概念和原理-实战分片集群

    一.分片 分片是一种跨多台机器分发数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 问题: 具有大型数据集或高吞吐量应用程序的数据库系统可能会挑战单个服务器的容量.例如 ...

  5. MongoDB分片实战

    1. 集群搭建 1.1环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NU ...

  6. MongoDB分片(Sharding)技术

    C/C++Linux服务器开发/后台架构师知识体系整理 分片(sharding)是 MongoDB 用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法.尽管分片起源于关系型数据库分区,但 ...

  7. MongoDB 分片的原理、搭建、应用 (转)

    一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...

  8. 【转】MongoDB 分片的原理、搭建、应用

    一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...

  9. mongodb 超详细的操作集锦

    mongodb 超详细的操作集锦 数据库相关操作 集合相关操作 mongo中的操作符 CRUD相关操作 运算符操作 可以直接用命令行进行操作,也可以使用可视化工具,可视化工具推荐使用Robo,Robo ...

最新文章

  1. 对于大数据大流量情况下微软架构的水平扩展的遐想(瞎想)
  2. js_sqlite_ADODB.Connection
  3. No.3 clojure 调用 Java
  4. 《实例化需求》读书笔记
  5. 安卓虚拟机与Hyper-V冲突
  6. python伪代码书写规范_代码这样写更优雅(Python 版)(转载)
  7. 如何实现插入数据时自动更新另外一个表的内容
  8. [HTML5_资源]给网页设计师的30个HTML5学习资源
  9. 初学Java,第一段代码
  10. js图片绘制框架 (折线图、柱状图、饼图、热力图) echarts
  11. 深度学习综述(下载PDF版)
  12. 忽悠马云10亿,还阿里4500亿:做对事赢一场,跟对人赢一生!
  13. 三菱触摸屏通讯错误_s7-200和三菱触摸屏通讯的问题
  14. win10打开蓝牙_联想笔记本win10无法连接蓝牙音箱的解决方法
  15. 论文特色自我评价内容结构
  16. 【转】我那实现了自己理想的创业老公,却一毛钱股份都没有拿到
  17. python 战棋游戏代码实现(1):生物行走和攻击选择
  18. Scylla3.0.4在CentOS7.4上的安装
  19. debian技术--搭建debian软件仓库
  20. 洛谷 P1618 STL全排列方法

热门文章

  1. bzoj1108[POI2007]天然气管道Gaz*
  2. 5.1.3.jvm java虚拟机系统参数查看
  3. ZendServer下安装Typecho需要注意问题
  4. 【scala初学】scala symbol 符号 -3
  5. 提升tomcat服务器性能的七条经验
  6. 2012体感发展加速,微软再添新对手
  7. IntelliJ IDEA 2018.1新特性
  8. linux下mysql修改字符集,远程连接
  9. Linux实战案例(5)关闭Centos的防火墙
  10. NoDrives-显示与隐藏驱动器【盘符的显示与隐藏】