一、实验综述
1、实验目的及要求
(1)了解MongoDB副本集
(2)熟悉MongoDB副本集成员
(3)掌握MongoDB副本集部署
(4)掌握MongoDB副本集操作
(5)理解副本集机制
实验过程:
(1)通过三台虚拟机部署官方推荐方案的副本集,该副本集包含一个主节点和两个副本节点,三台虚拟机的创建可参考本书资源中提供的环境配置文档,副本集各服务器的基本信息及角色分配如下表。
虚拟机名称 IP地址 成员角色 主机名
NoSQL_01 192.168.121.134 主节点 nosql01
NoSQL_02 192.168.121.135 副本节点 nosql02
NoSQL_03 192.168.121.136 副本节点 nosql03
(2)副本集环境准备、安装与启动(参考教材安装过程)
(3)副本集初始化
(4)查看副本集成员状态
(5)同步副本集
①在副本集主节点写入数据:进入服务器nosql01(副本集主节点)中MongoDB的bin目录;登陆MongoDB客户端;切换到test数据库;创建集合user并插入一条文档;查看文档是否写入成功;
②在副本节点验证数据是否同步成功:进入服务器nosql02(副本集副本节点)中MongoDB的bin目录;登陆MongoDB客户端;切换到test数据库;查看文档是否写入成功;开启副本节点读取权限;
(6)故障转移
查看MongoDB服务运行的进程;关闭MongoDB服务进程;登陆服务器nosql02和nosql03的客户端,验证这两个副本节点中是否有其中的一个节点转为主节点;
(7)配置副本集成员
①获取副本集成员配置信息:进入服务器nosql02中MongoDB的bin目录;登录MongoDB客户端;将副本集成员信息赋值到变量cfg中;
②调整副本集成员的优先级:将“_id”为0的副本节点(即服务器nosql01)优先级值由1改为2;将调整副本集成员优先级的操作应用到副本集;
③配置隐藏节点:在服务器nosql01中MongoDB的bin目录下登录MongoDB客户端;将副本集配置信息赋值到变量cfg;设置服务器nosql02中副本节点的优先级为0;设置服务器nosql02中副本节点为隐藏节点;将调整副本集成员的操作应用到副本集;
④配置延迟节点:将副本集配置信息赋值到变量cfg;设置服务器nosql03中副本节点的优先级为0;设置服务器nosql03中副本节点为隐藏节点;设置延迟时间为3600秒;将调整副本集成员的操作应用到副本集;
⑤配置副本集成员投票权:在服务器nosql01中MongoDB的bin目录下登录MongoDB客户端;将副本集配置信息赋值到变量cfg;设置服务器nosql02中隐藏节点的投票权设置为0,即不可投票;将调整副本集成员的操作应用到副本集;
⑥将副本节点转为仲裁节点:在服务器nosql01中MongoDB的bin目录下登录MongoDB客户端;将副本集配置信息赋值到变量cfg;移除服务器nosql02中的隐藏节点;在服务器nosql02上退出MongoDB客户端并关闭MongoDB进程,备份MongoDB数据存放目录;在服务器nosql02上创建一个新的MongoDB数据存放目录,并以该目录为数据存放目录在MongoDB的bin目录下重新启动MongoDB;在副本集主节点(服务器nosql01)将该服务器nosql02中的MongoDB以仲裁节点的角色添加到副本集中。

认真完成实验题,能正确运行,提交实验报告并上传程序,实验报告要求写出操作步骤、结果、问题、解决方法、体会等。
2、实验仪器、设备或软件
计算机、Linux、VMvare15pro、Secure CRT、MongoDB4.2相关的操作系统等。
二、实验过程(实验步骤、代码、数据、过程截图)
1.在服务器nosql01上启动MongoDB服务。以副本集模式启动MongoDB。如图2-1所示
代码:

cd /opt/servers/mongodb_demo/replicaset/mongodb/bin
./mongod --replSet itcast \
   --dbpath=/opt/servers/mongodb_demo/replicaset/data/ \
   --logpath=/opt/servers/mongodb_demo/replicaset/logs/mongodb.log \
   --port 27017 --bind_ip nosql01 --logappend -fork

在这里插入图片描述

图2-1
2.进入MongoDB的bin目录。登录MongoDB客户端。如图2-2所示:
代码:

cd /opt/servers/mongodb_demo/replicaset/mongodb/bin
./mongo --host nosql01 --port 27017

在这里插入图片描述

图2-2

3.在服务器nosql01的MongoDB客户端中执行副本集初始化操作。如图2-3所示:
代码:rs.initiate()
在这里插入图片描述

图2-3

