MongoDB分片

2023-11-06

MongoDB分片

集群搭建 环境准备

mongo1(127.0.0.1) mongo2(127.0.0.1) mongo3(127.0.0.1)

config1(端口:27018) config2(端口:27028) config3(端口:27038)

mongos1(端口:27019) mongos2(端口:27029) mongos3(端口:27039)

Shard1(端口:27001) Shard1(端口:27021) Shard1(端口:27031)

Shard2(端口:27002) Shard2(端口:27022) Shard2(端口:27032)

Shard3(端口:27003) Shard3(端口:27023) Shard3(端口:27033)

实际当中,mong1,mongo2 ,mongo3应当是在三台不同的服务器,mongos应当与config部署在不同的服务器,各shard组副本集应当部署在不同的服务器,

config可以与shard片部署在同一服务器,也就是说要达到性能最优,至少应当有6台服务器,mongos用3台,config和3组Shard用3台。

本文中就以本地Windows环境为例,

用不同的端口作为伪服务器演示搭建配置过程

目录结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件配置

mongo1

config

net:
  port: 27018  #config1的端口,mongo2下的为27028,mongo3下的为27038
  bindIp: 0.0.0.0  #允许连接地址,这里统一设置为允许任何ip连接
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo1\log\config.log  #config的日志存储地址,mongo2,mongo3下路径调整即可
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo1\data\config   #config的数据存储地址,mongo2、mongo3下做相应的调整
  journal:
    enabled: true #数据故障恢复和持久化,肯定是开启
#processManagement:
#  fork: true    #linux下打开此设置,Windows环境下后台启动需要注册服务,
#  pidFilePath: /mongo/config/run/mongod.pid
#副本集名称设置
replication:
  replSetName: configs
#分片集群角色,配置服务器的固定值
sharding:
  clusterRole: configsvr
#这里是集群安全认证配置,首次配置启动集群不打开此配置,先留着,后面再说
#security: 
  #keyFile: D:\tool\mongodbmy\mongo\mongodb-keyfile.file
  #authorization: enabled

shard1.conf

net:
  port: 27001   #mongo1下其他两个分片shard2为27002,shard3为27003,mongo2、mongo3下对应上面的服务编排表设置端口
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo1\log\shard1.log #mongo1下其他两个分片shard2为shard2.log,shard3为shard3.log,mongo2、mongo3下对应做调整
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo1\data\shard1  #mongo1下其他两个分片shard2为shard2,shard3为shard3,mongo2、mongo3下对应做调整
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard1/run/mongod.pid
replication:
  replSetName: shard1  #副本集名称,下其他两个分片对应调整shard2为shard2,shard3为shard3
sharding:
  clusterRole: shardsvr #集群中角色归属

shard2.conf

net:
  port: 27002
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo1\log\shard2.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo1\data\shard2
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard2/run/mongod.pid
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr

shard3.conf

net:
  port: 27003
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo1\log\shard3.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo1\data\shard3
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard3/run/mongod.pid
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr

mongos.conf

systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo1\log\mongos.log
# network interfaces
net:
  port: 27019
  bindIp: 0.0.0.0
setParameter:
  enableLocalhostAuthBypass: false
#注意!此处配置的连接地址为配置服务器config Serve的副本集名称和所在服务器地址以及端口
sharding:
  configDB: configs/127.0.0.1:27018,127.0.0.1:27028,127.0.0.1:27038

mongo2

config

net:
  port: 27028  #config1的端口,mongo2下的为27028,mongo3下的为27038
  bindIp: 0.0.0.0  #允许连接地址,这里统一设置为允许任何ip连接
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo2\log\config.log  #config的日志存储地址,mongo2,mongo3下路径调整即可
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo2\data\config   #config的数据存储地址,mongo2、mongo3下做相应的调整
  journal:
    enabled: true #数据故障恢复和持久化,肯定是开启
#processManagement:
#  fork: true    #linux下打开此设置,Windows环境下后台启动需要注册服务,
#  pidFilePath: /mongo/config/run/mongod.pid
#副本集名称设置
replication:
  replSetName: configs
