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

举报
扎哇太枣糕 发表于 2022/05/12 14:21:46 2022/05/12
【摘要】 ​目录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.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: 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再退出节点服务最后关闭虚拟机,否则下次再开启节点服务时,会因为直接关闭终端或者虚拟机而导致服务异常关闭,从而无法正常开启服务,处理起来会很麻烦。

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: file
  path: /var/log/mongodb/shard/configsvr.log
           logAppend: 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: file
  path: /var/log/mongodb/shard/mongos.log
  logAppend: 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: file
  path: /var/log/mongodb/shard/shardsvr.log
  logAppend: true
net:
  bindIp: localhost
  port: 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 副本集与分片集区别

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。