MongoDB的最为自豪的一个特色之一,分片。

  参考官方文档: https://docs.mongodb.com/manual/sharding/

  •    单机压力,高频查询CPU,IO
  •   单表压力,百万千万级

  放两张分片的描述图:

  

-------------------------------------------------------------------------------------------------------

mongoDB分片,从架构图上。
几个概念:
mongos: mongo shard表示mongo分片。需要一个或多个mongos服务,充当路由,将客户端过来的请求分发到各个分片。
config servers: mongoDB分片的配置服务器组,v3.4要求配置服务器也要是一个复制集。mongos启动时会加载配置服务器中的信息。比如mongos对某一个查询请求路由到哪一个分片上。
shard: 分片,数据真实存在的地方。每一个分片都是一个复制集。

mongod -v  查看mongod的服务端版本

mongo的shell版本可以连接后显示查看

搭建分片开始:

数据存储的目录放在 /home/work/mongodata/
日志存储的目录放在 /home/work/mongodata/logs

配置服务器的复制集(下面一个复制集三个mongod实例):

mkdir /home/work/mongodata/config1 -p
mkdir /home/work/mongodata/config2
mkdir /home/work/mongodata/config3
mkdir /home/work/mongodata/logs

# configsvr参数表示配置服务;replSet 是复制集的名称;logappend 追加日志

mongod --configsvr --replSet configset --dbpath /home/work/mongodata/config1 --port  --logpath /home/work/mongodata/logs/configsvr1.log --logappend --fork

mongod --configsvr --replSet configset --dbpath /home/work/mongodata/config2 --port  --logpath /home/work/mongodata/logs/configsvr2.log --logappend --fork

mongod --configsvr --replSet configset --dbpath /home/work/mongodata/config3 --port  --logpath /home/work/mongodata/logs/configsvr3.log --logappend --fork

# configsrv 配置复制集 配置服务器不需要仲裁节点
# 每个mongod实例以及各自的权重,priority最大的充当PRIMARY,其他是SECONDARY

$ mongo localhost:/admin

rs.initiate({ _id:"configset",members:[
{_id:,host:"hostname:20001",priority:},
{_id:,host:"hostname:20002",priority:},
{_id:,host:"hostname:20003",priority:}
]});

配置分片服务(两个分片,每个分片是一个复制集3个实例):

分片服务 shard1

mkdir /home/work/mongodata/shard1_1
mkdir /home/work/mongodata/shard1_2
mkdir /home/work/mongodata/shard1_3

启动分片服务 shardsvr参数是分片服务

mongod --shardsvr --replSet shard1 --port  --dbpath /home/work/mongodata/shard1_1 --logpath /home/work/mongodata/logs/shard1_1.log --logappend --fork

mongod --shardsvr --replSet shard1 --port  --dbpath /home/work/mongodata/shard1_2 --logpath /home/work/mongodata/logs/shard1_2.log --logappend --fork

mongod --shardsvr --replSet shard1 --port  --dbpath /home/work/mongodata/shard1_3 --logpath /home/work/mongodata/logs/shard1_3.log --logappend --fork

分片服务 shard2

mkdir /home/work/mongodata/shard2_1
mkdir /home/work/mongodata/shard2_2
mkdir /home/work/mongodata/shard2_3

启动分片服务

mongod --shardsvr --replSet shard2 --port  --dbpath /home/work/mongodata/shard2_1 --logpath /home/work/mongodata/logs/shard2_1.log --logappend --fork

mongod --shardsvr --replSet shard2 --port  --dbpath /home/work/mongodata/shard2_2 --logpath /home/work/mongodata/logs/shard2_2.log --logappend --fork

mongod --shardsvr --replSet shard2 --port  --dbpath /home/work/mongodata/shard2_3 --logpath /home/work/mongodata/logs/shard2_3.log --logappend --fork

配置复制集

# 需要进到admin数据库

$ mongo localhost:/admin

rs.slaveOk();

# 配置shard1分片
# mongodb建议每个分片复制集,要有个仲裁节点(当主服务down掉,仲裁选出新的主服务)

rs.initiate({ _id:"shard1",members:[
{_id:,host:"hostname:30001",priority:},
{_id:,host:"hostname:30002",priority:},
{_id:,host:"hostname:30003",arbiterOnly:true}
]});

#查看复制集的状态

rs.status()

# 配置shard2分片

$ mongo localhost:/admin

rs.initiate({ _id:"shard2",members:[
{_id:,host:"hostname:40001",priority:},
{_id:,host:"hostname:40002",priority:},
{_id:,host:"hostname:40003",arbiterOnly:true}
]});

# 启动mongos路由服务
# 注意mongos服务的命令不是mongod,参数中加载了配置服务器信息

