本章用的自己的电脑win10 系统  因为工作上的环境也是win的  就没在虚拟机上玩  (ps: 其实上面环境都大同小异)

在MongoDB(版本 6.xx)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群。分片集群(Sharded Clustered)的服务器分为三中类型:Router(mongos),Config Server 和 Shard(Replica Set 或 Standalone mongod)。使用分片集群,不需要使用强大的计算机,就能存储更多的数据,处理更大的负载。分布式数据库系统的设计目的是:水平分片,将负载分配到多台Server,减少单机查询的负载。

一,配置服务器

config server 存储分片的元数据,元数据包括每个分片的块(chunk)列表和每个chunk包含数据的范围。路由服务区(Router)从config server上获取分片的元数据,使用元数据将读写操作路由到正确的分片上。

The metadata includes the list of chunks on every shard and the ranges that define the chunks. The mongos instances cache this data and use it to route read and write operations to the correct shards.

config server的读写操作是非常少的,config server将分片的元数据存储在config 数据库中,只有当分片的元数据变化时,比如 chunk migration,chunk split,才会修改config server中的数据。只有在mongos 第一次启动或重启时,或者分片的元数据变化时,mongos才会读取config server中的数据。mongos在读取分片的元数据之后,会缓存在本地。

Config servers store the cluster’s metadata in the config database. The mongos instances cache this data and use it to route reads and writes to shards. MongoDB only writes data to the config servers when the metadata changes, such as

  • after a chunk migration, or
  • after a chunk split.

MongoDB reads data from the config server in the following cases:

  • A new mongos starts for the first time, or an existing mongos restarts.
  • After change in the cluster metadata, such as after a chunk migration.

实际上,config server是mongod,只不过设置 --configsvr 选项。

--configsvr 指定mongod作为一个config server

二,mongos 路由服务器

mongos 为MongoDB提供路由服务,处理从application layer发送的查询请求,定位数据所在的分片,对分片上的查询结果进行combine,以完成分布式数据查询。从Application来看,mongos担当的角色是一个MongoDB Instance,隐藏了从分片上query和combine数据的复杂过程。

mongos 的重要参数

--config <filename>, -f <filename> 指定mongos 运行的参数

--configdb 指定config server列表,格式是:config-svr:port,config-svr:port

--chunkSize 指定data block的大小,单位是MB,默认值是64

--port 指定mongos 监听的TCP的端口号,默认值是27017

--logpath 指定mongos 记录日志的路径,默认情况下,MongoDB将现存的日志文件重命名,而不是重写。By default, MongoDB will move any existing log file rather than overwrite it. To instead append to the log file, set the --logappend option.

搭建mongodb分片集群前提:

1 能够知道mongodb基本的使用

2 知道mongodb的副本集,并且能够搭建

3 知道一些基本的参数

(不清楚的上一篇中有一些说明,或者mongodb 官网上充电)

下面就开始了

1 提前准备好文件夹(我分的层级比较细,也可以不用和我一样的)

mongodb的分片集我本次就用的2个分片

分片服务器:

Shard1: (一主二从)

Shard2:(一主二从)

路由服务器:

router: 单个(这个也是可以搭多个的)

配置服务器:

service: (一主二从)

这些log文件要提前创建好

c1文件夹下创建一个文件以.conf

bind_ip=0.0.0.0
port=28017
dbpath=D:\mongoDB\zone\config\c1
logpath=D:\mongoDB\zone\config\log\config28017.log
logappend=true
replSet=config
configsvr=true
oplogSize=1024

c2文件夹下创建一个文件以.conf

bind_ip=0.0.0.0
port=28018
dbpath=D:\mongoDB\zone\config\c2
logpath=D:\mongoDB\zone\config\log\config28018.log
logappend=true
replSet=config
configsvr=true
oplogSize=1024

c3文件夹下创建一个文件以.conf

bind_ip=0.0.0.0
port=28019
dbpath=D:\mongoDB\zone\config\c3
logpath=D:\mongoDB\zone\config\log\config28019.log
logappend=true
replSet=config
configsvr=true
oplogSize=1024