#分片集群角色,配置服务器的固定值
sharding:
  clusterRole: configsvr
#这里是集群安全认证配置,首次配置启动集群不打开此配置,先留着,后面再说
#security: 
#  keyFile: D:\tool\mongodbmy\mongo\mongodb-keyfile.file
#  authorization: enabled

shard1.conf

net:
  port: 27021   #mongo1下其他两个分片shard2为27002,shard3为27003,mongo2、mongo3下对应上面的服务编排表设置端口
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo2\log\shard1.log #mongo1下其他两个分片shard2为shard2.log,shard3为shard3.log,mongo2、mongo3下对应做调整
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo2\data\shard1  #mongo1下其他两个分片shard2为shard2,shard3为shard3,mongo2、mongo3下对应做调整
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard1/run/mongod.pid
replication:
  replSetName: shard1  #副本集名称,下其他两个分片对应调整shard2为shard2,shard3为shard3
sharding:
  clusterRole: shardsvr #集群中角色归属

shard2.conf

net:
  port: 27022
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo2\log\shard2.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo2\data\shard2
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard2/run/mongod.pid
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr

shard3.conf

net:
  port: 27023
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo2\log\shard3.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo2\data\shard3
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard3/run/mongod.pid
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr

mongos.conf

systemLog:
  destination: file
  logAppend: true
  path:  D:\software\MongoDB\mongodb_s\mongo2\log\mongos.log #mongos没有数据存储地址,只有日志输出地址,mongo2、mongo3下做对应的地址调整
# network interfaces
net:
  port: 27029 # mongos1的端口,mongos2为27029,mongos3为27039
  bindIp: 0.0.0.0
setParameter:
  enableLocalhostAuthBypass: false
#注意!此处配置的连接地址为配置服务器config Serve的副本集名称和所在服务器地址以及端口
sharding:
  configDB: configs/127.0.0.1:27018,127.0.0.1:27028,127.0.0.1:27038

mongo3

config

net:
  port: 27038  #config1的端口,mongo2下的为27028,mongo3下的为27038
  bindIp: 0.0.0.0  #允许连接地址,这里统一设置为允许任何ip连接
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo3\log\config.log  #config的日志存储地址,mongo2,mongo3下路径调整即可
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo3\data\config   #config的数据存储地址,mongo2、mongo3下做相应的调整
  journal:
    enabled: true #数据故障恢复和持久化,肯定是开启
#processManagement:
#  fork: true    #linux下打开此设置,Windows环境下后台启动需要注册服务,
#  pidFilePath: /mongo/config/run/mongod.pid
#副本集名称设置
replication:
  replSetName: configs
#分片集群角色,配置服务器的固定值
sharding:
  clusterRole: configsvr
#这里是集群安全认证配置,首次配置启动集群不打开此配置,先留着,后面再说
#security: 
#  keyFile: D:\tool\mongodbmy\mongo\mongodb-keyfile.file
#  authorization: enabled

shard1.conf

net:
  port: 27031   #mongo1下其他两个分片shard2为27002,shard3为27003,mongo2、mongo3下对应上面的服务编排表设置端口
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo3\log\shard1.log #mongo1下其他两个分片shard2为shard2.log,shard3为shard3.log,mongo2、mongo3下对应做调整
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo3\data\shard1  #mongo1下其他两个分片shard2为shard2,shard3为shard3,mongo2、mongo3下对应做调整
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard1/run/mongod.pid
replication:
  replSetName: shard1  #副本集名称,下其他两个分片对应调整shard2为shard2,shard3为shard3
sharding:
  clusterRole: shardsvr #集群中角色归属

shard2.conf

net:
  port: 27032
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo3\log\shard2.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo3\data\shard2
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard2/run/mongod.pid
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr

shard3.conf

net:
  port: 27033
  bindIp: 0.0.0.0
systemLog:
  destination: file
  logAppend: true
  path: D:\software\MongoDB\mongodb_s\mongo3\log\shard3.log
storage:
  dbPath: D:\software\MongoDB\mongodb_s\mongo3\data\shard3
  journal:
    enabled: true
