【MongoDB】五、MongoDB分片集群的部署

news2024/11/19 9:32:58

【MongoDB】五、MongoDB分片集群的部署

  • 实验目的
  • 实验内容
  • 实验步骤
    • 环境准备
    • 部署 Config server
    • 配置Config Server副本集
    • 部署Shard
    • 部署mongos
    • 启动分片功能
    • 查看分片信息
  • 实验小结


实验目的

       能够通过部署MongoDB分片集群熟悉MongoDB分片集群架构和基本操作,从而解决大数据项目中数据量爆发式增长的需求


实验内容

在这里插入图片描述
(1)根据上表中分片集群端口号的分配情况部署分片集群(XXX是姓名拼音首字母)。
(2)启动分片功能。
(3)模拟写入数据,对数据库和和集合进行分片操作,并查看分片信息。


实验步骤

环境准备

1、在nosql01中创建相关数据文件、配置文件以及日志文件的存放目录
命令:

cd /opt/servers/mongodb-demo/
mkdir shardcluster
mkdir -p /opt/servers/mongodb-demo/shardcluster/configServer/configFile
mkdir -p /opt/servers/mongodb-demo/shardcluster/configServer/data
mkdir -p /opt/servers/mongodb-demo/shardcluster/configServer/logs
mkdir -p /opt/servers/mongodb-demo/shardcluster/shard/configFile
mkdir -p /opt/servers/mongodb-demo/shardcluster/shard/shard1_data
mkdir -p /opt/servers/mongodb-demo/shardcluster/shard/shard2_data
mkdir -p /opt/servers/mongodb-demo/shardcluster/shard/shard3_data
mkdir -p /opt/servers/mongodb-demo/shardcluster/shard/logs
mkdir -p /opt/servers/mongodb-demo/shardcluster/mongos/configFile
mkdir -p /opt/servers/mongodb-demo/shardcluster/mongos/logs

2、在服务器nosql01的配置服务器、分片服务器以及路由服务器的日志目录下,创建对应的日志管理文件。

# 配置服务器日志管理文件
touch /opt/servers/mongodb-demo/shardcluster/configServer/logs/config_server.log
# 分片服务器1的日志管理文件
touch /opt/servers/mongodb-demo/shardcluster/shard/logs/shard1.log
# 分片服务器2的日志管理文件
touch /opt/servers/mongodb-demo/shardcluster/shard/logs/shard2.log
# 分片服务器3的日志管理文件
touch /opt/servers/mongodb-demo/shardcluster/shard/logs/shard3.log
# 路由服务器日志管理文件
touch /opt/servers/mongodb-demo/shardcluster/mongos/logs/mongos.log

3、分发集群配置文件:将服务器nosql01上用于存放分片集群相关配置文件、日志文件和数据文件等相关内容的目录shardcluster分发到服务器nosql02和nosql03上,具体命令如下:
命令:

scp -r /opt/servers/mongodb-demo/shardcluster/ root@zrz02:/opt/servers/mongodb-demo/ 
scp -r /opt/servers/mongodb-demo/shardcluster/ root@zrz03:/opt/servers/mongodb-demo/

部署 Config server

1、创建配置文件

cd /configServer/configFile/
touch mongodb_config.conf

2、编辑配置文件mongodb_config.conf,添加配置服务器的相关参数,具体命令如下:
vi mongodb_config.conf

#数据文件存放位置
dbpath=/opt/servers/mongodb-demo/shardcluster/configServer/data
#日志文件
logpath=/opt/servers/mongodb-demo/shardcluster/configServer/logs/config_server.log
#端口号
port=27022
#绑定服务ip
bind_ip=zrz01
#使用追加的方式写日志
logappend=true
#以守护进程的方式运行MongoDB
fork=true
#最大同时连接数
maxConns=5000
#复制集名称
replSet=configs
#声明这是一个集群的Config Server
configsvr=true

3、将配置文件mongodb_config.conf通过scp命令分发到服务器nosql02和nosql03的目录configFile下
命令:

scp /opt/servers/mongodb-demo/shardcluster/configServer/configFile/mongodb_config.conf root@zrz02:/opt/servers/mongodb-demo/shardcluster/configServer/configFile/

scp /opt/servers/mongodb-demo/shardcluster/configServer/configFile/mongodb_config.conf root@zrz03:/opt/servers/mongodb-demo/shardcluster/configServer/configFile/

4、修改服务器nosql02和nosql03配置文件mongodb_config.conf中的参数bind_ip的值,即将bind_ip的值修改为对应服务器的IP地址或主机名。
命令:

cd /opt/servers/mongodb-demo/shardcluster/configServer/configFile/
vi mongodb_config.conf 

5、启动Config Server

 cd /opt/servers/mongodb-demo/mongodb/bin/ 
 ./mongod -f /opt/servers/mongodb-demo/shardcluster/configServer/configFile/mongodb_config.conf

配置Config Server副本集

1、登录MongoDB客户端
命令:

mongo --host zrz01 --port 27022

2、对副本集进行初始化操作
命令:

rs.initiate()
rs.add("zrz02:27022")
rs.add("zrz03:27022")
rs.status()

部署Shard

1、创建配置文件(zrz01)
命令:

cd /opt/servers/mongodb-demo/shardcluster/shard/configFile/
touch mongodb_shard1.conf
touch mongodb_shard2.conf
touch mongodb_shard3.conf

2、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz01)

mongodb_shard1.conf
命令:
vi mongodb_shard1.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard1_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard1.log
port=27018
logappend=true
fork=true
maxConns=5000
bind_ip=zrz01
#声明开启分片
shardsvr=true
#指定分片shar1的副本集名称
replSet=shard1

mongodb_shard2.conf
命令:
vi mongodb_shard2.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard2_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard2.log
port=27020
logappend=true
fork=true
maxConns=5000
bind_ip=zrz01
#声明开启分片
shardsvr=true
#指定分片shar2的副本集名称
replSet=shard2

mongodb_shard3.conf
命令:
vi mongodb_shard3.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard3_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard3.log
port=27019
logappend=true
fork=true
maxConns=5000
bind_ip=zrz01
#声明开启分片
shardsvr=true
#指定分片shar3的副本集名称
replSet=shard3

3、创建配置文件(zrz02)
命令:

cd /opt/servers/mongodb-demo/shardcluster/shard/configFile/
touch mongodb_shard1.conf
touch mongodb_shard2.conf
touch mongodb_shard3.conf

4、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz02)

mongodb_shard1.conf
命令:
vi mongodb_shard1.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard1_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard1.log
port=27019
logappend=true
fork=true
maxConns=5000
bind_ip=zrz02
#声明开启分片
shardsvr=true
#指定分片shar1的副本集名称
replSet=shard1

mongodb_shard2.conf
命令:
vi mongodb_shard2.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard2_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard2.log
port=27018
logappend=true
fork=true
maxConns=5000
bind_ip=zrz02
#声明开启分片
shardsvr=true
#指定分片shar2的副本集名称
replSet=shard2

mongodb_shard3.conf
命令:
vi mongodb_shard3.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard3_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard3.log
port=27020
logappend=true
fork=true
maxConns=5000
bind_ip=zrz02
#声明开启分片
shardsvr=true
#指定分片shar3的副本集名称
replSet=shard3

5、创建配置文件(zrz03)

在这里插入图片描述


6、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz03)

mongodb_shard1.conf
命令:
vi mongodb_shard1.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard1_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard1.log
port=27020
logappend=true
fork=true
maxConns=5000
bind_ip=zrz03
#声明开启分片
shardsvr=true
#指定分片shar1的副本集名称
replSet=shard1

mongodb_shard2.conf
命令:
vi mongodb_shard2.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard2_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard2.log
port=27019
logappend=true
fork=true
maxConns=5000
bind_ip=zrz03
#声明开启分片
shardsvr=true
#指定分片shar2的副本集名称
replSet=shard2

mongodb_shard3.conf
命令:
vi mongodb_shard3.conf

dbpath=/opt/servers/mongodb-demo/shardcluster/shard/shard3_data/
logpath=/opt/servers/mongodb-demo/shardcluster/shard/logs/shard3.log
port=27018
logappend=true
fork=true
maxConns=5000
bind_ip=zrz03
#声明开启分片
shardsvr=true
#指定分片shar3的副本集名称
replSet=shard3

7、启动Shard
命令:

mongod -f /opt/servers/mongodb-demo/shardcluster/shard/configFile/mongodb_shard1.conf
mongod -f /opt/servers/mongodb-demo/shardcluster/shard/configFile/mongodb_shard2.conf
mongod -f /opt/servers/mongodb-demo/shardcluster/shard/configFile/mongodb_shard3.conf

8、配置Shard副本集
命令(zrz01):

mongo --host zrz01 --port 27018
rs.initiate()
rs.add('zrz02:27019')
rs.addArb('zrz03:27020')
rs.status()

命令(zrz02):

mongo --host zrz02 --port 27018
rs.initiate()
rs.add('zrz03:27019')
rs.addArb('zrz01:27020')
rs.status()

命令(zrz03):

mongo --host zrz03 --port 27018
rs.initiate()
rs.add('zrz01:27019')
rs.addArb('zrz02:27020')
rs.status()

部署mongos

1、创建配置文件
命令:

cd  /opt/servers/mongodb-demo/shardcluster/mongos/configFile/
ll

2、执行“vi”命令,在配置文件mongodb_mongos.conf中添加路由服务器的相关参数
命令:
vi mongodb_mongos.conf

logpath=/opt/servers/mongodb-demo/shardcluster/mongos/logs/mongos.log
logappend = true
port=27021
bind_ip=zrz01
fork=true
#指定配置服务器(Config Server)地址
configdb=configs/zrz01:27022,zrz02:27022,zrz03:27022
maxConns=20000

3、由于在分片集群中规划了两个mongos,因此,需要将配置文件mongodb_mongos.conf通过scp命令分发至服务器nosql02的目录/mongos/configFile下
命令:

scp /opt/servers/mongodb-demo/shardcluster/mongos/configFile/mongodb_mongos.conf root@zrz02:/opt/servers/mongodb-demo/shardcluster/mongos/configFile/

4、修改服务器zrz02的配置文件mongodb_mongos.conf中参数bind_ip的值,即将值修改为当前服务器的IP地址或主机名(即zrz02)

在这里插入图片描述


5、启动mongos服务
命令:

mongos -f /opt/servers/mongodb-demo/shardcluster/mongos/configFile/mongodb_mongos.conf

启动分片功能

1、在服务器zrz01中登录mongos的MongoDB客户端(需要通过mongos操作分片集群)
注意在MongoDB的bin目录下执行

mongo --host zrz01 --port 27021

2、切换到数据库gateway
向分片集群中添加三个Shard,分别为shard1、shard2和shard3
命令:

use gateway
sh.addShard("shard1/zrz01:27018,zrz02:27019,zrz03:27020")
sh.addShard("shard2/zrz01:27020,zrz02:27018,zrz03:27019") 
sh.addShard("shard3/zrz01:27019,zrz02:27020,zrz03:27018")

3、设置chunk
命令:

# 切换到数据库config 
use config
# 设置块大小为1M
db.settings.save({"_id":"chunksize","value":1})

4、模拟写入数据
在分片集群中,创建数据库school,并向数据库中添加集合user,然后模拟向集合中写入五万条文档
命令:

#切换(创建)数据库school 
use school
#向集合user中添加5万条文档
mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"zrz"+i})}
db.user.find()

5、对数据库进行分片操作
在开启集合分片前,需要先开启数据库的分片功能
命令:

#切换到数据库gateway 
use gateway
#实现数据库school分片功能
sh.enableSharding("school")

6、对集合进行分片操作前,需要为集合user创建索引
命令:

#切换到数据库school 
use school
#以"id"作为索引
db.user.createIndex({"id":1})

将以索引“id”作为分片键,对集合user进行分片操作
命令:

#切换到数据库gateway 
use gateway
#以"id"作为分片键对集合user进行分片
sh.shardCollection("school.user",{"id":1})

查看分片信息

sh.status()

在这里插入图片描述


实验小结

       通过本次对MongoDB分片集群的部署,熟悉了MongoDB分片集群架构和基本操作,更好的理解了分片策略。在实验过程中遇到了很多硬件或者是软件上的问题,请教老师,询问同学,上网查资料,都是解决这些问题的途径。最终将遇到的问题一一解决最终完成实验。
注意事项:
1、有疑问前,知识学习前,先用搜索。
2、熟读写基础知识,学得会不如学得牢。
3、选择交流平台,如QQ群,网站论坛等。
4、尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

调用有道API实现语音翻译(汉译英)

目录 1. 作者介绍2. 相关介绍2.1 API介绍2.2 网易API介绍 3. 实验过程3.1 调用过程3.2 代码获取3.3 完整代码 1. 作者介绍 南旭东&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff1a;1…

win10 搭建vue环境并运行项目

win10 搭建vue环境并运行项目 1、参考链接2、遇到的问题及解决 1、参考链接 https://blog.csdn.net/qq_44959735/article/details/128886550 2、遇到的问题及解决 运行的时候不要再git bash里&#xff0c;要在自带的powershell里&#xff0c;以管理员权限运行。 问题&#xf…

未来5年,生产力的底层逻辑变了,影响所有企业

上周&#xff0c;K哥带领20多位企业家、技术高管参访了阿里钉钉&#xff0c;学习AI大模型如何应用到企业生产经营和组织管理当中&#xff0c;以及企业如何使用新生产力工具实现降本增效。 通过这次参访&#xff0c;我对AI大模型如何驱动企业管理变革有了新的认识&#xff0c;三…

js-排序数组中两个数字之和

给定一个已按照 升序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 &#xff0c;所以答案数组应当满足 0 < answer[0] < answ…

【ArcGIS】栅格重分类(Reclass)

ArcGIS栅格重分类&#xff08;Reclass&#xff09; 1 重分类&#xff08;Relassify&#xff09;1.1 新值替代1.2 将值组合到一起1.3 按相同等级对一组栅格的值进行重分类1.4 将特定值设置为NoData或者为NoData像元设置某个值1.5 操作步骤 2 查找表&#xff08;Lookup&#xff0…

CS5366设计原理图|Type-C转HDMI2.0 4K60+USB3.0+PD3.1视频转换芯片应用电路图

CS5366Type-C转HDMI2.0的显示协议转换芯片, 内部集成了PD3.0及DSC decoder, 并能按客户需求配置成不同的功能组合&#xff0c; 是目前集成度与功耗更小的一颗芯片。 Type-C转HDMI2.0 4K60USB3.0PD3.1视频转换芯片应用电路图&#xff1a; CS5366系列符合USB电源传输规范3.0。CS…

C语言+单片机-内存分布详解,全网最全,值得收藏保存

目录 一、C语言内存分区 1. 代码区 2. 常量区 3. 全局(静态)区 4. 堆区(heap) 5. 栈区(stack) 二、STM32存储器分配 1. 随机存储器—RAM 2. 只读存储器—ROM 三、基于STM32代码验证 1. 详细代码如下 2. 运行结果如下 四、单片机中的内存分布 1.含义解释 2. 程序…

Makerbase CANable V2.0在Window系统使用

