在OpenEuler搭建MongoDB分片集群,小白式安装(●‘◡‘●)(此方法也可用于在CentOS搭建)

本文档详述了MongoDB分片集群的搭建步骤,包括分片概念、优势、集群组成、环境配置、分片集群部署、副本集创建、 mongos 路由服务器配置等,旨在帮助读者理解并实践MongoDB的大数据存储和高吞吐量处理。
摘要由CSDN通过智能技术生成

搭建需要有耐心呀(●’◡’●)

一、什么是MongoDB分片?

我们在MongoDB官网可以查找到MongoDB分片的具体介绍,在MongoDB里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。例如:当本地磁盘不足时,本来100G的数据,可以分别给到10台机器上每一台机器10G的数据,通过建立多个shard存储用户的数据,不同的shard可以保存不同用户的数据,并且为副本集来保证高可用性,当要调用这些数据时,就需要建立一个mongos进程,通过这个进程实现分片之后的数据存储与访问,也就是说,分片的整个核心所在就是mongos,mongos是分片集群的访问入口,可以对正在请求的数据进行路由、分发与合并,

下图是集群的示意图:

在这里插入图片描述

分片的优势

分片是把数据分配到多个服务器上的一种方式,MongoDB使用分片实现大数据部署以及高吞吐操作。
大数据以及高吞吐量的应用会对单个服务器的容量造成很大的挑战。比如,高频率的查询操作会消耗服务器的CPU,如果数据集大于系统的RAM容量,也会对硬盘的性能造成影响。
应对系统容量增加有两种方式:水平扩展和垂直扩展。
垂直扩容就是增加单个服务器的容量,比如,使用更高性能的CPU,增加RAM容量,或者增加存储容量。但是单个服务器扩容是有限制性的,何况,云设备提供商在硬件配置上很容易达到容量上限。所以垂直扩容很有限制性。
水平扩容就是把数据和系统压力分散到多个服务器上,增加多个服务器以达到增加整个系统容量的目的。尽管单个服务器的速度或者容量并不是很大,但是每个服务器都可以分担一部分系统压力,比单个高性能的服务器更加高效。增加整个部署系统的容量只需要增加几台服务器,这样比增加单个服务的性能更节约成本。缺点就是增加了系统的复杂性以及系统的维护成本。

分片集群的组成部分

分片集群包括以下几个成员:

shard:每个shard包含一组分片数据,每个shard都可以以复制集的方式部署。

mongos:mongos的任务是查询路由,是客户端和分片集群之间的交互接口

config servers:配置服务器存放着系统的元数据以及集群的配置信息。

MongoDB3.4之后,配置服务器必须用复制集的方式部署。

IP配置(根据自身自己设置IP)

机器1:IP:192.168.81.185

shard1:22001 shard2:22002 shard3:22003 搭建mongos、config server

机器2:IP:192.168.81.186

shard1:22001 shard2:22002 shard3:22003 搭建mongos、config server

机器3:IP:192.168.81.187

shard1:22001 shard2:22002 shard3:22003 搭建mongos、config server

二、部署分片集群

1、安装环境

系统:VMware Workstation Pro下OpenEuler20.03
软件版本:mongodb4.0.0(软件版本不能低于3.4)
需要关闭防火墙及selinux(一定!一定!一定要关!!!)
vi /etc/selinux/config             #关闭selinuxSELINUX的赋值修改为disabled
    
systemctl stop firewalld		   #暂停防火墙
systemctl disable firewalld        #关闭防火墙

.
.

2、三台虚拟机下载解压MongoDB

第一种下载方法:(使用xshell、Xftp7上传)

MongoDB下载地址:https://www.mongodb.com/try/download/community
因为OpenEuler的是基于CentOS8开发的,所以我们Platform选择:RedHat/CentOS8.0,Package选择tgz,下载完成后通过Xshell、Xftp 7 上传至OpenEuler。
Xshell下载方法:https://www.jianshu.com/p/4716cc35750f
Xftp下载方法: https://blog.csdn.net/xc_123/article/details/92806570

第二种下载方法(使用源码下载)

#如果OpenEuler已通网,也可以直接在OpenEuler终端输入:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz   #源码下载
tar -zxvf /usr/mongodb-linux-x86_64-4.0.0.tgz -C /usr				   #解压
mv /usr/mongodb-linux-x86_64-4.0.0/ /usr/mongodb					   #重命名

