MongoDB副本集、分片集的伪分布式部署(保姆级教程)

目录

1 集群架构(概念篇)

1.1 MongoDB核心组件

1.2 主从复制

1.3 副本集

1.4 分片集

2 集群搭建

2.1 部署副本集(伪分布式)

2.2 分片集部署(伪分布式)

2.3 副本集与分片集区别


1 集群架构(概念篇)

        MongoDB有三种集群部署模式,分别是主从复制(Master-Slave)、副本集(ReplicaSet)、分片集(Sharding)。采用集群架构复制的目的:保证数据生产部署时的冗余和可靠性,采用不同的机器来保存副本,数据不会因为单点故障而丢失。读写分离,提高数据的读取能力。故障转移、故障恢复。

1.1 MongoDB核心组件

💥Mongod: 处理所有的数据请求、管理数据的增删改查操作。默认的数据目录/data/db,默认端口27017,默认主机地址localhost。

💥Mongo:MongoDB提供的一个Mongo shell客户端便于用户与MongoDB之间的交互。启动Mongo默认连接到localhost:270127的test数据库。

💥Mongos: 用于MongoDB分片集的路由选择,对来自于应用层的查询请求进行处理,平判断所请求的数据位于分片集的哪个位置。

1.2 主从复制

        1️⃣主从复制模式的集群只能有一个主节点,主节点提供所有的增删改查服务,从节点不提供服务,但是可以通过设置从节点提供查询服务,这样可以减少主节点的压力。2️⃣此外,每个从节点都要知道主节点的地址以及主节点的各个操作,从节点定期轮询主节点获取操作,并对自己的数据副本进行这些操作,从而保证主从节点数据的一致性。3️⃣主节点出现故障,只能人工介入指定新的主节点,在此期间整个集群数据只能被读而无法修改。

1.3 副本集

Primary主节点:与主从复制一样,副本集中也只能有一个主节点,向外对客户端提供数据读写的服务,执行的写操作信息保存在oplog中。不同的是,副本集中的主节点发生故障时,仲裁节点触发选举,在所有的从节点中选出一个作为新的主节点,即使后续旧的主节点恢复正常,也会以从节点的身份加入到集群。

Secondary从节点:从节点只提供读数据的服务,并且从节点定期轮询oplog日志文件,根据日志内容同步更新自身的数据,使之保持与主节点一致。

Arbiter仲裁节点:仲裁节点不存储任何数据,只记录集群的节点数以及主节点发生故障时触发选举机制进行仲裁。仲裁节点和其他节点之间的唯一通信就是选举期间的投票、心跳信息。

1.4 分片集

        副本集可以解决主节点发生故障所导致的数据丢失或不可用的问题,但遇到需要存储海量数据的情况,副本集就无法解决了。此时就用到了MongoDB的分片集操作,所谓分片就是将数据拆分并分散存储在不同机器上的过程。

        什么时间进行分片操作:1.单个节点的磁盘空间不足时。2.单个mongod已经不能满足写数据的性能要求,通过分片让写压力分散到各个分片服务器上。3.把大量数据放到内存里提高性能,通过分片利用多台分片服务器的内存资源。

Shard Server分片服务器:每一个分片服务器都是一个mongod进程,用于存储实际的数据块。实际生产中,一个分片服务器往往有多台机器组成一个副本集来共同承担,防止因主节点的单点故障而崩溃整个系统。

Config Server配置服务器:同样是一个mongod进程,用来保存集群和分片的元数据,在集群启动的最开始时建立。

Route Server路由服务器:是一个独立的mongos进程(即不储存数据的mongod进程),启动时要从配置服务器加载集群信息到缓存中(分片集群要首先启动配置服务器的原因),并将客户端的请求路由给每个分片服务器,在各分片服务器返回结果后进行聚合并返回客户端。

2 集群搭建

2.1 部署副本集(伪分布式)

建议开三个终端界面,分别操作三个节点,这样操作比较直观。

1️⃣首先需要有三个节点或者说三个mongod进程

localhost:27017

localhost:27018

localhost:27019

2️⃣创建并配置三个配置文件来开启三个节点

/user/local/mongodb4.4.1/conf/rs_mongod1.conf

/user/local/mongodb4.4.1/conf/rs_mongod2.conf

/user/local/mongodb4.4.1/conf/rs_mongod3.conf

配置文件内容如下:

三个配置文件中的port端口为对应节点的端口,必须更改成

涉及到路径的配置项path、dbpath里面的路径目录文件都必须创建,带后缀的是文件不带后缀的是目录,别创建错了

replSetName是副本集的名字,一个副本集里的三个节点的三个配置文件里都必须一样。

