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

姬俊远
2023-12-01

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:【原文链接】https://www.cnblogs.com/bubbleboom/p/14167409.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设置仅适用于mongod
    dbPath: "/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.1
    port: 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设置仅适用于mongod
    dbPath: "/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.1
    port: 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设置仅适用于mongod
    dbPath: "/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.1
    port: 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)

 类似资料: