您的位置:首页 > 财经 > 产业 > 网络安全维护公司_网站推广制作教程_武汉seo网站优化技巧_南京关键词优化软件

网络安全维护公司_网站推广制作教程_武汉seo网站优化技巧_南京关键词优化软件

2024/12/22 21:11:23 来源:https://blog.csdn.net/studio_1/article/details/142920954  浏览:    关键词:网络安全维护公司_网站推广制作教程_武汉seo网站优化技巧_南京关键词优化软件
网络安全维护公司_网站推广制作教程_武汉seo网站优化技巧_南京关键词优化软件

搭建 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条数据,成功回滚。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com