systemLog:destination: filepath: /var/log/mongodb/rs_mongod1.loglogAppend: true
storage:dbPath: /usr/local/mongodb4.4.1/data/rs_mongod1journal:enabled: true
processManagement:fork: true  
net:bindIp: localhostport: 27017	
replication:oplogSizeMB: 100replSetName: my_repl  enableMajorityReadConcern: true 

3️⃣使用配置文件开启节点服务

开启节点服务需要先进入配置文件所在目录,开启服务成功后才能连接节点

#开启节点服务
sudo mongod --config rs_mongod1.conf#连接节点,进入shell操作界面
#mongo后面的是连接节点的ip和端口
mongo localhost:27017

4️⃣主节点初始化

刚刚创建的三个节点默认都是从节点,从节点在未设置可读之前无法读取数据,故此时show dbs会报错,这就需要初始化主节点,使其中的一个从节点成为主节点。

var rsconf={_id:"my_repl",members:[{_id:1,host:“localhost:27017"},{_id:2,host:“localhost:27018"},{_id:3,host:“localhost:27019"}]}rs.initiate(rsconf)                     #初始化Primary
rs.status( )			#查看副本集状态

此时,进行初始化操作的节点就会成为主节点。

5️⃣从节点、仲裁节点设置

下面的三个操作都是在主节点的shell里完成的,主节点才有权对其他节点进行设置

#将该节点作为从节点加入集群中
rs.add("localhost:27019")#将节点设置成仲裁节点
rs.addArb("localhost:27019")#从集群中删除节点
rs.remove("localhost:27019")

从节点设置为可读

rs.slaveOK()

对哪个节点的操作就要在哪个节点的shell界面进行设置

💥💥💥副本集操作完成后不能直接关闭终端,必须必须必须使用两次exit先退出shell再退出节点服务最后关闭虚拟机,否则下次再开启节点服务时,会因为直接关闭终端或者虚拟机而导致服务异常关闭,从而无法正常开启服务,处理起来会很麻烦。

2.2 分片集部署(伪分布式)

建议开三个终端界面,分别操作三个服务器副本集,这样操作比较直观。

 1️⃣首先需要有三个服务器节点或者说两个mongod、一个mongos进程

localhost:27017        配置服务器(mongod)

localhost:27018        路由服务器(mongos)

localhost:27019        分片服务器(mongod)

2️⃣创建并配置三个配置文件来完成分片集的主要架构

        这里为了减少计算机部署分片集群的压力,采用配置服务器单成员副本集,路由服务器,分片服务器单成员副本集。单成员模式的副本集,即只用一个节点作为主节点加入到副本集中,完成一个最简单的副本集。若想要搭建更加完善的分片集群,只需多创建几个节点并加入到副本集中即可。

💥配置服务器(Config Server)副本集

1.配置文件及其内容:

/user/local/mongodb4.4.1/conf/shard/configsvr.conf

配置文件中的port端口为对应节点的端口,必须更改

涉及到路径的配置项path、dbpath里面的路径目录文件都必须创建,带后缀的是文件不带后缀的是目录,别创建错了

storage:dbPath: /usr/local/mongodb4.4.1/data/configsvr  journal:enabled: true
systemLog:destination: filepath: /var/log/mongodb/shard/configsvr.loglogAppend: true
net:bindIp: localhost  port: 27017
processManagement:fork: true  
sharding:clusterRole: configsvr
replication:replSetName: configsvr_rs  

2.初始化主节点:

开启节点服务需要先进入配置文件所在目录,开启服务成功后才能连接节点

#开启节点服务
sudo mongod --config configsvr.conf#连接节点,进入shell操作界面
mongo localhost:27017#主节点初始化
rs.initiate({_id: "configsvr_rs",configsvr: true,members: [{ _id : 0, host : “localhost:27017" },]})

💥路由服务器(Route Server)

1.配置文件及其内容

/user/local/mongodb4.4.1/conf/shard/mongos.conf

配置文件中的port端口为对应节点的端口,必须更改

涉及到路径的文件都要创建有后缀是文件,无后缀是目录

路由服务器不存储数据故不需要dbPath(与其他两个结点的区别)

systemLog:destination: filepath: /var/log/mongodb/shard/mongos.loglogAppend: true
net:bindIp: localhost  port: 27018
processManagement:fork: true  
sharding:configDB: configsvr_rs/localhost:27017

开启节点服务需要先进入配置文件所在目录,开启服务成功后才能连接节点

sudo mongos --config mongos.config

💥分片服务器(Shard Server)副本集

1.配置文件及内容

/user/local/mongodb4.4.1/conf/shard/shardsvr.conf

storage:dbPath: /usr/local/mongodb4.4.1/data/shardsvr  journal:enabled: true
systemLog:destination: filepath: /var/log/mongodb/shard/shardsvr.loglogAppend: true
net:bindIp: localhostport: 27019
processManagement:fork: true  
sharding:clusterRole: shardsvr
replication:replSetName: shardsvr_rs1 

2.初始化主节点

#开启节点服务
sudo mongod --config shardsvr.conf#连接节点,进入shell操作界面
mongo localhost:27019#主节点初始化
rs.initiate({_id : "shardsvr_rs1",members: [{ _id : 0, host : “localhost:27019" },]})

3️⃣进入mongos shell界面操作整个分片集

进入mongos shell界面

mongo localhost:27018

添加分片服务器副本集到分片集群中

sh.addShard("shardsvr_rs1/localhost:27019,")

再创建一个分片服务器副本集并加入到分片集群

参照上文分片服务器副本集,先创建并配置一个节点的配置文件,使用配置文件开启服务,进入shell界面初始化主节点,进入mongos的shell界面使用sh.addShard()将其添加入集群。

4️⃣数据库、集合分片操作 

💥💥💥分片集操作完成后同样不能直接关闭终端,必须必须必须使用两次exit先退出shell再退出节点服务最后关闭虚拟机,否则下次再开启节点服务时,会因为直接关闭终端或者虚拟机而导致服务异常关闭,从而无法正常开启服务,处理起来会很麻烦。

2.3 副本集与分片集区别

副本集是让多台服务器都拥有同样的数据副本,每一台服务器都是其他服务器的镜像。然而分片集中的每一个分片都和其他分片拥有不同的数据子集,相当于分布式存储。

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

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

相关文章

非关型数据库之MongoDB

目录 1 MongoDB简介 1.1 初识MongoDB 1.2 MongoDB与传统的关系型数据库的区别 1.3 MongoDB存储结构 1.4 BSON支持的数据类型 2 MongoDB Shell操作 3 MongoDB集群操作 1 MongoDB简介 1.1 初识MongoDB MongoDB来源自英文单词"Humongous”,译为“庞大的”…

【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)

目录 1 编程前总分析 1.1 数据源 1.2 需要掌握的知识 1.2.1 Hadoop对比java的数据类型 1.2.2 MapReduce流程简介 1.3.3 MapReduce流程细分 2 编码阶段 2.1 导入依赖 2.2 mapper 2.3 reducer 2.4 main 1 编程前总分析 1.1 数据源 英语,李沐,85,男,20 数学,李沐,54,男…

【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)

目录 1 数据源(学生成绩.csv) 2 hadoop平台上传数据源 3 idea代码 3.1 工程框架 3.2 导入依赖 3.3 系统主入口(menu) 3.4 六个mapreduce 3.4.1 计算每门成绩的最高分、最低分、平均分(Mma) 3.4.2 计算每个学生的总分及平均成绩并进行排序(Sas) 3.4.3 统计所有学生的信…

【单位换算】存储单位(bit Byte KB MB GB TB PB EB ZB YB BB)时间单位(ms μs ns ps)长度单位(dm cm mm μm nm pm fm am zm ym)

存储单位 相邻单位相差2⁰,记忆时可以此类推 一字节等于八比特 1 Byte 8 bit 1KB 1024 B 2⁰ B 1MB 1024 KB 2⁰ B 1GB 1024 MB 2⁰ B 1TB 1024 GB 2⁴⁰ B 1PB 1024 TB 2⁵⁰ B 1EB 1024 PB 2⁶⁰ B 1ZB 1024 EB 2⁷⁰ B 1YB 1024 ZB 2⁸⁰ B 1B…

Git 的安装、使用、分支、命令 一篇博客全都学会

目录 1 版本控制 1.1 什么是版本控制 1.2 为什么需要版本控制 2 Git概述 2.1 Git的工作机制 2.2 分布式版本控制工具与集中式的区别 2.3 Git是如何诞生的 3 Git的安装 4 Git常用命令 4.1 用户签名的设置和修改 4.2 查看用户签名的设置 4.3 初始化本地库 4.4 添加、…

生成一个GitHub的token用于git推送本地库至远程库

1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 git push 的时候需要token,所以在GitHub上生成一个临时的token 1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 前提是你已经在这个浏览器上登陆了GitHub https://github.com/settings/tokens

都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?

1 对自己的远程库操作 1.1 在GitHub上创建远程库 1.2 推送本地库至远程库 1.3 拉取远程库到本地库 1.4 克隆远程仓库到本地 2 对别人的远程库两种操作方式 2.1 使用GitHub进行团队内协作开发 2.2 使用GitHub进行跨团队协作开发 众所周知,GitHub是一个大型的国…

2021 最新 IDEA集成Gitee、Gitee迁移GitHub【图文讲解】

1 创建远程库 2 IDEA集成Gitee 2.1 安装gitee插件并绑定账号 2.2 IDEA推送本地库至远程库的两种方式 2.3 修改后推送本地库至远程库 2.4 拉取远程库 2.5 使用IDEA克隆远程库 3 Gitee迁移GitHub的远程库的两种方式 3.1 自己的账户之间迁移 3.2 使用链接进行迁移 3.3 强制刷…

只需五步学会Maven 3.6.1OR 3.6.3及其他版本的下载安装与配置【图文详解】

第一步,下载并解压缩包 ​第二步,配置两个环境变量 ​第三步,测试是否安装成功 ​第四步,指定本地仓库的路径 第五步,修改镜像仓库 第一步,下载并解压缩包 Maven官方下载地址:https://mav…

只需四步完成java JDK1.8的下载安装与配置【图文详解】

第一步,下载安装包并安装 第二步,安装JDK 第三步,配置三个环境变量 第四步,测试是否安装成功 第一步,下载安装包并安装 Oracle的官方下载地址:https://www.oracle.com/java/technologies/downloads/#ja…

从Maven中央仓库网站下载jar包的两种方式,将会伴随java后端开发者的整个职业生涯

这个肥肠重要的网站就是:https://mvnrepository.com/ 下面我会以mysql-connector-java-8.0.26.jar为例,教会你使用两种方式下载使用jar包资源 首先在搜索栏使用全称或者是关键字对jar包进行搜索 选择你想要的版本 方式一:导入pom文件依赖(…

2021 使用IDEA创建并编写你的第一个Maven项目【图文详解】

1 使用IDEA创建你的第一个Maven项目 2 使用IDEA编写一个Maven项目 1 使用IDEA创建你的第一个Maven项目 新建一个空白项目 File-->New-->Project-->Empty Project 在IDEA中配置JDK 在IDEA中配置Maven 新建一个Maven模块 在test目录下面新建一个resources文件夹 2 使…

能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)

1 设置主题(背景图片) 2 设置字体 2.1 设置默认的字体及其大小、行间距**墙裂推荐** 2.2 设置字体大小可以随意改变**墙裂推荐** 3 设置鼠标悬停提示 4 提示的时候忽略大小写**墙裂推荐** ​​5 取消单行显示tabs**墙裂推荐** 6 修改类头的文档注释信息 7 设置项目文…

控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow

问题描述: 当我在使用IDEA 完成一个Maven项目的时候,在第一步的pom.xml文件导入依赖时就发生了这个问题,弹窗弹出Uable to import maven project 控制台报 Unable to import maven project: See logs for details的异常。 既然人家都让查看l…

Maven基础教程

1 Maven简介 2 Maven基础概念 2.1 仓库 2.2 坐标 3 依赖的相关知识点 4 生命周期与插件 5 使用Inteli idea完成第一个Maven项目 1 Maven简介 Maven的本质就是一个项目管理工具,用于将项目开发和管理过程抽象成一个项目对象模型(project object model POM) Ma…

java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】

编辑距离算法其实就是,在规定的编辑操作(替换字符串、插入字符串、删除字符串)中,经过几步可以把一个字符串变成另一个字符串,而这个所需的步数就是你的编辑距离。 测试样例: str1 abc str2 yabd 表里的每一个值都代表着将s…

【Java从入门到头秃专栏 】(一)学在Java语法之前

目录 1 初识Java 2 Java环境JDK 3 Java规范 1 初识Java Java是美国的sun(Stanford University Network)公司在1995年推出的一门计算机高级编程语言,虽然说当时参与开发Java的人员有好几名,但是业内公认的Java之父是詹姆斯高斯林(James Gosling)。 Jav…

【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出

目录 1 注释 2 数据类型 3 变量与常量 4 关键字、标识符 5 运算符 6 键入值、输出值 1 注释 注释就是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便大家更加容易理解程序。注释虽然写在程序中,但是并不参与程序的执行&#…

【Java从入门到头秃专栏 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random

目录 1 控制流程 2 Math类 3 Date类 4 DateFormat类 5 Calendar类(日历类) 6 System类 7 BigDecimal类 8 Random类(随机数) 1 控制流程 1.1 块作用域 块(即复合语句)就是指由若干条Java语句组成的语句,并用一条大括号括起来,并借此形式确定了变量…

IntelliJ IDEA最常用的一些快捷键,学会了室友还以为你在祖安对线

目录 1 快速生成语句 1.1 main语句 1.2 输出语句 1.3 流程控制语句 1.3.1 if判断语句 1.3.2 while循环 1.3.3 for循环 1.3.4 数组、集合的循环操作 1.3.5 迭代器循环操作 1.4 对象实例化、定义变量 1.5 try-catch异常 2 快捷键 2.1 Ctrl系列 2.2 alt系列 2.2.1…