#processManagement:
#  fork: true
#  pidFilePath: /mongo/shard3/run/mongod.pid
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr

mongos.conf

systemLog:
  destination: file
  logAppend: true
  path:  D:\\software\\MongoDB\\mongodb_s\\mongo3\\log\\mongos.log
# network interfaces
net:
  port: 27039 # mongos1的端口,mongos2为27029,mongos3为27039
  bindIp: 0.0.0.0
setParameter:
  enableLocalhostAuthBypass: false
#注意!此处配置的连接地址为配置服务器config Serve的副本集名称和所在服务器地址以及端口
sharding:
  configDB: configs/127.0.0.1:27018,127.0.0.1:27028,127.0.0.1:27038

分片集群必须按照一定的顺序启动:config serve,Shard ,Mongos

配置config server

启动服务器

mongod.exe -f D:\software\MongoDB\mongodb_s\mongo1\config\config.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo2\config\config.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo3\config\config.conf

连接服务器配置

[1]然后新开窗口连接到任意一台config server 【真实服务器下,不要忘记指定IP,默认为127.0.0.1】

mongo -host 127.0.0.1  --port 27018

[2]配置配置服务器副本集

config = {
    _id : "configs",     
    members :
    [         
        {_id : 0, host : "127.0.0.1:27018" },         
        {_id : 1, host : "127.0.0.1:27028" },         
        {_id : 2, host : "127.0.0.1:27038" }     
    ]  
}

[3]初始化副本集

rs.initiate(config)

[4]查看副本集状态

rs.status()

上述【1】【2】【3】【4】四个指令执行完毕后, mongos1/mongos2/mongos3服务器中 data/config 和 logs/config 文件夹中将会生产相应的文件

配置Shard服务

启动服务器

mongod.exe -f D:\software\MongoDB\mongodb_s\mongo1\config\shard1.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo2\config\shard1.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo3\config\shard1.conf

连接服务器配置

【A1】新开窗口连接到mong1文件夹的shard1

mongosh.exe --port 27001

【B1】配置mong1文件夹的shard1的副本集:

config = { _id : "shard1",
members : [ 
{_id : 0, host : "127.0.0.1:27001"},
{_id : 1, host : "127.0.0.1:27021"},
{_id : 2, host : "127.0.0.1:27031"}
] }

【C1】初始化mong1文件夹的副本集:

rs.initiate(config);

shard2:

mongod.exe -f D:\software\MongoDB\mongodb_s\mongo1\config\shard2.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo2\config\shard2.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo3\config\shard2.conf

【A2】新开窗口连接到mong2文件夹的shard2

mongosh.exe --port 27002

【B2】配置mong2文件夹的shard2的副本集:

config = { 
    _id : "shard2",
    members : 
    [
        {_id : 0,host : "127.0.0.1:27002"},
        {_id : 1,host : "127.0.0.1:27022"},
        {_id : 2,host : "127.0.0.1:27032"}
    ] 
}

【C2】初始化mong2文件夹的副本集:

rs.initiate(config);

开启分片3副本集:

mongod.exe -f D:\software\MongoDB\mongodb_s\mongo1\config\shard3.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo2\config\shard3.conf
mongod.exe -f D:\software\MongoDB\mongodb_s\mongo3\config\shard3.conf

【A3】新开窗口连接到mong3文件夹的shard3

mongo --port 27003

【B3】配置mong3文件夹的shard3的副本集:

config = {
    _id : "shard3",
    members : 
    [
        {_id : 0, host : "127.0.0.1:27003"},
        {_id : 1, host : "127.0.0.1:27023"},
        {_id : 2, host : "127.0.0.1:27033"}
    ] 
}

【C3】初始化mong3文件夹的副本集:

rs.initiate(config);

配置mongos服务器

启动服务器

开启三个窗口:

mongos.exe -f D:\software\MongoDB\mongodb_s\mongo1\config\mongos.conf
mongos.exe -f D:\software\MongoDB\mongodb_s\mongo2\config\mongos.conf
mongos.exe -f D:\software\MongoDB\mongodb_s\mongo3\config\mongos.conf

连接服务器配置