mongos --configdb configset/hostname:,hostname:,hostname: --port  --logpath /home/work/mongodata/logs/mongos1.log --logappend --fork
# 进入mongos 添加分片
mongo localhost:/admin # 添加分片 hostname表示主机名
> db.runCommand({addshard :"shard1/hostname:30001,hostname:30002,hostname:30003"});
> db.runCommand({addshard :"shard2/hostname:40001,hostname:40002,hostname:40003"}); # 查看分片配置情况
> db.runCommand({listshards : }) # 选择要分片的数据库
> db.runCommand({enablesharding : "db_name"}) # 选择要分片的集合和分片的片键,这里使用了hashed后的_id 片键的选择值得讲一讲 很重要
> db.runCommand({shardcollection : "db_name.collection_name",key : {"_id": "hashed"}})
# 开始插入数据,注意是从mongos 进入所选分片的数据库

use  db_name;
for (var i = ; i <= ; i++){ db_name.collection_name.save({"id":i, "name":"user"+i}) } 查询分片情况:
db.collection_name.stats(); 或者
sh.status() # 这个命令可以查看下 mongo 实例的运行状态
mongostat --port

MongoDB的分片集群搭建的更多相关文章

  1. 【MongoDB】在windows平台下mongodb的分片集群(五)

    本篇接着上面的四篇继续讲述在window平台下mongodb的分片集群搭建. 在分片集群中也照样能够创建索引,创建索引的方式与在单独数据库中创建索引的方式一样.因此这不再多说.本篇主要聚焦在分片键的选 ...

  2. mongodb 3.4 集群搭建:分片+副本集

    mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  3. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  4. MongoDB分片集群搭建及扩容

    ### 实验:分片集群搭建及扩容#### 实验目标及流程 * 目标:学习如何搭建一个两分片的分片集群 * 环境:3台Linux虚拟机器,4Core 8GB * 步骤: * 配置域名解析 * 准备分片目 ...

  5. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  6. MongoDB之分片集群(Sharding)

    MongoDB之分片集群(Sharding) 一.基本概念 分片(sharding)是一个通过多台机器分配数据的方法.MongoDB使用分片支持大数据集和高吞吐量的操作.大数据集和高吞吐量的数据库系统 ...

  7. MongoDB高可用复制集分片集群搭建

    1     逻辑架构 1.1     逻辑架构图 1.2     组件说明 一.mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果.一 ...

  8. 【MongoDB】在windows平台下搭建mongodb的分片集群(二)

    在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...

  9. MongoDB 分片集群搭建

    一.概述 分片是一种在多台机器上分配数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作.有两种解决系统增长的方法:垂直扩展和水平扩展. 垂直扩展涉及增加单个服务器的容量,例如使用 ...

随机推荐

  1. Python运维开发:初识Python(一)

    一.Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  2. Pycharm配置anaconda环境

    概述 在上节介绍了anaconda管理python环境,而Pycharm作为主流python IDE,两者配合使用才算完美. 配置 File - Setting - Project Interpret ...

  3. git 入门教程之个性化 git

    前情概要 初识 git 时,我们就已经接触过 git 的基本配置,使用 git config 命令配置用户名和邮箱: # 配置当前项目(`local`)的用户名(`snowdreams1006`) g ...

  4. HDU 1162 Eddy's picture (最小生成树)(java版)

    Eddy's picture 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 ——每天在线,欢迎留言谈论. 题目大意: 给你N个点,求把这N个点 ...

  5. 遍历结构体内部元素和值(Name and Value)

    代码: DataStruct.MessageStruct ms = new DataStruct.MessageStruct();//实例化结构体   //遍历结构体  foreach (System ...

  6. ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

    ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将 ...

  7. Python赋值运算符

    赋值运算符 运 算 符  说 明 举 例   展 开 形 式  =   简单的赋值运算  x=y x=y  +=  加赋值 x+=y  x=x+y -=  减赋值 x-=y  x=x-y   *= 乘 ...

  8. Linux CFS调度器之负荷权重load_weight--Linux进程的管理与调度(二十五)

    1. 负荷权重 1.1 负荷权重结构struct load_weight 负荷权重用struct load_weight数据结构来表示, 保存着进程权重值weight.其定义在/include/lin ...

  9. c/c++ 智能指针 shared_ptr 和 new结合使用

    智能指针 shared_ptr 和 new结合使用 用make_shared函数初始化shared_ptr是最推荐的,但有的时候还是需要用new关键字来初始化shared_ptr. 一,先来个表格,唠 ...

  10. Lua不显示小数点0的部分

    我的环境:Unity3D 5.3.7p4 XLua版本v2.1.6 基于Lua5.3 (https://github.com/Tencent/xLua) 在Lua中数字不区分整型或浮点型,所有都是nu ...