应用软件与固件 应用软件CANable V2.0CANable V1.0cangaroocandleLight/slcan(支持CAN FD)candleLight/slcan/cantactBUSMASTER V3.2.2candleLightcandleLight/pcan/cantactTSMastercandleLightcandleLight/pcan/cantactPCAN-Explorer 5、pcan view不支持pcancantactslcan(不支…

北理工软件工程基础考试要点

文章目录 前言题型分析概念部分大题部分数据流图和数据字典数据流图数据字典 前言 这篇文章就是针对北理工计科同学写的&#xff0c;这是精心筛选&#xff0c;针对老师最后一节课的重点以及题型写的笔记&#xff0c;保你一天速通软件工程基础这门课。 题型分析 闭卷 单选题…

SAP-ABAP-SM30自建表维护如何如何自动带出描述

文章目录 1 Requirement2 Process2.1 When you finish table maintainer , and create event .2.2 Create sub routine .2.3 Write code 3. Result4 Reference Document 1 Requirement The requirement is that we input MATNR and HKONT and get the description automatic .…

DDoS攻击原理是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言DDoS攻击的原理DDo…

考研算法第28天:冒泡排序和简单选择排序 【排序】

算法介绍 冒泡排序就不需要多说了&#xff0c;大一就会的东西&#xff0c;所以这里就不多言了。记录一下y总对他的分析就是了 简单选择排序 每次循环遍历后面的元素&#xff0c;然后将最小的放到最前面&#xff1a;举个例子 第一次 如上图 第一次发现最小的元素是2就将位于第…

EPM创建报表时,子节点有数据但是父节点无数据的解决方案

目录 一、环境二、问题描述与分析三、解决方案1、确认HANA MDX是否启用2、确认BPC前端的TIME维是否正常维护3. 在SPRO中设置模型参数4、使用SE38执行程序UJHANA_REFRESH_VIR_CUBE刷新模型 一、环境 产品版本BWSAP BW/4HANA 2021BPCSAP BPC 2021 Version for SAP BW/4 HANAEPM1…

电力数据安全治理实践思路探讨

01电力数据安全实践背景 数字经济的快速发展根本上源自数据的高质量治理和高价值转化&#xff0c;近年来&#xff0c;国家层面相继推出促进数据高质量治理的政策法规&#xff0c;围绕加强数据安全保障、提高数据质量等方面&#xff0c;明确了相关规定和要求。作为重要数据持有者…

TC8:TCP_UNACCEPTABLE_05-09

TCP_UNACCEPTABLE_05: [listen] unacceptable ACK -> RST [listen] 目的 在LISTEN状态下的TCP接收到携带一个不可接受的ACK号的段,发送RST并且保持在相同的状态 在LISTEN状态下的TCP,只能接收到SYN消息,不能有ACK标志位和ACK号,如果有,就是不可接受的 测试步骤 Teste…

C++IO流和类型处理(13)

IO流 IO流包括 标准IO流&#xff0c;字符串流&#xff0c;文件流 标准IO流 基础使用 #include <iostream> //包括istream和ostream cin >> ----- 标准输入 cout<< ----- 标准输出 clog<< ----- 带缓冲区的标准错误 cerr<< ----- 不带缓冲…

【C6】11111

文章目录 10.动静态库&#xff1a;.a&#xff0c;指定.so&#xff0c;LD_10.1 静态库&#xff1a;链接库的文件名是libpublic.a&#xff0c;链接库名是public&#xff0c;缺点使用的静态库发生更新改变&#xff0c;程序必须重新编译10.2 动态库&#xff1a;动态库发生改变&…

Selenium java自动化

文章目录 1. Selenium的安装2. 了解自动化和selenium2.1 什么是自动化以及为什么要做2.2为什么选择selenium作为我们的文本自动化工具2.3 环境部署2.4什么驱动&#xff0c;驱动的工作原理。2.5一个简单的自动化演示 3. 掌握selenium的基础语法3.1)元素的定位3.2) 元素的操作3.3…

Java解析String类的使用及String a = b + “c“面试题

1.概述 String:字符串&#xff0c;使用一对""引起来表示。 1.String声明为final的&#xff0c;不可被继承 2.String实现了Serializable接口&#xff1a;表示字符串是支持序列化的。 实现了Comparable接口&#xff1a;表示String可以比较大小 3.String内部定义了fina…

作用域问题

全局作用域 作用范围:在全局能够访问到的全局变量 代码实例: var num 10;function fn1() {console.log(num, "全局作用域");}fn1() 打印的结果: 函数作用域 作用范围:只在函数里面能够进行访问 代码实例: function fn1() {var num 10;}console.log(num); …