Shard1:

(log文件要提前创建好)

在data0-1 data0-2 data0-3中新建 .conf 文件

data0-1

#mongodb端口
port=27018

#绑定ip,只有这个ip才可以访问上mongodb
bind_ip=0.0.0.0

# 日志文件的路径
logpath=D:\mongoDB\zone\ser1\log\mongodb27018.log

# 数据文件的目录
dbpath=D:\mongoDB\zone\ser1\data0-1

#日志以追加的方式存在
logappend=true

# fork=true linux以后台方式启动,在window上没有用
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace1

data0-2

#mongodb端口
port=27019

#绑定ip,只有这个ip才可以访问上mongodb
bind_ip=0.0.0.0

# 日志文件的路径
logpath=D:\mongoDB\zone\ser1\log\mongodb27019.log

# 数据文件的目录
dbpath=D:\mongoDB\zone\ser1\data0-2

#日志以追加的方式存在
logappend=true

# fork=true linux以后台方式启动,在window上没有用
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace1

data0-3

#mongodb端口
port=27020

#绑定ip,只有这个ip才可以访问上mongodb
bind_ip=0.0.0.0

# 日志文件的路径
logpath=D:\mongoDB\zone\ser1\log\mongodb27020.log

# 数据文件的目录
dbpath=D:\mongoDB\zone\ser1\data0-3

#日志以追加的方式存在
logappend=true

# fork=true linux以后台方式启动,在window上没有用
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace1

Shard2:

这个分片也按照 Shard1 做就新了  区分好端口  和日志文件 replSet=myreplace1 这个是分片的名称 要区分开来

#mongodb端口
port=27021

#绑定ip,只有这个ip才可以访问上mongodb
bind_ip=0.0.0.0

# 日志文件的路径
logpath=D:\mongoDB\zone\ser2\log\mongodb27021.log

# 数据文件的目录
dbpath=D:\mongoDB\zone\ser2\data1-1

#日志以追加的方式存在
logappend=true

# fork=true linux以后台方式启动,在window上没有用
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace2

其他的省略。。。

router 没什么好说的  同样需要配置文件和日志文件

bind_ip=0.0.0.0
port=27017

# mongos.log 需要提前在 los 中建好
logpath=D:\mongoDB\zone\router\los\mongos.log
logappend=true
configdb=config/127.0.0.1:28017,127.0.0.1:28018,127.0.0.1:28019

到这里准备工作就完成了,下面就是准备启动了(其实可以用批处理文件启动 我就不用了)

我这边是按照自己目录来的

Shard1

mongod.exe --shardsvr --config "D:\mongoDB\zone\ser1\data0-1\27018.conf"
mongod.exe --shardsvr --config "D:\mongoDB\zone\ser1\data0-2\27019.conf"
mongod.exe --shardsvr --config "D:\mongoDB\zone\ser1\data0-3\27020.conf"

Shard2

mongod.exe --shardsvr --config "D:\mongoDB\zone\ser2\data1-1\27021.conf"
mongod.exe --shardsvr --config "D:\mongoDB\zone\ser2\data1-2\27022.conf"
mongod.exe --shardsvr --config "D:\mongoDB\zone\ser2\data1-3\27023.conf"

config:

mongod.exe --config "D:\mongoDB\zone\config\c1\28017.conf"
mongod.exe --config "D:\mongoDB\zone\config\c2\28018.conf"
mongod.exe --config "D:\mongoDB\zone\config\c3\28019.conf"

mongosh.exe --port 27018 连接到Shard1分片的任意服务器 初始化

use admin

rs.initiate({
    _id : "myreplace1",
    members : [
    {_id : 0,host : "192.168.12.1:27018","priority":10},
    {_id : 1,host : "192.168.12.1:27019"},
    {_id : 2,host : "192.168.12.1:27020"}]
});

mongosh.exe --port 27021 连接到Shard2分片的任意服务器 初始化