为mongo分片配置系统变量,以便后续使用
echo 'export MONGODB_HOME=/usr/mongodb' >> /etc/profile      #注意mongodb的安装目录
echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile
source /etc/profile

.
.

3、分别在三台虚拟机上创建所需要的目录(三台虚拟机操作相同)

在这里插入图片描述

4、创建config server副本集

分别在三台机器创建配置文件(注意ip与mongodb存放目录)
[root@mongodb1 ~]# mkdir /etc/mongod/
[root@mongodb1 ~]# vi /etc/mongod/config.conf
虚拟机1配置文件内容
pidfilepath = /usr/mongodb/configsrv.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/configsrv.log
logappend =true
bind_ip = 127.0.0.1,192.168.81.185         #注意后面自己的ip地址
port = 21000
fork =true
configsvr =true
replSet = configs   #副本集名称
maxConns = 20000 #最大连接数
虚拟机2配置文件内容
pidfilepath = /usr/mongodb/configsrv.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/configsrv.log
logappend =true
bind_ip = 127.0.0.1,192.168.81.186         #注意后面自己的ip地址
port = 21000
fork =true
configsvr =true
replSet = configs   #副本集名称
maxConns = 20000 #最大连接数
虚拟机3配置文件内容
pidfilepath = /usr/mongodb/configsrv.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/configsrv.log
logappend =true
bind_ip = 127.0.0.1,192.168.81.187         #注意后面自己的ip地址
port = 21000
fork =true
configsvr =true
replSet = configs   #副本集名称
maxConns = 20000 #最大连接数

输入完成后,ESC→:wq 保存退出

.
.

5、在三台机器启动config server(启动失败注意是否配置系统变量)

[root@mongodb1 ~]# mongod -f /etc/mongod/config.conf

登录任意一台虚拟机的21000端口

[root@mongodb1 ~]# mongo --port 21000

配置副本集

config = { _id: "configs", members: [ {_id : 0, host : "192.168.81.185:21000"},{_id : 1, host : "192.168.81.186:21000"},{_id : 2, host : "192.168.81.187:21000"}] }

初始化(初始化失败注意是否关闭防火墙)