【S1】新开一个窗口:连接任意一个mongos,

mongo --port 27019

【S2】然后使用admin库,启用集群分片:

use admin;
sh.addShard("shard1/127.0.0.1:27001,127.0.0.1:27021,127.0.0.1:27031");
sh.addShard("shard2/127.0.0.1:27002,127.0.0.1:27022,127.0.0.1:27032");
sh.addShard("shard3/127.0.0.1:27003,127.0.0.1:27023,127.0.0.1:27033");

至此,分片集群搭建完成.

测试MongoDB服务器分片功能

#设置一下chunk的大小:
use config;
db.setting.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,不然需要插入海量数据

#模拟写入数据
use testdb;
#启用数据库分片
sh.enableSharding("testdb")
#创建集合
use testdb;
db.createCollection("user");
db.user.createIndex({"name":"hased"}) # 以"name"作哈希索引分片键
sh.shardCollection( "testdb.user", { "name" : "hashed" } ) #对user集合启用分片

for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"zzx"+i})} #模拟往mytest数据库的user表写入5万数据
sh.status() # 查看分片情况
sh.help() # 查看sh下所有指令
db.settings.help()  # 查看数据库分片帮助指令
db.runCommand({listShards:1})  # 查看分片列表,所有分片

测试MongoDB服务器分片功能

#设置一下chunk的大小:
use config;
db.setting.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,不然需要插入海量数据

#模拟写入数据
use testdb;
#启用数据库分片
sh.enableSharding("testdb")
#创建集合
use testdb;
db.createCollection("user");
db.user.createIndex({"name":"hased"}) # 以"name"作哈希索引分片键
sh.shardCollection( "testdb.user", { "name" : "hashed" } ) #对user集合启用分片

for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"zzx"+i})} #模拟往mytest数据库的user表写入5万数据
sh.status() # 查看分片情况
sh.help() # 查看sh下所有指令
db.settings.help()  # 查看数据库分片帮助指令
db.runCommand({listShards:1})  # 查看分片列表,所有分片

如果看到数据平均分布于shard1,shard2,shard3,那么说明我们搭建成功,启用分片成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB分片 的相关文章