rs.initiate({
    _id : "myreplace2",
    members : [
    {_id : 0,host : "192.168.12.1:27021","priority":10},
    {_id : 1,host : "192.168.12.1:27022"},
    {_id : 2,host : "192.168.12.1:27023"}]
});

mongosh.exe --port 28017 连接到config分片的任意服务器 初始化

rs.initiate({
    _id : "config",
    members : [
    {_id : 0,host : "192.168.12.1:28017","priority":10},
    {_id : 1,host : "192.168.12.1:28018"},
    {_id : 2,host : "192.168.12.1:28019"}]
});

启动router 服务

mongos.exe  --config "D:\mongoDB\zone\router\27017.conf"

连接到 mongos

mongosh.exe --port 27017

use admin

-- 创建需要分片的库

sh.enableSharding("test9527")

use test9527

db.createCollection("user");

-- 创建mongodb的索引 以哈希散列
db.user.createIndex({_id:"hashed"})

use admin

sh.shardCollection("test9527.user",{_id:"hashed"})

use test9527

-- 向 user文档中插入多条数据
db.user.insert({name:"xxs",age:21});

插入了15条数据

切换到Shard1分片

切换到Shard2分片

加起来刚刚好15条 ,打完收工!!!

手把手教你搭建mongodb分片集群的更多相关文章

  1. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  2. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

  3. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

  4. 手把手教你搭建一个 Elasticsearch 集群

    为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎, ...

  5. 手把手教你搭建一个Elasticsearch集群

    一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个 ...

  6. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  7. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  8. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...

  9. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  10. mongodb分片集群

    第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...

随机推荐

  1. HarmonyOS Lottie组件,让动画绘制更简单

    原文:https://mp.weixin.qq.com/s/eC7g9ya4f_2AiNgteiyXcw,点击链接查看更多技术内容. 动画是UI界面的重要元素之一,精心设计的动画能使UI界面更直观,有 ...

  2. Win7 局域网服务器 - FTP 服务器搭建指南

    1. 打开 "开始" 菜单,找到控制面板 2. 选择 "程序" 3. 选择 "打开或关闭 Windows 功能" 4. 选择 "I ...

  3. 【6】Spring JavaConfig和常见Annotation

    Java 5 的推出,加上当年基于纯 Java Annotation 的依赖注入框架 Guice 的出现,使得 Spring 框架及其社区也"顺应民意",推出并持续完善了基于 Ja ...

  4. redis 简单整理——CEO[十五]

    前文 简单介绍一下CEO. 正文 Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置.摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来 ...

  5. 力扣38(java)-外观数列(中等)

    题目: 给定一个正整数 n ,输出外观数列的第 n 项. 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述. 你可以将其视作是由递归公式定义的数字字符串序列: count ...

  6. 关于Kubernetes规划的灵魂n问

    Kubernetes已经成为企业新一代云IT架构的重要基础设施,但是在企业部署和运维Kubernetes集群的过程中,依然充满了复杂性和困扰.阿里云容器服务自从2015年上线后,一路伴随客户和社区的成 ...

  7. 前沿分享|阿里云数据库资深技术专家 姚奕玮:AnalyticDB MySQL离在线一体化技术揭秘

    ​简介: 本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,阿里云数据库资深技术专家 姚奕玮关于"AnalyticDB MySQL离在线一体化技术揭秘&q ...

  8. [FAQ] Jetbrains 官网不能访问,获取 Goland 的下载地址

    2020.02 安装包下载 Link:https://www.cnblogs.com/farwish/p/14186441.html

  9. WPF控件:密码框绑定MVVM

    以下是一种使用 MVVM 模式的方法: 首先,在 ViewModel 中添加一个属性来保存密码,我们可以使用 SecureString 类型. // 密码变量 private SecureString ...

  10. git fatal detected dubious ownership in repository 的解决方法

    我换了一台电脑,将旧电脑的硬盘换到新电脑上:我装了双系统,切换到另一个系统时:我发现了 git 代码仓库无法执行 git 命令,不断报错 fatal: detected dubious ownersh ...