CentOS 8自动化安装MongoDB并安装和实验master-slave集群、副本集群(Replica Set)、分片集群(Sharding)

文章目录

  • CentOS 8自动化安装MongoDB
  • 安装Master-Slave集群
  • 安装并测试副本集(Replica Set)集群
    • 安装副本集(Replica Set)集群
    • 实验测试
  • 安装并测试分片集群(Sharding)

注意实验使用的是ARM架构的CentOS 8 虚拟机

CentOS 8自动化安装MongoDB

  1. 首先,更新系统并安装必要的依赖项:
sudo dnf update -y
sudo dnf install -y wget
  1. 添加 MongoDB 官方仓库:

创建一个新的仓库文件 /etc/yum.repos.d/mongodb-org.repo

sudo nano /etc/yum.repos.d/mongodb-org.repo

将以下内容添加到文件中,保存并退出:

[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/aarch64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

在这里插入图片描述

使用nano编辑器打开/etc/yum.repos.d/mongodb-org.repo文件后,按下Ctrl + X组合键退出编辑模式,按下Y键保存更改,然后按下Enter键确认保存。如果不想保存更改,则可以按下N键,然后按下Enter键不保存更改并退出编辑器。

  1. 安装 MongoDB:
sudo dnf install -y mongodb-org
  1. 启动 MongoDB 服务并设置开机自启动:
sudo systemctl start mongod
sudo systemctl enable mongod

在这里插入图片描述

  1. 检查 MongoDB 服务状态:
sudo systemctl status mongod

在这里插入图片描述

现在,已成功安装了 MongoDB。接下来,了解如何使用 MongoDB。

  1. 使用 mongo shell 连接到 MongoDB 服务:
mongo

这将打开一个交互式 mongo shell,您可以在其中执行 MongoDB 命令。

在这里插入图片描述

  1. 显示数据库列表:
show dbs

在这里插入图片描述

  1. 创建或切换到一个数据库,例如 myDatabase:
use myDatabase
  1. 在当前数据库中创建一个集合并插入文档:
db.myCollection.insert({name: "John", age: 30, city: "New York"})
  1. 查询当前集合中的所有文档:
db.myCollection.find()

这些是一些基本的 MongoDB 操作。可以在 MongoDB 官方文档中找到更多详细信息和高级功能:https://docs.mongodb.com/manual/

安装Master-Slave集群

因新版本 MongoDB 已不再支持主从复制(Master/Slave Replication),这里只讲解安装过程,不进行实际测试。如果需要请使用 MongoDB(如 3.6.x)进行实验。

注意新版本 MongoDB 已不再支持主从复制(Master/Slave Replication),需要使用 MongoDB(如 3.6.x)进行实验。MongoDB 官方建议使用副本集代替主从复制,因为副本集提供了更高的数据可用性和容错能力,同时具有自动故障转移功能。

  1. 首先确保您已经按照之前的步骤安装了 MongoDB
  2. 在服务器(CentOS 8)上创建两个单独的目录用于存储主节点和从节点的数据:
sudo mkdir -p /data/db-master
sudo mkdir -p /data/db-slave

在这里插入图片描述

  1. 更改这两个目录的所有权,使其属于当前用户:
sudo chown -R `whoami`:`whoami` /data/db-master
sudo chown -R `whoami`:`whoami` /data/db-slave

在这里插入图片描述

  1. 启动主节点实例:
mongod --dbpath /data/db-master --port 27017 --master
  1. 启动从节点实例:

在另一个终端窗口中运行以下命令:

mongod --dbpath /data/db-slave --port 27018 --slave --source localhost:27017

现在,您已经在同一台服务器上启动了两个 MongoDB 实例,分别作为主节点和从节点。接下来进行实验测试:

  1. 向主节点插入数据:

连接到主节点的 MongoDB shell:

mongo --port 27017

选择一个数据库,创建一个集合并插入文档:

use testDB
db.testCollection.insert({name: "Alice", age: 28})
  1. 查询主节点的数据:
db.testCollection.find()
  1. 查询从节点的数据:

连接到从节点的 MongoDB shell:

mongo --port 27018

在从节点 MongoDB shell 中,启用从节点查询:

rs.slaveOk()

选择数据库并查询数据:

use testDB
db.testCollection.find()

现在能在从节点上看到主节点插入的数据。

  1. 停止主节点以测试故障转移:
    首先,在主节点运行的终端窗口中,按 Ctrl+C 停止 MongoDB 实例。

  2. 在从节点上启动新的主节点:
    首先,停止从节点实例。然后,运行以下命令,将从节点转换为主节点:

mongod --dbpath /data/db-slave --port 27018 --master
  1. 向新主节点插入数据:

连接到新主节点的 MongoDB shell:

mongo --port 27018

选择相同的数据库并插入一个新文档:

use testDB
db.testCollection.insert({name: "Bob", age: 32})
  1. 查询新主节点上的数据:
db.testCollection.find()

现在,能在新主节点上看到之前插入的数据和新插入的数据。注意新版本 MongoDB 已不再支持主从复制(Master/Slave Replication),需要使用 MongoDB(如 3.6.x)进行实验。MongoDB 官方建议使用副本集代替主从复制,因为副本集提供了更高的数据可用性和容错能力,同时具有自动故障转移功能。

安装并测试副本集(Replica Set)集群

本实验使用在arm架构centos8上的mongodb,安装副本集(Replica Set)集群,并进行小型实验测试。在一台机器上完成,通过不同端口来模拟不同的服务器。实验测试有插入数据、查询数据、停止主节点测试故障转移、手动提升从节点为主节点、向新主节点插入数据等功能。

副本集(Replica Set)集群实验完美成功~~~

安装副本集(Replica Set)集群

  1. 首先,确保您已经按照之前的步骤安装了 MongoDB。
  2. 创建三个单独的目录,用于存储三个 MongoDB 实例的数据:
sudo mkdir -p /data/db1
sudo mkdir -p /data/db2
sudo mkdir -p /data/db3

在这里插入图片描述

  1. 更改这三个目录的所有权,使其属于当前用户:
sudo chown -R `whoami`:`whoami` /data/db1
sudo chown -R `whoami`:`whoami` /data/db2
sudo chown -R `whoami`:`whoami` /data/db3

在这里插入图片描述

  1. 启动三个 MongoDB 实例:

三个不同的终端窗口中分别运行以下命令,将 <your server’s IP address> 替换为你的服务器 IP 地址。:

刚刚安装的MongoDB会先占用27017端口,运行以下命令以查看占用27017端口的进程PID,然后杀死该进程或更改 MongoDB 实例的端口来解决冲突:

sudo lsof -i :27017

kill <pid>

再在三个不同的终端窗口中分别运行以下命令:

mongod --dbpath /data/db1 --port 27017 --replSet rs0 --bind_ip localhost,<your server's IP address>
mongod --dbpath /data/db2 --port 27018 --replSet rs0 --bind_ip localhost,<your server's IP address>
mongod --dbpath /data/db3 --port 27019 --replSet rs0 --bind_ip localhost,<your server's IP address>

我的ip是192.168.178.130,所以命令是下面三个启动MongoDB 实例的命令:

mongod --dbpath /data/db1 --port 27017 --replSet rs0 --bind_ip localhost,192.168.178.130
mongod --dbpath /data/db2 --port 27018 --replSet rs0 --bind_ip localhost,192.168.178.130
mongod --dbpath /data/db3 --port 27019 --replSet rs0 --bind_ip localhost,192.168.178.130
  1. 连接到任一 MongoDB 实例的 shell:

再打开一个命令行窗口:

mongo --port 27017

在这里插入图片描述

  1. 初始化副本集:

在 MongoDB shell 中,运行以下命令:

rs.initiate({_id: "rs0", members: [{_id: 0, host: "localhost:27017"}, {_id: 1, host: "localhost:27018"}, {_id: 2, host: "localhost:27019"}]})

在这里插入图片描述

实验测试

现在副本集已经建立。接下来进行实验测试:

  1. 向主节点插入数据:
    首先查找主节点:
rs.status()

在这里插入图片描述

在上述信息中,找到 name 为主机名或 IP 地址的节点,其 stateStrPRIMARY,则为主节点,如下图:
在这里插入图片描述

再打开一个命令行窗口(第5个),连接到主节点的 MongoDB shell,并选择一个数据库,创建一个集合并插入文档:

mongo --port 27017
use testDB
db.testCollection.insert({name: "Alice", age: 28})

在这里插入图片描述

  1. 查询数据:

在主节点上查询数据:

db.testCollection.find()

在这里插入图片描述

在从节点上查询数据(再打开一个命令行窗口,这是第6个。连接到从节点的 MongoDB shell:):

mongo --port 27018

在从节点 MongoDB shell 中,启用从节点查询:

rs.secondaryOk()

选择数据库并查询数据:

use testDB
db.testCollection.find()

在这里插入图片描述
现在能在从节点上看到主节点插入的数据。

  1. 停止主节点以测试故障转移:
    首先,确定当前主节点的端口(27017、27018 或 27019)。然后,在主节点运行的终端窗口中,按 Ctrl+C 停止 MongoDB 实例。

  2. 查看故障转移是否成功:
    在另外两个节点上运行以下命令查看其状态:

rs.status()

在输出中,能看到另外一个节点已经成为新的主节点,其 stateStrPRIMARY,是新的主节点,如下图:
在这里插入图片描述

  1. 手动提升从节点为主节点:
    如果您希望手动将某个从节点提升为主节点,请在当前主节点的 MongoDB shell 中运行以下命令:
    比如现在主机端口是27018,我想换成端口是27019变成主节点:
mongo --port 27018
rs.stepDown()

在这里插入图片描述

该节点(端口号)会将其主节点身份释放,并开始进行选举以产生新的主节点。
再次查看,发现主节点变成端口号是27019的机器:

rs.status()

在这里插入图片描述

  1. 向新主节点插入数据:
    连接到新主节点的 MongoDB shell:
mongo --port 27019

在这里插入图片描述

选择相同的数据库并插入一个新文档:

use testDB
db.testCollection.insert({name: "Bob", age: 32})
  1. 查询新主节点上的数据:
db.testCollection.find()

现在,能在新主节点上看到之前插入的数据和新插入的数据。
在这里插入图片描述

安装并测试分片集群(Sharding)

本实验使用在arm架构centos8上的mongodb,安装分片集群(Sharding),并进行小型实验测试。在一台机器上完成,通过不同端口来模拟不同的服务器。实验测试有插入数据、查询数据、停止主节点测试故障转移、手动提升从节点为主节点、向新主节点插入数据等功能。

在一台CentOS 8(IP:192.168.178.130)机器上配置MongoDB分片集群(Sharding)的详细步骤如下:

  1. 创建目录结构:
sudo mkdir -p /data/shard1 /data/shard2 /data/shard3 /data/configdb /data/mongos
  1. 配置分片(shard)服务器:
sudo vi /data/shard1/mongod.conf

添加以下内容:

sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard1ReplSet
storage:
  dbPath: /data/shard1
net:
  bindIp: 192.168.178.130
  port: 27018

重复这个过程,分别为shard2(/data/shard2/mongod.conf)和shard3(/data/shard3/mongod.conf)创建配置文件,将端口号分别更改为27019和27020,以及将replSetName更改为shard2ReplSet和shard3ReplSet。

  1. 配置配置服务器(config server):
sudo vi /data/configdb/mongod.conf

添加以下内容:

sharding:
  clusterRole: configsvr
replication:
  replSetName: ConfigReplSet
storage:
  dbPath: /data/configdb
net:
  bindIp: 192.168.178.130
  port: 27040
  1. 配置mongos路由服务器:
sudo vi /data/mongos/mongos.conf

添加以下内容:

sharding:
  configDB: ConfigReplSet/192.168.178.130:27040
net:
  bindIp: 192.168.178.130
  port: 27017
  1. 启动各个组件:
sudo mongod -f /data/configdb/mongod.conf
sudo mongod -f /data/shard1/mongod.conf
sudo mongod -f /data/shard2/mongod.conf
sudo mongod -f /data/shard3/mongod.conf
sudo mongos -f /data/mongos/mongos.conf
  1. 初始化配置服务器复制集:
mongo --host 192.168.178.130 --port 27040

在MongoDB shell中输入:

rs.initiate({_id: "ConfigReplSet", configsvr: true, members: [{_id: 0, host: "192.168.178.130:27040"}]})
  1. 初始化分片服务器复制集:
    对于shard1、shard2和shard3,使用以下命令连接:
mongo --host 192.168.178.130 --port 27018
mongo --host 192.168.178.130 --port 27019
mongo --host 192.168.178.130 --port 27020

分别在每个shard的MongoDB shell中输入以下内容,将“shardXReplSet”替换为相应的复制集名称(例如:shard1ReplSet、shard2ReplSet、shard3ReplSet):

rs.initiate({_id: "shardXReplSet", members: [{_id: 0, host: "192.168.178.130:<shard-port>"}]})

<shard-port>替换为分片的端口号(27018、27019或27020)。

  1. 添加分片到mongos:
mongo --host 192.168.178.130 --port 27017

在MongoDB shell中输入:

sh.addShard("shard1ReplSet/192.168.178.130:27018")
sh.addShard("shard2ReplSet/192.168.178.130:27019")
sh.addShard("shard3ReplSet/192.168.178.130:27020")
  1. 创建数据库并启用分片:
use mydb
sh.enableSharding("mydb")
  1. 选择集合并设置分片键:
sh.shardCollection("mydb.mycollection", {_id: "hashed"})

现在MongoDB分片集群已经设置完成。您可以插入数据、查询数据、测试故障转移等。

插入数据:

db.mycollection.insert({name: "John Doe", age: 30})

查询数据:

db.mycollection.find({name: "John Doe"})

为了在一台机器上测试故障转移和手动提升从节点为主节点,我们可以在本地模拟网络故障,停止主节点并观察从节点提升为主节点。首先,我们需要找出主节点:

use mydb
db.runCommand({isMaster: 1})

停止主节点(假设主节点是shard1,端口27018):

sudo mongod --dbpath /data/shard1 --shutdown

查看从节点(shard2或shard3)提升为主节点:

mongo --host 192.168.178.130 --port <shard-port>

<shard-port>替换为从节点的端口号(27019或27020),然后执行:

rs.status()

找到新的主节点后,您可以使用db.mycollection.insert()命令向新的主节点插入数据。

请注意,这些命令和步骤是在一台机器上设置MongoDB分片集群的简化示例。在生产环境中,需要在多台机器上设置副本集以确保高可用性和数据冗余。

  1. 故障转移:

在生产环境中,每个分片都应该是一个副本集,包含多个节点。在我们的实验设置中,由于我们仅在单台机器上进行操作,每个分片都只有一个节点。因此,我们无法在此设置中直接演示故障转移。但是,我们可以介绍如何在具有多个节点的副本集中进行故障转移。

在一个具有多个节点的副本集中,当主节点发生故障时,自动发生故障转移。这时,从节点之间会发生选举,选出一个新的主节点。故障转移过程通常在几秒钟内自动完成。

  1. 手动提升从节点为主节点:

在具有多个节点的副本集中,您可以通过调整成员的优先级来影响主节点的选举。例如,您可以将一个从节点的优先级设置得比其他节点高,以确保它在下一次选举中被选为主节点。您可以使用以下命令调整优先级:

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

当新的主节点被选举出来后,您可以向新的主节点插入数据,如下所示:

db.mycollection.insert({name: "Jane Doe", age: 28})

请注意,我们在本教程中展示的设置是为了实验和学习目的,因此在单台机器上进行操作。然而,在生产环境中,建议使用多台机器来设置副本集,以确保高可用性和数据冗余。在实际的生产环境中,需要根据实际需求和场景调整设置和配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【单片机】基于Arduino cli和VS Code配置开发环境,彻底抛弃Arduino IDE

文章目录 0 前言1 VS Code的优势和Arduino IDE的劣势2 前期准备3 Arduino cli3.1 Arduino cli是什么3.2 下载与安装3.3 基本使用3.4 开发环境配置 4 VS Code配置5 参考链接 0 前言 之前有在电脑上基于VS Code配置Arduino环境&#xff0c;大致方法就是在安装Arduino IDE的前提下…

linux网络

查看网络接口信息 ifconfig mtu 最大传输单元 mtu和mss区别 hostname命令 永久修改 hostnamectl set-hostname 切换shell环境生效 或者vi hostname 编辑完重启生效 查看路由表条目route route查看或设置主机中路由表信息 route -n将路由记录中的地址信息显示为数字形式 …

Linux查看串行端口

查看串口驱动 cat /proc/tty/driver/serial查看串口设备 dmesg | grep ttyS*[rootlocalhost driver]# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD 2:…

Hadoop之HBase

文章目录 一、HBase简介二、HBase结构1.1HBase逻辑结构1.2HBase物理结构1.3HBase基础架构 三、HBase安装配置3.1单机模式3.2集群搭建 四、HBase JAVA API 一、HBase简介 《HBase官方文档》的原文地址是&#xff1a;http://hbase.apache.org/book.html W3Cschool.cn进行整理翻译…

上位机:创建WPF应用并使用控件完成控件交互

创建WPF应用并使用控件完成控件交互 1.XAML是WPF技术中专门用于设计UI的语言。 2.优点,XAML是一种声明型语言,只能用来声明一些UI元素、绘制UI和动画,不能在其中加入程序逻辑。实现UI与逻辑的剥离。 下面使用visual studio2019建立一个WPF项目: 进入项目,点击运行,然后…

今天面了个字节跳动拿35K出来的,真是砂纸擦屁股,给我露了一手啊

今年的金三银四已经快要结束了&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析&#xff0c;感觉思路很有意思&#xff0c;感兴趣的xdm可以到大佬视频下提供的链接进行测试&#xff08;传送门&#xff09;这类社交平台的XSS漏洞利用起来其实危害是特别大的&#xff0c;利用XSS能在社交平台上呈现蠕虫式的扩散&#xff0c;大部分…

电脑C盘被格式化 如何快速将被删的数据文件恢复找回?

如今的互联网时代&#xff0c;不管是办公还是休闲&#xff0c;一般都喜欢在电脑上进行操作&#xff0c;尤其是办公&#xff0c;感觉有了电脑能轻松不少&#xff0c;可以将一些工作中的重要数据保存在电脑里面&#xff0c;那么电脑里面的数据真就很安全了吗&#xff1f;这个就让…

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

c/c&#xff1a;二维数组&#xff0c;数组的行数和列数求法sizeof&#xff0c;数组初始化不同形式&#xff0c;5个学生&#xff0c;3门功课&#xff0c;求学生总成绩和功课总成绩 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#x…

Verilog | 二进制与格雷码

一、格雷码简介 格雷码是一个叫弗兰克格雷的人在 1953 年发明的&#xff0c;最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时&#xff0c;只有一个数据位发生跳变&#xff0c;由于这种特点&#xff0c;就可以避免二进…

HttpServletRespon

1、HttpServletRespon对象 在Servlet API中&#xff0c;定义了一个HttpResponse接口&#xff0c;它继承于ServletResponse接口&#xff0c;专门用于封装HTTP响应消息 HTTP响应消息分为响应状态行、响应消息头、响应消息体三部分&#xff0c;所以HttpResponse接口中定义了向客…

Qt模型视图结构

一.模型视图介绍 1.Model/View(模型/视图结构) 视图(View)是显示和编辑数据的界面组件&#xff0c; 模型(Model)是视图和原始数据之间的接口 2.视图组件有:QListView QTreeView QTableView&#xff0c;QColumnView&#xff0c;QHeaderView 模型组件有:QStringListM…

设计模式-原型模式

原型模式 文章目录 原型模式什么是原型模式为什么要用原型模式原型模式的实现方式浅拷贝深拷贝 如何实现深拷贝递归拷贝对象序列化与反序列化优化浅拷贝与深拷贝 总结 什么是原型模式 如果对象的创建成本比较大&#xff0c;而同一个类的不同对象之间差别不大&#xff08;大部分…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有&#xff1a; (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…

通过工具生成指定 类型 大小 文件

今天给大家介绍一个神器 首先 大家在开发过程中或许经常需要涉及到文件上传类的功能 需要测试文件过大 空文件等等清空 不同大小的文件 而这种文件大小是比较不好控制的 但大家可以下载我的资源 文件生成工具(可生成指定大小 类型文件) 下载下来里面就有一个 fileGeneration…

开发常用的 Linux 命令1(文件和目录)

开发常用的 Linux 命令汇总1&#xff08;文件和目录&#xff09; 作为开发者&#xff0c;Linux是我们必须掌握的操作系统之一。因此&#xff0c;在编写代码和部署应用程序时&#xff0c;熟练使用Linux命令非常重要。这些常用命令不得不会&#xff0c;掌握这些命令&#xff0c;…

干货分享 | 如何在业余时间学习数据分析?

从社会学背景的数分小白到独揽公司市场部的数据分析&#xff0c;和大家简单分享我的数据分析升级打怪之路。 简单说就是两点【培养数据分析思维】【提升数据分析技能】 思维的培养主要靠书籍和课程 以下是一些对我影响较大的书籍&#xff0c;按照【入门、进阶、高阶】简单做了…

Vue2-黑马(十)

目录&#xff1a; &#xff08;1&#xff09;vuex-actions &#xff08;2&#xff09;vuex-调用actions &#xff08;3&#xff09;vue2实战-项目搭建 &#xff08;1&#xff09;vuex-actions 有这么一个需求&#xff0c;绿色的组件从服务器获取数据放入store&#xff0c;主…

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件&#xff0c;但是您还不是很熟练地掌握英文&#xff0c;需要翻译才能完成您的任务吗&#xff1f;哪个软件能够免费把英文文档翻译成中文&#xff1f;让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…

grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)

文章目录 20221011 grep如何匹配多个标志&#xff1f;20230412 grep -q&#xff08;Use grep -q instead of comparing output with [ -n .. ].警告&#xff09;20230421 匹配前后空格\s 参考文章&#xff1a;grep命令详解 | grep -c [被搜索文本] # 统计被搜索文本出现的次数…