4.将服务器nosql04中的MongoDB以副本节点的角色添加到副本集中和服务器nosql05中的MongoDB以副本节点的角色添加到副本集中。如图2-4所示:
代码:

rs.add("nosql04:27017")
rs.add("nosql05:27017")

在这里插入图片描述

图2-4

5.查看副本集成员状态信息。如图2-5,2-6所示:
代码:rs.status()
在这里插入图片描述

图2-5
在这里插入图片描述

图2-6
6.切换到test数据库。创建集合user并插入一条文档。查看文档是否写入成功。如图2-7所示。
代码:

use test
db.user.insert({"name":"bozai"})
db.user.find()

在这里插入图片描述

图2-7
7.进入服务器nosql02(副本集副本节点)中MongoDB的bin目录。登陆MongoDB客户端。切换到test数据库。查看文档是否写入成功。开启副本节点读取权限。如图2-8所示。
代码:

cd /opt/servers/mongodb_demo/replicaset/mongodb/bin
./mongo --host nosql02 --port 27017
use test
db.user.find()  //由于副本节点默认没有读取副本集内容权限,因此会报错
rs.slaveOk()  //开启读取权限后再次执行查看文档命令

在这里插入图片描述

图2-8
8.在服务器nosql01中关闭MongoDB服务,在此之前需要在MongoDB客户端中执行exit命令退出MongoDB客户端。查看MongoDB服务运行的进程。如图2-9所示。
代码:

Exit
ps -ef | grep mongodb

在这里插入图片描述

图2-9
9.登陆服务器nosql04和nosql05的客户端,验证这两个副本节点中是否有其中的一个节点转为主节点( MongoDB的bin目录)。进入服务器nosql04中MongoDB的bin目录。如图2-10所示。
代码:

./mongo --host nosql04 --port 27017
./mongo --host nosql05 --port 27017
cd /opt/servers/mongodb_demo/replicaset/mongodb/bin
./mongo --host nosql04 --port 27017

在这里插入图片描述

图2-10
10.将副本集成员信息赋值到变量cfg中。如图2-11,2-12所示。
代码:cfg=rs.conf()
在这里插入图片描述

图2-11
在这里插入图片描述

图2-12
11.将“_id”为0的副本节点(即服务器nosql01)优先级值由1改为2。将调整副本集成员优先级的操作应用到副本集。如图2-13所示。
代码:

cfg.members[0].priority = 2
rs.reconfig(cfg)

在这里插入图片描述

图2-13
12.在服务器nosql01中MongoDB的bin目录下登录MongoDB客户端。将副本集配置信息赋值到变量cfg。设置服务器nosql02中副本节点的优先级为0。设置服务器nosql02中副本节点为隐藏节点。将调整副本集成员的操作应用到副本集。如图2-14所示。
代码:

./mongo –-host nosql01 –-port 27017
cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
rs.reconfig(cfg)

在这里插入图片描述

图2-14
13.将副本集配置信息赋值到变量cfg。设置服务器nosql04中副本节点的优先级为0。设置服务器nosql04中副本节点为隐藏节点。将调整副本集成员的操作应用到副本集。设置延迟时间为3600秒。如图2-15,2-16所示。
代码:

cfg = rs.conf()
cfg.members[2].priority = 0
cfg.members[2].hidden = true
cfg.members[2].slaveDelay = 3600
rs.reconfig(cfg)

在这里插入图片描述

图2-15
在这里插入图片描述

图2-16
14.将副本集配置信息赋值到变量cfg。设置服务器nosql02中隐藏节点的投票权设置为0,即不可投票。将调整副本集成员的操作应用到副本集。如图2-17所示。
代码:

cfg = rs.conf()
cfg.members[1].votes = 0
rs.reconfig(cfg)

在这里插入图片描述

图2-17
15.移除服务器nosql02中的隐藏节点。如图2-18所示。
代码:rs.remove("nosql02:27017")
在这里插入图片描述

图2-18
16.在服务器nosql02上创建一个新的MongoDB数据存放目录,并以该目录为数据存放目录在MongoDB的bin目录下重新启动MongoDB。在副本集主节点(服务器nosql01)将该服务器nosql02中的MongoDB以仲裁节点的角色添加到副本集中。如图2-19,2-20所示。

mkdir /opt/servers/mongodb_demo/replicaset/data-new
   ./mongod --replSet itcast \
   --dbpath=/opt/servers/mongodb_demo/replicaset/data-new\ 
   --logpath=/opt/servers/mongodb_demo/replicaset/logs/mongodb.log \
   --port 27017 --bind_ip nosql02 --logappend --fork
rs.addArb("nosql02:27017")

图2-19
在这里插入图片描述

图2-20

在这里插入图片描述
三、结论
分析讨论
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