rs.initiate(config)       #只需要打这个
	"ok" : 1,          #注意是否显示1,显示1就是初始化成功
	"$gleStats" : {
		"lastOpTime" : Timestamp(15154898756, 1),
		"electionId" : ObjectId("000000000000000000000000")
	},
	"lastCommittedOpTime" : Timestamp(0, 0),
	"$clusterTime" : {
		"clusterTime" : Timestamp(15154898756, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(15154898756, 1)
}
configs:SECONDARY>
configs:PRIMARY>
输入初始化命令后命令行的先变为configs:SECONDARY(从节点),过一会就自动变成configs:PRIMARY(主节点)。

.
.

6、配置分片(三台虚拟机都要创建并且配置,可以使用Xshell的发送键输入到所有会话)

vi /etc/mongod/shard1.conf  #创建shard1配置文件
shard1配置文件输入
pidfilepath = /usr/mongodb/shard1.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/shard1/data
logpath = /data/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 22001
fork = true
replSet=shard1 #副本集名称
shardsvr = true 
maxConns=20000 #设置最大连接数

输入完成后,ESC→:wq 保存退出

vi etc/mongod/shard2.conf  #创建shard2配置文件
shard2配置文件输入
pidfilepath = /usr/mongodb/shard2.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/shard2/data
logpath = /data/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 22002
fork = true
replSet=shard2 #副本集名称
shardsvr = true 
maxConns=20000 #设置最大连接数

输入完成后,ESC→:wq 保存退出

vi /etc/mongod/shard3.conf  #创建shard3配置文件
shard3配置文件输入
pidfilepath = /usr/mongodb/shard3.pid   #注意自己的mongodb存放目录
dbpath = /data/mongodb/shard3/data
logpath = /data/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 22003
fork = true
replSet=shard3 #副本集名称
shardsvr = true 
maxConns=20000 #设置最大连接数

输入完成后,ESC→:wq 保存退出

启动shard1(三台虚拟机启动)
[root@mongodb1 ~]# mongod -f /etc/mongod/shard1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2296
child process started successfully, parent exiting
在192.168.81.185或者192.168.81.186登录MongoDB的22001端口创建副本集,不能在192.168.81.187登录,因为187是shard1的仲裁节点
[root@mongodb2 ~] mongo --port 22001
> use admin
>config = { _id: "shard1", members: [ {_id : 0, host : "192.168.81.185:22001"}, {_id: 1,host : "192.168.81.186:22001"},{_id : 2, host : "192.168.81.187:22001",arbiterOnly:true}] }
初始化
> rs.initiate(config)
shard1:SECONDARY>
shard1:PRIMARY>

在这里插入图片描述

初始化之后shard1先变为SECONDARY,过了一会自动变成PRIMARY

输入exit退出shard1 shell
.
.

启动shard2(三台虚拟机启动)
[root@mongodb1 ~] mongod -f /etc/mongod/shard2.conf  
about to fork child process, waiting until server is ready for connections.
forked process: 2229
child process started successfully, parent exiting
在192.168.81.186或者192.168.81.187登录MongoDB的22002端口创建副本集,不能在192.168.81.185登录,因为185是shard2的仲裁节点
[root@mongodb2 ~] mongo --port 22002
>use admin
switched to db admin
>config = { _id: "shard2", members: [{_id : 0, host : "192.168.81.185:22002" ,arbiterOnly:true},{_id : 1, host :"192.168.81.186:22002"},{_id : 2, host:"192.168.81.187:22002"}]}
初始化
>rs.initiate(config)  #只需要打这个
shard2:SECONDARY>
shard2:PRIMARY>

在这里插入图片描述

初始化之后shard2先变为SECONDARY,过了一会自动变成PRIMAR

输入exit退出shard2 shell

启动shard3(三台虚拟机启动)
[root@mongodb1 ~]mongod -f /etc/mongod/shard3.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 2296
child process started successfully, parent exiting
在185或者187机器登录MongoDB的22003端口,创建副本集,之所以不能在186登录,是因为186是shard3的仲裁节点
[root@mongodb1 ~] mongo --port 22003
>use admin
switched to db admin
>config = { _id: "shard3", members: [ {_id : 0, host : "192.168.81.185:22003"},  {_id : 1, host : "192.168.81.186:22003", arbiterOnly:true}, {_id : 2, host : "192.168.81.187:22003"}] }
初始化
>rs.initiate(config)  #只需要打这个
shard3:SECONDARY>
shard3:PRIMARY>

在这里插入图片描述

初始化之后shard3先变为SECONDARY,过了一会自动变成PRIMAR

输入exit退出shard3 shell

7、配置mongos路由服务器

创建配置文件(三台虚拟机都要创建并且配置,可以使用Xshell的发送键输入到所有会话)
vim /etc/mongod/mongos.conf
配置文件输入
pidfilepath = /usr/mongodb/mongos.pid   #注意自己的mongodb存放目录
logpath = /data/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/192.168.81.185:21000,192.168.81.186:21000,192.168.81.187:21000
maxConns=20000
启动mongos服务(三台虚拟机)
mongos -f /etc/mongod/mongos.conf

在这里插入图片描述

在任意一台虚拟机登录mongoDB 20000端口
mongo --port 20000

在这里插入图片描述

启用分片(将分片和路由器串联)
mongos> sh.addShard("shard1/192.168.81.185:22001,192.168.81.186:22001,192.168.81.187:22001")
mongos> sh.addShard("shard2/192.168.81.185:22002,192.168.81.186:22002,192.168.81.187:22002")
mongos> sh.addShard("shard3/192.168.81.185:22003,192.168.81.186:22003,192.168.81.187:22003")

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

在这里插入图片描述

查看集群状态
mongos>sh.status()

在这里插入图片描述

8、测试MongoDB分片

在任意一台机器连接MongoDB的20000端口
[root@mongodb1~]mongo --port 20000
指定要分片的库db1
mongos>sh.enableSharding("db1")

在这里插入图片描述

在db1库中创建/指定分片的集合cl01
mongos> sh.shardCollection("db1.cl01",{"id":1})

在这里插入图片描述

第二种方式
db.runCommand( { shardcollection : “db1.cl01”,key : {id: 1} } )
查看状态sh.status()
sh.status()

查看databases的状态会看到db1库和cl01集合

在这里插入图片描述
exit退出

到这一步,测试完成,mongodb分片部署完成!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值