logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端编程3
前端基础知识16
UniApp15
Vue框架19
Java编程7
Java基础知识14
SpringBoot31
SpringMVC14
MyBatis8
SpringCloud15
RocketMQ1
MyCat1
数据库4
MySQL6
Redis7
MongoDB10
H21
Java技术栈4
知识整理分布式锁的实现方案MySQL事务MySQL的锁
软件工具箱14
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaPicGoRustFSVSCodeDockerObsidianObs录制
Linux知识11
树莓派安装及使用ArchLinux:常用软件ArchLinux:基础系统安装ArchLinux:深度优化ArchLInux:图形化界面安装ArchLinux:Nirifrp内网穿透Jar启动脚本Linux常用命令VirtualBox安装CentOSVirtualBox安装Ubuntu
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

副本集

MongoDB副本集是由一组拥有相同数据集的MongoDB示例所组成的集群

主要解决故障转移和主从复制的问题,但是存在单节点压力问题(硬件限制)

对于写请求都是指向当前数据库的主节点,写请求完毕后会将写操作记录在主节点的oplog中,从节点通过主节点的oplog来进行复制操作

默认情况下读操作也是指向主节点

常用架构

实例角色类型

配置

replSet=costom_name

至少3个实例

# 数据文件存放位置
dbpath = ./data
# 日志文件存放位置
logpath = ./logs/mongodb.log
# 端口
port = 27017
# 以守护程序的方式启用,即在后台运行
fork = true
# 所有IP可连接,也可以指定IP,用英文逗号分隔
bind_ip = 0.0.0.0
# 日志输出方式(写日志的模式:设置为true为追加,默认是覆盖。如果未指定此设置,启动时MongoDB的将覆盖现有的日志文件)
logappend = true
# 是否认证
auth = false
# 副本集
replSet=costom_name

将实例都启动./mongod -f mongo.conf,然后使用mongo工具连接主节点,6.x及以上版本没有mongo工具,可以使用5.x的解压包中的mongo

历史版本也无法适配系统,新方法使用mongodb-mongosh客户端:

// Ubuntu 24.04

导入 MongoDB 官方 GPG 密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg

添加 APT 仓库(Ubuntu 24.04 代号是 noble)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

更新软件包列表
sudo apt update

安装 mongosh(仅客户端)
sudo apt install -y mongodb-mongosh

验证安装并连接数据库
# 查看版本
mongosh --version

# 连接本地 MongoDB(默认端口 27017)
mongosh
mongosh "mongodb://localhost:27017"

然后操作

# 连接一个实例
./mongo --port 27017
# 配置主节点信息
rsconf = {_id: "costom_name", members: [ { _id: 0, host: "127.0.0.1:27017" } ] }
# 使用rs进行初始化配置
rs.initiate( rsconf )
# 加入从节点
rs.add("127.0.0.1:27018")
# 加入从节点
rs.add("127.0.0.1:27019")
# 查看节点信息
rs.status()
# 从节点可读
rs. secondaryOk()

# 删除从节点
rs.remove("127.0.0.1:27019")

开始事务

Mongo使用事务的条件

在SpringBoot的启动类中配置数据源的事务管理方式

@Bean
public MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
}

然后就可以使用@Transactional进行事务的管理,如果单纯只是用事务,只搭建两个实例即可

安装方式

下载6.x的安装包,在服务器上解压,然后拷贝一份,不使用账号的情况下搭建副本集,需要注意未成功副本集无法连接

副本集开启授权

# 第一步:生成密钥
openssl rand -base64 741 > keyfile
chmod 400 keyfile
# 第二步:开启授权和配置密钥
# 是否认证
auth = true
# 共享密钥文件
keyFile = /usr/mongo/keyfile

注意授权开启和关闭需要将认证开关和密钥路径同时注释

以下内容为个人安装步骤

版本选择

mongo4.x的版本直接杀进程后启动将出现问题,而mongo5.x没有这个问题 mongO6.x移除了mongo命令,需要手动下载 综合下来使用mongo5.x的最后一个版本5.0.17

副本集搭建步骤

将压缩包上传至/usr/mongo,然后执行以下操作

# 解压
tar -zxvf mongodb-linux-x86_64-rhel80-5.0.17.tgz
# 拷贝一份
cp -r mongodb-linux-x86_64-rhel80-5.0.17 mongo-1
# 重命名一份
mv mongodb-linux-x86_64-rhel80-5.0.17 mongo-2
# 创建相应的文件夹
mkdir -p /usr/mongo/mongo-1/data
mkdir -p /usr/mongo/mongo-1/logs
mkdir -p /usr/mongo/mongo-2/data
mkdir -p /usr/mongo/mongo-2/logs

在两份实例的bin目录下创建mongo.conf文件,先不要开启认证,记得修改对应数据和日志存放位置,还有端口

# 数据文件存放位置
dbpath = /usr/mongo/mongo-1/data
# 日志文件存放位置
logpath = /usr/mongo/mongo-1/logs/mongodb.log
# 端口
port = 27017
# 以守护程序的方式启用,即在后台运行
fork = true
# 所有IP可连接,也可以指定IP,用英文逗号分隔
bind_ip = 0.0.0.0
# 日志输出方式(写日志的模式:设置为true为追加,默认是覆盖。如果未指定此设置,启动时MongoDB的将覆盖现有的日志文件)
logappend = true
# 是否认证
auth = false
# 共享密钥文件
# keyFile = /usr/mongo/keyfile
# 副本集
replSet=name

复制一份配置文件到第二个实例:cp mongo.conf ../../mongo-2/bin/,记得修改端口、数据库、日志位置,然后启动两个实例并配置

# 启动命令
./mongod -f mongo.conf
# 查看端口
netstat -ntulp | grep 2701
# 进入第一个实例文件夹
cd /usr/mongo/mongo-1/bin/
# 连接27017端口
./mongo --port 27017
# 配置主节点信息,name要对应
rsconf = {_id: "name", members: [ { _id: 0, host: "127.0.0.1:27017" } ] }
# 使用rs进行初始化配置
rs.initiate( rsconf )
# 加入从节点
rs.add("127.0.0.1:27018")
# 从节点可读
rs. secondaryOk()
# 查看节点信息
rs.status()

使用Robo3t进行连接两个实例,查看是否正常,然后创建一个数据库一个表,检查两个实例是否同步 使用Robo3t在指定数据库上加一个用户,勾选userAminreadWritedbAdmin

没有问题后关闭两个实例,并生成一份密钥

# 第一步:生成密钥
openssl rand -base64 741 > /usr/mongo/keyfile
# 文件可访问,此步骤不可缺少
cd /usr/mongo/
chmod 400 keyfile

然后将两个实例的配置文件中的认证开启,打开共享密钥注释,再重新启动两个实例

副本集
常用架构
实例角色类型
配置
至少3个实例
开始事务
安装方式
副本集开启授权
以下内容为个人安装步骤
版本选择
副本集搭建步骤