随机推荐

  • Latex语法学习02:文本悬挂缩进

    目录 1 简单文本缩进案例 2 算法表格中的缩进案例 3 完整代码 1 简单文本缩进案例 解决方案 将要缩进的文本定义在minipage环境下 勾股定理 begin minipage t linewidth 直角三角形的直角边的平方求和等于
  • C# WinForm控件美化扩展系列之ListView(2)

    前面的一篇文章C WinForm控件美化扩展系列之ListView实现了隔行不同颜色和对列表头进行了美化 但遗憾的是对列表的最后的不包含列头的部分没有进行重绘 主要原因是上次没时间处理 因为处理那一部分是比较困难的 需要花不少时间 今天总算
  • Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

    朴素贝叶斯是机器学习中比较常用的一种模型 尤其在文本分类的问题上是比较常用的baseline 朴素贝叶斯本身训练速度快 具有可并行化程度高 可解释性好的优点 但由于其对特征之间的独立性假设不是很符合某些需求场景 因此在实际的使用过程中往往需
  • MySQL运维篇之Mycat分片规则

    3 5 3 Mycat分片规则 3 5 3 1 范围分片 根据指定的字段及其配置的范围与数据节点的对应情况 来决定该数据属于哪一个分片 示例 可以通过修改autopartition long txt自定义分片范围 注意 范围分片针对于数字类
  • 宋浩概率论与数理统计-第一章-笔记

    概率论与数理统计 引言 1 1 1 随机事件 1 1 2 样本空间与事件的集合表示 1 1 3 事件间的关系 包含 并 和 交 积 差 互不相容事件 对立事件 完备事件组 运算律 事件的概率 1 2 1 概率的初等描述 1 2 2 古典概型
  • Elasticsearch学习笔记

    第1章 Elasticsearch概述 01 开篇 结构化数据 非结构化数据 半结构化数据含义 结构化数据 结构化数据是按照预定义的模式和格式进行组织的数据 它通常以表格 关系数据库或者类似的数据存储形式存在 具有固定的字段和数据类型 结构
  • node中为什么会出现这个问题UnhandledPromiseRejectionWarning

    大哥不想看详细的就直接看最后 在使用validate js规则验证时把所有字段都加入值后结果报这个问题UnhandledPromiseRejectionWarning 在服务层使用validate js规则验证 进行测试 终于发现设置的时间
  • Docker 学习笔记之基础命令

    1 Docker search image name搜索镜像 2 Docker pull image name下载镜像 3 Docker images 查看镜像 4 Docker run 启动容器 5 Docker ps 查看容器 6 Do
  • 【KEIL-MDK】系列——如何使用PC-Lint代码检查工具

    系列文章目录 01 KEIL MDK 系列 主题配色 文章目录 前言 一 PC Lint 是什么 二 在 KEIL MDK 中集成 PC Lint 工具 1 安装 PC Lint 工具 2 打开 KEIL MDK 进行简单设置 三 使用 P
  • 伯努利模型的极大似然估计和贝叶斯估计

    定义随机变量A为一次伯努利试验的结果 A A A的取值为 0 1 概率分布为 P A P A
  • @PostConstruct注解说明

    PostConstruct 是在Java中使用的注解 用于标识一个方法在一个bean被实例化和初始化之后 但在其投入使用之前应该被执行 它通常在Spring框架应用中使用 当一个bean在Spring应用上下文中被创建时 容器会通过调用其构
  • mssql 远程无法连接mysql_如何开启SqlServer 远程访问

    当Microsoft Sqlserver 2012 安装好后 接下的的工作需要配置Sqlserver数据库允许远程访问 只有配置了Sqlserver远程访问 其他ip客户端才能访问 配置sqlserver远程访问大致分为三步 即配置SQL
  • Android开发中如何添加自定义开机广播

    Android开发中如何添加自定义开机广播 在Android开发中 我们经常需要在设备开机完成后执行一些特定的操作 比如初始化应用程序或者启动服务 为了实现这样的需求 我们可以通过添加自定义开机广播来实现 首先 我们需要创建一个广播接收器类
  • 修改windows的默认编码

    修改windows的默认编码 环境 win10 问题背景 使用7z解压缩一个 zip文件之后 发现文件包内的文件名是乱码 但是使用同版本的7z在另一个win10系统下解压缩 没有这个问题 问题原因 是win10默认编码的问题 由于这次的电脑
  • 【深度学习】基于华为MindSpore和pytorch的卷积神经网络LeNet5实现MNIST手写识别

    1 实验内容简介 1 1 实验目的 1 熟练掌握卷积 池化概念 2 熟练掌握卷积神经网络的基本原理 3 熟练掌握各种卷积神经网络框架单元 4 熟练掌握经典卷积神经网络模型 1 2 实验内容及要求 请基于pytorch和mindspore平台
  • csdn积分怎么查看

    csdn积分怎么查看 博客积分查询 https mp csdn net mp blog analysis article all 下载积分查询 https mp csdn net mp download analysis download
  • js 与 jsc 文件不能混用

    不然会出现莫名bug 转载于 https www cnblogs com guomengkai p 11511410 html
  • WORD软件安装

    WORD插件Aurora安装及下载 准备软件下载 正式安装 常见问题 准备软件下载 安装包下载地址 链接 https pan baidu com s 1gsTSDL0KPdeXdiucE3HGlA 提取码 vbi5 正式安装 按照流程安装即
  • 视频恢复软件哪个好用?推荐这几款恢复率高的软件

    如果你意外删除了电脑保存的视频文件 无论是单击回收站 还原 还是通过电脑系统备份 还原 它都无法恢复 如何解决这个问题 此时 你需要寻求文件删除恢复软件的帮助 推荐下面这几款恢复率高的视频恢复软件 如何操作呢 你可以看看下面的详细解说 第一
  • MongoDB分片

    MongoDB分片 集群搭建 环境准备 mongo1 127 0 0 1 mongo2 127 0 0 1 mongo3 127 0 0 1 config1 端口 27018 config2 端口 27028 config3 端口 2703