admin 管理员组

文章数量: 888299

sessions are not supported by the mongodb cluster to which this client is connected mongoDB 插入报错

mongoDB 插入报错

错误信息:sessions are not supported by the mongodb cluster to which this client is connected

在springboot2.x集成MongoDB 4.4 版本插入数据时报错,通过百度查找MongoDB 单节点不支持事物导致,通过研究在Linux环境下mongoDB 4搭建(副本集模式)就可以解决问题。

环境
Ubuntu 5.4.0-6ubuntu1~18.04.5
mongodb-linux-x86_64-rhel80-4.4.6.tgz

安装MongoDB:【原文链接】.html

创建主节点
建立存放数据和日志的目录
主节点

mkdir -p /home/admin/mongodb/replica_sets/rs_27017/log
mkdir -p /home/admin/mongodb/replica_sets/rs_27017/data/db

修改配置文件

vim /home/admin/mongodb/replica_sets/rs_27017/mongod.conf

代码如下:

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/home/admin/mongodb/replica_sets/rs_27017/log/mongod.log"#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: "/home/admin/mongodb/replica_sets/rs_27017/data/db"journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。    enabled: true
processManagement:  #启用在后台运行mongos或mongod进程的守护进程模式。fork: true  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID  pidFilePath: "/home/admin/mongodb/replica_sets/rs_27017/log/mongod.pid"
net:  #服务实例绑定的IP  bindIp: localhost,127.0.0.1port: 27017
replication:  #副本集的名称  replSetName: kwz_rs

启动节点服务:MongoDB安装路径(/usr/local/mongodb/bin/mongod)

/usr/local/mongodb/bin/mongod -f /home/admin/mongodb/replica_sets/rs_27017/mongod.conf

创建副本级节点

mkdir -p /home/admin/mongodb/replica_sets/rs_27018/log
mkdir -p /home/admin/mongodb/replica_sets/rs_27018/data/db

修改配置文件

vim /home/admin/mongodb/replica_sets/rs_27018/mongod.conf

代码如下:

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/home/admin/mongodb/replica_sets/rs_27018/log/mongod.log"#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: "/home/admin/mongodb/replica_sets/rs_27018/data/db"journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。    enabled: true
processManagement:  #启用在后台运行mongos或mongod进程的守护进程模式。fork: true  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID  pidFilePath: "/home/admin/mongodb/replica_sets/rs_27018/log/mongod.pid"
net:  #服务实例绑定的IP  bindIp: localhost,127.0.0.1port: 27018
replication:  #副本集的名称  replSetName: kwz_rs

启动节点服务:

/usr/local/mongodb/bin/mongod -f /home/admin/mongodb/replica_sets/rs_27018/mongod.conf

创建仲裁节点


mkdir -p /home/admin/mongodb/replica_sets/rs_27019/log
mkdir -p /home/admin/mongodb/replica_sets/rs_27019/data/db

修改配置文件

vim /home/admin/mongodb/replica_sets/rs_27019/mongod.conf

代码如下:

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/home/admin/mongodb/replica_sets/rs_27019/log/mongod.log"#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾logAppend: true
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongoddbPath: "/home/admin/mongodb/replica_sets/rs_27019/data/db"journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。    enabled: true
processManagement:  #启用在后台运行mongos或mongod进程的守护进程模式。fork: true  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID  pidFilePath: "/home/admin/mongodb/replica_sets/rs_27019/log/mongod.pid"
net:  #服务实例绑定的IP  bindIp: localhost,127.0.0.1port: 27019
replication:  #副本集的名称  replSetName: kwz_rs

启动节点服务:

/usr/local/mongodb/bin/mongod -f /home/admin/mongodb/replica_sets/rs_27019/mongod.conf

初始化配置副本集和主节点
用客户端连接主节点(27017)
/home/admin/usr/local/mongodb/bin/mongo --host=localhost --port=27017
连接成功之后,许多命令不能用,需要初始化副本集才行,使用默认的配置来初始化副本集:
命令:rs.initiate()

{"info2" : "no configuration specified. Using a default configuration for the set","me" : "localhost:27017","ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(100601049270, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1006010049270, 1)
}

“ok”的值为1则说明创建成功

添加副本从节点

将27018的副本节点添加到副本集中:

kwz_rs:PRIMARY> rs.add("localhost:27018")
{# 说明添加成功"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(15852365226, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(15852365226, 1)
}

此时再次查看副本集状态:rs.status()

添加仲裁从节点

将27019作为仲裁节点,添加到副本集中:

kwz_rs:PRIMARY> rs.addArb("localhost:27019")
{"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1242345451541, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1242345451541, 1)
}

查看副本节点状态:rs.status()

登陆27017主节点,进行写入和读取数据操作:

/home/admin/usr/local/mongodb/bin/mongo --host localhost --port 27017

登陆27018从节点,进行写入和读取数据操作

/home/admin/usr/local/mongodb/bin/mongo --host localhost --port 27018
show dbs

发现不能读取集合的数据,有个"errmsg" : “not master and slaveOk=false”,可见当前节点只是数据的一个备份,不是slave节点,无法读取数据
设置读操作权限,允许从成员上进行读的操作:rs.slaveOk()或者rs.slaveOk(true)

本文标签: sessions are not supported by the mongodb cluster to which this client is connected mongoDB 插入报错