搭建 mongodb 副本集,很详细

搭建 mongodb 副本集,很详细

  • 一、前言
  • 二、创建用户
    • 1、创建 root 用户
    • 2、创建测试用户
    • 3、修改用户密码
  • 三、修改配置文件(主节点)
    • 1、开启登录认证
    • 2、加上副本集
    • 3、最终配置文件
  • 四、副本节点
    • 1、创建副本节点目录
    • 2、编辑配置文件
    • 3、启动副本节点
  • 五、仲裁节点
    • 1、创建仲裁节点目录
    • 2、修改配置文件
    • 3、启动仲裁节点
  • 六、配置副本集
    • 1、配置主节点
    • 2、添加副本节点
    • 3、配置仲裁节点
  • 七、测试事务

一、前言

在项目中使用事务报错,折腾了好久发现单体的 mongodb 不支持事务,需要副本集,在搭建的过程也踩了很多坑,这里做个记录。

二、创建用户

1、创建 root 用户

切换到 admin 库中

use admin

创建 root 用户

db.createUser({user: "root",pwd: "123456", // or cleartext passwordroles: [{ role: "root", db: "admin" }]}
)

这里是为了演示,实际密码不能设置那么简单

在这里插入图片描述

2、创建测试用户

创建测试数据库 test ,命令如下:

use test

创建测试用户 test ,命令如下:

db.createUser({user: "test",pwd: "123456", // or cleartext passwordroles: [{ role: "readWrite", db: "test" }]}
)

这里是为了演示,实际密码不能设置那么简单

在这里插入图片描述

3、修改用户密码

假如要修改用户 root 的密码,从原来的 123456 改为 112233 ,可以使用如下命令:

db.changeUserPassword('root','112233');

操作如下图所示

在这里插入图片描述

如果要修改数据库 test 中的用户 test ,将密码从原来的 123456 修改为 334455 ,可以使用如下命令:

db.changeUserPassword('test','334455');

操作如下图所示
在这里插入图片描述

三、修改配置文件(主节点)

1、开启登录认证

添加如下配置:

在这里插入图片描述

security:# 开启登录认证authorization: enabled

重启 mongodb ,先关闭,命令如下:

mongod --config /usr/local/mongodb/mongodb-8.0.1/mongodb.conf --shutdown

再启动,命令如下:

mongod --config /usr/local/mongodb/mongodb-8.0.1/mongodb.conf

在这里插入图片描述

再次进入 mongosh 操作

在这里插入图片描述

可以看到报了一个权限的错,使用前面创建的 test 用户进行登录

db.auth("test", "123456")

再次查询

db.getCollection("thread_pool_test").find()

在这里插入图片描述

2、加上副本集

编辑根目录下的配置文件 mongodb.conf ,加上如下配置

在这里插入图片描述

replication:# 副本集名称replSetName: rs0

副本集名称可以自定义,这里为 rs0 。

重启 mongodb ,先关闭,命令如下:

mongod --config /usr/local/mongodb/mongodb-8.0.1/mongodb.conf --shutdown

再启动,命令如下:

mongod --config /usr/local/mongodb/mongodb-8.0.1/mongodb.conf

会报如下错:
在这里插入图片描述
这是说同时开启了 验证(用户名密码)和 副本集(replica sets),则需要 security.keyFile 文件。

security.keyFile 文件需要使用 OpenSSL 来生成,可以到这里下载

在这里插入图片描述

在这里插入图片描述

我这里安装在了 D:\software\OpenSSL 目录,安装好了之后进入文件根目录,点击如下文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后进入根目录,点击 start.bat 文件

在这里插入图片描述

会出现一个黑窗口,输入如下命令:

openssl rand -base64 756 > "security.keyFile文件生成目录"

这是我的:

openssl rand -base64 756 > D:\software\OpenSSL\security.keyFile

在这里插入图片描述

然后在对应目录下可以看到

在这里插入图片描述

如何再将这个文件上传到服务器的某个目录,我这里是

/usr/local/mongodb

在这里插入图片描述

再编辑 mongodb.conf 配置文件,加上如下配置:

在这里插入图片描述

security:# 开启登录认证authorization: enabled# 同时开启了 验证(用户名密码)和 副本集(replica sets),需要添加 security.keyFilekeyFile: /usr/local/mongodb/security.keyFile

再次重启

mongod --config /usr/local/mongodb/mongodb-8.0.1/mongodb.conf

在这里插入图片描述

启动失败了,但是看不到什么有用的信息,看一下日志,日志目录在

在这里插入图片描述

日志如下:

在这里插入图片描述

permissions on /usr/local/mongodb/security.keyFile are too open

这是因为 security.keyFile 这个文件的权限太大了,那就缩小一点,执行如下命令:

chmod -R 600 /usr/local/mongodb/security.keyFile

在这里插入图片描述

再次重启

在这里插入图片描述

3、最终配置文件

# mongod.conf# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: /usr/local/mongodb/mongodb-8.0.1/data/db#journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。#enabled: true# where to write logging data.
systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: /usr/local/mongodb/mongodb-8.0.1/data/log/mongod.log# network interfaces
net:port: 27017# 远程连接要指定ip,否则无法连接;0.0.0.0代表不限制ip访问bindIp: 0.0.0.0processManagement:#启用在后台运行mongos或mongod进程的守护进程模式。fork: truesecurity:# 开启登录认证authorization: enabled# 同时开启了 验证(用户名密码)和 副本集(replica sets),需要添加 security.keyFilekeyFile: /usr/local/mongodb/security.keyFile#operationProfiling:replication:# 副本集名称replSetName: rs0#sharding:## Enterprise-Only Options:#auditLog:

四、副本节点

1、创建副本节点目录

根据自己的情况修改

创建存储数据目录,命令如下:

mkdir -p /usr/local/mongodb/rs27018/data/db

创建存储日志目录,命令如下:

mkdir -p /usr/local/mongodb/rs27018/data/log

在这里插入图片描述

进入副本节点 rs27018 目录,修改一下 data 文件的权限,命令如下

chmod -R 666 data

在这里插入图片描述

2、编辑配置文件

就是拿主节点的配置文件进行修改,ip地址是 localhost 和服务器内网地址

在这里插入图片描述

# mongod.conf# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: /usr/local/mongodb/rs_27018/data/db#journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。#enabled: true# where to write logging data.
systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: /usr/local/mongodb/rs_27018/data/log/mongod.log# network interfaces
net:port: 27018# 远程连接要指定ip,否则无法连接;0.0.0.0代表不限制ip访问bindIp: localhost, 172.25.94.151processManagement:#启用在后台运行mongos或mongod进程的守护进程模式。fork: truereplication:replSetName: rs0#sharding:## Enterprise-Only Options:#auditLog:

3、启动副本节点

启动命令如下:

mongod -dbpath /usr/local/mongodb/rs27018/data/db -logpath /usr/local/mongodb/rs27018/data/log/mongod.log --config /usr/local/mongodb/rs27018/mongodb.conf

似乎一定指定存储目录和日志目录,不然启动不了。

在这里插入图片描述

五、仲裁节点

1、创建仲裁节点目录

根据自己的情况修改

创建存储数据目录,命令如下:

mkdir -p /usr/local/mongodb/rs27019/data/db

创建存储日志目录,命令如下:

mkdir -p /usr/local/mongodb/rs27019/data/log

在这里插入图片描述

进入副本节点 rs27019 目录,修改一下 data 文件的权限,命令如下

chmod -R 666 data

在这里插入图片描述

2、修改配置文件

在这里插入图片描述

# mongod.conf# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: /usr/local/mongodb/rs_27019/data/db#journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。#enabled: true# where to write logging data.
systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: /usr/local/mongodb/rs_27019/data/log/mongod.log# network interfaces
net:port: 27019# 远程连接要指定ip,否则无法连接;0.0.0.0代表不限制ip访问bindIp: localhost, 172.25.94.151processManagement:#启用在后台运行mongos或mongod进程的守护进程模式。fork: truereplication:replSetName: rs0#sharding:## Enterprise-Only Options:#auditLog:

3、启动仲裁节点

同样,只能加上存储和日志目录才能启动成功,命令如下

mongod -dbpath /usr/local/mongodb/rs27019/data/db -logpath /usr/local/mongodb/rs27019/data/log/mongod.log --config /usr/local/mongodb/rs27019/mongodb.conf

在这里插入图片描述

六、配置副本集

1、配置主节点

先进入 mongosh

mongosh

在这里插入图片描述

可以看到使用命令报错了,需要初始化副本集,命令如下:

rs.initiate()

在这里插入图片描述

可以看到现在是 secondary ,也就是从节点,再次回车

在这里插入图片描述

就变成了 primary ,即主节点。

接着查看副本集的配置内容,命令如下:

rs.config()

在这里插入图片描述

再查看副本集状态,命令如下:

rs.status()

在这里插入图片描述

2、添加副本节点

先查看内网地址,命令如下:

ifconfig

在这里插入图片描述

可以看到内网地址为:

172.25.94.151

这里将端口为 27018 的节点作为副本节点,所以添加副本节点的命令如下:

rs.add("172.25.94.151:27018")

在这里插入图片描述

看起来是没有问题,再次使用

rs.status()

查看状态

在这里插入图片描述

可以看到是 (not reachable/healthy) ,说明添加的副本节点是有问题的,正常的应该是 SECONDARY ,查看日志

在这里插入图片描述

AuthenticationFailed: It is not possible to authenticate as the __system user on servers started without a --keyFile parameter

看起来应该是要配置 keyFile 文件,那就将主节点的这部分配置拿过来

在这里插入图片描述

security:# 开启登录认证authorization: enabled# 同时开启了 验证(用户名密码)和 副本集(replica sets),需要添加 security.keyFilekeyFile: /usr/local/mongodb/security.keyFile

先将添加的副本节点删除,命令如下:

rs.remove("172.25.94.151:27018")

在这里插入图片描述

然后再次重启,先关闭

mongod -dbpath /usr/local/mongodb/rs27018/data/db -logpath /usr/local/mongodb/rs27018/data/log/mongod.log --config /usr/local/mongodb/rs27018/mongodb.conf --shutdown

再启动

mongod -dbpath /usr/local/mongodb/rs27018/data/db -logpath /usr/local/mongodb/rs27018/data/log/mongod.log --config /usr/local/mongodb/rs27018/mongodb.conf

在这里插入图片描述

重新添加节点,命令如下:

rs.add("172.25.94.151:27018")

在这里插入图片描述

再次查看状态

rs.status()

在这里插入图片描述

可以看到添加副本节点正常了。

在上面的过程中,我发现添加副本节点用主节点这个来添加也可以

在这里插入图片描述

这个其实是服务器中主机名称

在这里插入图片描述

所以添加副本节点的命令如下:

rs.add("iZf8z8qpzl0oqs4a6mc897Z:27018")

在这里插入图片描述

也能添加成功

在这里插入图片描述

3、配置仲裁节点

从配置副本节点中可以知道内网地址为:

172.25.94.151

添加副本节点命令如下:

rs.addArb("172.25.94.151:27019")

添加时报错

在这里插入图片描述

Reconfig attempted to install a config that would change the implicit default write concern. Use the setDefaultRWConcern command to set a cluster-wide write concern and try the reconfig again.

需要在主节点设置一下,命令如下:

db.adminCommand({"setDefaultRWConcern" : 1,"defaultWriteConcern" : {"w" : 2}
})

在这里插入图片描述

再次添加

rs.addArb("172.25.94.151:27019")

在这里插入图片描述

查看状态:

rs.status()

在这里插入图片描述

可以看到节点状态也是不正常的,查看日志

在这里插入图片描述

AuthenticationFailed: It is not possible to authenticate as the __system user on servers started without a --keyFile parameter

看来仲裁节点和副本节点一样,也需要加上 keyFile 文件

在这里插入图片描述

security:# 开启登录认证authorization: enabled# 同时开启了 验证(用户名密码)和 副本集(replica sets),需要添加 security.keyFilekeyFile: /usr/local/mongodb/security.keyFile

接着删除仲裁节点,命令如下:

rs.remove("172.25.94.151:27019")

在这里插入图片描述

然后再次重启,先关闭

mongod -dbpath /usr/local/mongodb/rs27019/data/db -logpath /usr/local/mongodb/rs27019/data/log/mongod.log --config /usr/local/mongodb/rs27019/mongodb.conf --shutdown

再启动

mongod -dbpath /usr/local/mongodb/rs27019/data/db -logpath /usr/local/mongodb/rs27019/data/log/mongod.log --config /usr/local/mongodb/rs27019/mongodb.conf

在这里插入图片描述

重新添加仲裁节点

rs.addArb("172.25.94.151:27019")

在这里插入图片描述

再查看状态

rs.status()

在这里插入图片描述

可以看到仲裁节点添加成功了。

后面经过测试,发现仲裁节点也可以用主节点这个来添加

在这里插入图片描述

这个其实是服务器中主机名称

在这里插入图片描述

添加仲裁节点命令如下:

rs.addArb("iZf8z8qpzl0oqs4a6mc897Z:27019")

查看状态也能添加成功

在这里插入图片描述

七、测试事务

业务代码是这样的

在这里插入图片描述

正常调用

在这里插入图片描述

再看看集合(数据表)

在这里插入图片描述

看起来是没问题了,再加上错误,再重新调用接口,看看会不会插入

在这里插入图片描述

再查看集合

在这里插入图片描述

还是那10条数据,成功回滚。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年四川省大学生程序设计竞赛 补题记录

文章目录 Problem A. 逆序对染色(思维树状数组)Problem B. 连接召唤(贪心)Problem E. L 型覆盖检查器(模拟)Problem F. 小球进洞:平面版(几何)Problem G. 函数查询Proble…

关于传输线电感

要理解自感、互感、回路电感,PCB表层单位长度电感约为7.5纳亨每英寸,内层约为9纳亨每英寸 磁力线 电流周围会产生磁场,可以认为磁场是由许多“力线”构成。 电流穿过与其垂直的某一平面时,在该平面内激起一个“磁漩涡” 形成许多…

JavaSet集合

无序(指的是添加顺序和获取出的数据顺序不一致,不重复,无索引 既然Set没有索引,因此功能同上一篇Connection的功能,几乎没有额外的功能 HashSet的原理 为什么是无序(要构建红黑树)&#xff0…

【Linux学习】(9)调试器gdb

前言 Linux基础工具:安装软件我们用的是yum,写代码用的是vim,编译代码用gcc/g,调试代码用gdb,自动化构建用make/Makefile,多人协作上传代码到远端用的是git。 在前面我们把yum、vim、gcc、make、git都已经学…

逆向工程基本概念

引言 逆向工程(Reverse Engineering)是指从已经存在的产品或系统中提取信息,并理解其设计原理的过程。在软件开发中,逆向工程通常用于理解一个已有软件系统的内部工作原理,可能是为了兼容性、安全分析、修复或者改进等…

Pyhton自动化测试持续集成和Jenkins

持续集成 官方术语: 持续集成(Continuous Integration),也就是我们经常说的 CI 持续集成(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发周期后期才寻找…

二十四、Python基础语法(变量进阶)

一、引用 在定义变量的时候, 解释器会给变量和数据分别在内存中分配内存,变量中保存的是数据的地址, 称为引用,Python 中数据的传递,传递的都是引用,可以使用 id(变量) 函数,获取变量中引用地址。 # 将数字1在内存中的地址储存到变量a中 a …

人工智能岗位英语面试 - 如何确保模型的可靠性和性能

确保模型的可靠性和性能 1. Precision Precision is a metric that measures how accurate the model’s positive predictions are. It calculates the ratio of true positives (correctly predicted positive cases) to the total number of predicted positives (both tr…

时间比较日期

现在需要一个获取当前时间然后对比一个月后的时间的java方法,比如:当前时间获取到是2024-10-28,然后我写定一个时间2024-10-29,这两个比大小,获取的当前时间要小于我写定的时间返回true否则返回false import java.time…

从头学PHP之数组输出基本函数

上期我们讲到了数组,数组是个特殊的变量,在程序中的重要程度很高,大部分数据处理的时候会用到这种特殊的变量,那么现在让我们继续深入一下吧。 上期我们打印出了数组的值,用print_r()或者var_dump()这俩函数&#xff0…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04,板端系统为ubuntu20.04 的环境下实现的 描述: 官网地址 rknn_zoo RKNPU2_SDK …

【Linux】进程调度 | 进程切换上下文数据

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 小感慨: …

区块链系统控制台Console的安装与运维

【要求】 登陆Linux 服务器,安装、部署区块链系统控制台 Console,并完成节点的运维。同 时,检查控制台是否能够正常运行。 【任务】 1. 登陆 linux 服务器,进入指定操作目录按下列要求完成控制的安装与部 署,并将安装过…

Rust语言的优缺点以及学习建议

在编程世界的不断演变中,Rust 作为一种重要的语言脱颖而出。它以安全性和性能为核心,正在获得开发者们的广泛关注。但究竟什么是 Rust?它为何如此受欢迎?在这篇博客中,我们将深入探讨 Rust 的世界,探索它的…

【三十七】【QT开发应用】使用QVideoWidget播放视频,QT模块缺失时更新安装模块步骤(利用虚拟网址打开应用加速)

效果展示 下面有一个按钮打开视频&#xff0c;点击按钮之后会出现一个弹窗选择文件&#xff0c;默认打开的是D盘&#xff0c;并且选择的文件的类型有.mp4 .flv或者所有文件。选择正确的视频文件之后可以正常播放视频。 widget.h 主窗口头文件 #pragma once#include <QtWid…

【设计模式系列】适配器模式(九)

目录 一、什么是适配器模式 二、适配器模式的角色 三、适配器模式的典型应用 四、适配器模式在InputStreamReader中的应用 一、什么是适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将不兼容的接口转换为一个客户端…

【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览

文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六&#xff1a;扩展——kkFileView Vue3 一. word 安装&#xff1a;npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…

Cisco Packet Tracer 8.0 路由器单臂路由配置

文章目录 单臂路由简介一、单臂路由的原理二、单臂路由的配置步骤三、单臂路由的优缺点四、应用场景 一&#xff0c;拓扑图搭建二&#xff0c;pc IP地址配置三&#xff0c;交换机Switch0配置四&#xff0c;配置路由器Router0五&#xff0c;测试 单臂路由简介 单臂路由&#xf…

Hadoop-001-本地虚拟机环境搭建

一、安装VMware 官方下载VMware&#xff1a; https://vmware.mdsoft.top/?bd_vid5754305114651491003 二、下载镜像文件 阿里云镜像仓库&#xff1a; https://mirrors.aliyun.com/centos/ 本文档使用 CentOS-7-x86_64-DVD-1810-7.6.iso 搭建虚拟机 三、搭建虚拟机 1、编辑…

【WRF数据准备】基于GEE下载静态地理数据-叶面积指数LAI及绿色植被率Fpar

【WRF数据准备】基于GEE下载静态地理数据 准备:WRF所需静态地理数据(Static geographical data)数据范围说明基于GEE下载叶面积指数及绿色植被率GEE数据集介绍数据下载:LAI(叶面积指数)和Fpar(绿色植被率)数据处理:基于Python处理为单波段LAI数据参考GEE的介绍可参见另…