How to configure a MongoDB cluster which supports sessions?

前端 未结 6 725
刺人心
刺人心 2020-12-16 17:32

I want to explore the new transaction feature of MongoDB and use Spring Data MongoDB. However, I get the exception message \"Sessions are not supported by the MongoDB cl

相关标签:
6条回答
  • 2020-12-16 17:39

    I disabled TLS (inside Spring Data MongoDB), and now the transaction feature with the developement release 3.7.9 works fine.

    0 讨论(0)
  • 2020-12-16 17:44

    With the reference to the answer give by @kakabali, I have few a bit different scenario and configure it.

    I am configure mongo with spring boot and try to use transactions management and getting the error:

    com.mongodb.MongoClientException: Sessions are not supported by the MongoDB cluster to which this client is connected at

    I follow few of the steps given by above answer and added few:

    Change the mongo.cfg and added this

    replication:
       oplogSizeMB: 128
       replSetName: "rs0"
       enableMajorityReadConcern: true
    

    Restart the service as I am using Windows10.

    Open mongo console and run rs.initilize()

    0 讨论(0)
  • 2020-12-16 17:45

    Make sure you're using the updated API - for example:

    MongoClient mongoClient = MongoClients.create();
    MongoDatabase dataBase = mongoClient.getDatabase("mainDatabase");
    MongoCollection<Document> collection = dataBase.getCollection("entities");
    

    Also make sure you have mongo.exe open.

    0 讨论(0)
  • 2020-12-16 17:47

    We were able to config in local as below

    • On Linux, a default /etc/mongod.conf configuration file is included when using a package manager to install MongoDB.

    • On Windows, a default <install directory>/bin/mongod.cfg configuration file is included during the installation

    • On macOS, a default /usr/local/etc/mongod.conf configuration file is included when installing from MongoDB’s official Homebrew tap.

    Add the following config

    replication:
       oplogSizeMB: 128
       replSetName: "rs0"
       enableMajorityReadConcern: true
    

    sudo service mongod restart;

    mongo;

    rs.initiate({
          _id: "rs0",
          version: 1,
          members: [
             { _id: 0, host : "localhost:27017" }
          ]
       }
    )
    

    check for the config to be enabled

    rs.conf()
    

    we can use the connection URL as

    mongodb://localhost/default?ssl=false&replicaSet=rs0&readPreference=primary
    

    docs: config-options single-instance-replication

    0 讨论(0)
  • 2020-12-16 17:48

    I was having the same issue when I was trying to connect it to a single standalone mongo instance, however as written in the official documentation, that Mongo supports transaction feature for a replica set. So, I then tried to create a replica set with all instances on MongoDB 4.0.0, I was able to successfully execute the code. So, Start a replica set (3 members), then try to execute the code, the issue will be resolved.

    NB : you can configure a replica set on the same machine for tests https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/

    0 讨论(0)
  • 2020-12-16 17:50

    Replica set is the resolution for the issue for sure

    But doing replica of 3 nodes is not mandatory.

    Solution 1 (for standalone setup)

    For standalone mongo installation you can skip configuring 2nd or 3rd node as described on the official mongo documentations here

    And you'll need to set a replSetName in the configuration

    replication:
       oplogSizeMB: <int>
       replSetName: <string>
       enableMajorityReadConcern: <boolean>
    

    and then run details of which are here

    rs.initiate()
    

    after this the connection string would be like below:-

    mongodb://localhost:27017/<database_name>?replicaSet=<replSet_Name>
    

    keys above that you need to replace:-

    database_name = name of the database

    replSet_Name = name of the replica set you setup in the above configuration

    Solution 2 (only for docker based requirement)

    Example Docker image with single node replica set acting as primary node for development environment is as below:-

    I had hosted the docker image on the docker hub

    docker pull krnbr/mongo:latest
    

    Contents of the same Dockerfile are below:-

    FROM mongo
    RUN echo "rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'127.0.0.1:27017'}]});" > /docker-entrypoint-initdb.d/replica-init.js
    RUN cat /docker-entrypoint-initdb.d/replica-init.js
    CMD [ "--bind_ip_all", "--replSet", "rs0" ]
    

    Docker run command (replace with the image name that you build yoursef or use the on shared above i.e krnbr/mongo):-

    without volume

    
    docker run -d --name mongo -p 27017:27017 <Image Name> mongod --replSet rs0 --port 27017
    

    with volume

    
    docker run -d --name mongo -p 27017:27017 -v ~/.mongodb:/data/db <Image Name> mongod --replSet rs0 --port 27017
    

    for supporting binding of any ip

    docker run -d --name mongo -p 27017:27017 -v ~/.mongodb:/data/db <Image Name> mongod --bind_ip_all --replSet rs0 --port 27017
    
    0 讨论(0)
提交回复
热议问题