1. 副本集的实现
1.准备工作:
(1)在系统环境变量中配置mongodb的bin目录的环境变量;
(2)安装python环境(必须是3.7,3.8,3.9及以上版本);
(3)在python环境上导入如下依赖:pip3 install python -dateutil
pip3 install psutil pymongo
pip3 install mtools(安装mtools工具)
mtools工具:是一套基于python实现的MongoDB工具集,其包括MongoDB日志分析,报表生成及简易的数据库安装等功能,其包含mlaunch组件,它支持快速搭建本地测试环境,可以是单机,副本集,分片集群。
2.副本集搭建
(1)在命令窗口建立副本集搭建目录并进入该目录:
(2)输入如下命令自动创建一个副本集(包含3个节点):mlaunch init --replicaset nodes 3
(3)通过命令mongo –port 27017进入端口为27017的节点,此时副本集会默认该节点为主节点,其余为从节点。
此时可以通过rs.status()来查看副本集的状态信息:
(4)在idea进行相关配置
代码:
spring.data.mongodb.uri=mongodb://localhost:27017,localhost:27018,localhost:27019/demo?connect=replicaSet&slaveOk=true&replicaSet=replset
(5)在MongoDBCompass工具进行相关配置:
配置成功:
(6)测试:(1.从节点对主节点数据的复制;2.模拟主节点宕机情形)
从节点对主节点数据的复制:
主节点插入一条数据:
另外开启一个cmd窗口通过mongo –port 27018命令打开端口为27018的从节点:
MongoDBCompass工具上查看结果:
模拟主节点宕机情形:
关闭主节点端口号进程:
(电脑已崩,换个副本集测试,端口号为40000,40001,40002,主节点为40000)
此时主节点为40000:
关闭40000端口服务再打开:发现40000端口变成从节点,40001端口晋升成主节点:
数据备份到40001端口的新主节点:
(7)其它操作:(将一个从节点改为仲裁节点)
rs.remove(“localhost:27019”):从副本集移除该节点
rs.addArb(“localhost:27019”):添加该节点为仲裁节点
补充:rs.add(“主机名:端口号”):天界该节点为从节点
转变成功:
2. 分片集群的实现
(一句代码轻松创建一个分片集群)
注:前期准备工作与副本集搭建操作一致。
(1)分片集群搭建流程:
建立一个目录存放分片相关的数据集并切换到该目录下:
通过如下命令实现分片集群的创建,共包括两个副本集(6个节点),3个配置节点,3个路由节点:(共12个节点)
命令:mlaunch init –sharded 2 –replicaset –node 3 –config 3 –csrs –mongos 3 –port 27050 --noauth
通过mlaunch list命令检查分片实例:
通过命令mlaunch list –startup命令可查看分片集群相关信息(进程号,状态,节点路径等):
通过mlaunch list –tags命令可以查看分片集群的标签:
(2)分片相关操作:
通过mongo –port 27050命令进入第一个路由节点进行相关集群配置:
加入第一和第二个副本集的命令:(忘了截图)
sh.addShard(“shard01/localhost:27053, localhost:27054, localhost:27055”)
sh.addShard(“shard02/localhost:27056, localhost:27057, localhost:27058”)
通过sh.status()命令查看该集群的状态:(注意是sh,副本集是rs开头)
(3)分片策略(哈希策略 | 范围策略)
哈希策略:mongodb计算一个字段的哈希值,一定范围的哈希值形成一个数据块
使用sh.shardCollection(“articledb”)命令初始化数据库:(忘记截下运行结果)
再使用sh.shardCollection(“articled.comment”,{“nickname”:”hashed”})命令进行分片操作,(上述命令使用nickname作为片键)
分片结果如下:(sh.status命令查看)
哈希分片小测试:(结果比较直观)
方案:在27050端口的路由节点中插入一千条数据,然后分别在副本集1和2中查看数据条数。
路由节点的数据条数:
副本集1的数据条数:507
副本集1的数据条数:493
范围策略分片:
Mongodb按照片键的范围把数据分成不同部分,(假设有一个数字的片键,想象一个从负无穷到正无穷的直线,每一个片键是直线上的一点,Mongodb把这条直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了片键在一定范围内的数据。)
如下使用年龄作为片键,按照点赞数的值进行分片:
命令:sh.shardCollection(“articled.author”,{“age”:1}
查看分片结果:
其它一些相关命令的操作:
启动服务:mlaunch start
关闭服务:mlaunch stop
退出当前端口操作:exit
杀死进程:taskkill /pid 进程号 /F
清除代码:cls
THANK YOU!