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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)

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 副本集

image.png


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


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


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


1.4 分片集

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


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

image.png



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: file
   path: /var/log/mongodb/rs_mongod1.log
   logAppend: true
storage:
   dbPath: /usr/local/mongodb4.4.1/data/rs_mongod1
   journal:
      enabled: true
processManagement:
   fork: true  
net:
   bindIp: localhost
   port: 27017  
replication:
   oplogSizeMB: 100
   replSetName: 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再退出节点服务最后关闭虚拟机,否则下次再开启节点服务时,会因为直接关闭终端或者虚拟机而导致服务异常关闭,从而无法正常开启服务,处理起来会很麻烦。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 复制(副本集)
10月更文挑战第17天
47 2
MongoDB 复制(副本集)
|
2月前
|
存储 NoSQL MongoDB
MongoDB入门级别教程全(Windows版,保姆级教程)
一份全面的MongoDB入门级教程,包括在Windows系统上安装MongoDB、使用MongoDB Shell和Compass GUI进行数据库操作,以及MongoDB的基本数据类型和查询技巧。
103 2
MongoDB入门级别教程全(Windows版,保姆级教程)
|
2月前
|
存储 NoSQL 前端开发
MongoDB 分片
10月更文挑战第17天
44 2
|
1月前
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
|
2月前
|
存储 JSON NoSQL
MongoDB Compass 的教程
这篇文章提供了MongoDB Compass的基本使用教程,包括如何建立数据库连接、创建和删除数据库、插入和修改文档数据,以及执行聚合查询来分析和排序数据。
326 0
MongoDB Compass 的教程
|
3月前
|
存储 监控 NoSQL
*MongoDB的水平扩展主要通过分片技术实
*MongoDB的水平扩展主要通过分片技术实
55 5
|
3月前
|
存储 NoSQL 前端开发
MongoDB 分片总结
这篇文章总结了MongoDB分片的概念、集群结构、分片实例、配置和测试过程。
105 6
|
2月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
55 0
|
2月前
|
存储 JSON NoSQL
MongoDB 教程
10月更文挑战第9天
47 0