admin管理员组

文章数量:1336420

I have docker deployed on mac os (Apple M3 Pro). I am running a spring boot application from a local host. However, it is not possible to connect to the Replica Set.

2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool ready for mongod3:27017 2024-11-19T21:46:50.470+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Adding discovered server mongod2:27017 to client view of cluster 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection created: address=mongod3:27017, driver-generated ID=298664 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool created for mongod2:27017 using options maxIdleTimeMS=0, minPoolSize=5, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000 2024-11-19T21:46:50.471+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Canonical address mongod1:27017 does not match server address. Removing mongod3:27017 from client view of cluster 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool closed for mongod3:27017 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection closed: address=mongod3:27017, driver-generated ID=298664. Reason: An error occurred while using the connection. Error: There was a socket exception raised by this connection 2024-11-19T21:46:50.469+03:00 INFO 57401 --- [}-mongod2:27017] .mongodb.driver.cluster : Exception in monitor thread while connecting to server mongod2:27017

However, nodes from the local host are available :

nc -zv mongod1 27017   
Connection to mongod1 port 27017 [tcp/*] succeeded!
nc -zv mongod2 27018
Connection to mongod2 port 27018 [tcp/*] succeeded!
 nc -zv mongod2 27019
Connection to mongod2 port 27019 [tcp/*] succeeded!
  • docker
version: '3.8'

services:
 mongod1:
   image: mongo:latest
   container_name: mongod1
   hostname: mongod1
   ports:
     - "27017:27017"
   environment:
     MONGO_INITDB_ROOT_USERNAME: root
     MONGO_INITDB_ROOT_PASSWORD: root
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod1-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongod2:
   image: mongo:latest
   container_name: mongod2
   hostname: mongod2
   ports:
     - "27018:27017"
   environment:
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod2-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongod3:
   image: mongo:latest
   container_name: mongod3
   hostname: mongod3
   ports:
     - "27019:27017"
   environment:
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod3-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongo-init:
   image: mongo:latest
   container_name: mongo-init
   depends_on:
     - mongod1
     - mongod2
     - mongod3
   volumes:
     - ./init-replica.sh:/init-replica.sh:rw
     - ./mongo-keyfile:/data/replica.key:rw
   entrypoint: ["bash", "/init-replica.sh"]
   networks:
     - mongo-net

 mongo-express:
   image: mongo-express:latest
   container_name: mongo-express
   environment:
     ME_CONFIG_MONGODB_ADMINUSERNAME: root
     ME_CONFIG_MONGODB_ADMINPASSWORD: root
     ME_CONFIG_MONGODB_URL: "mongodb://root:root@mongod1:27017,mongod2:27017,mongod3:27017/admin?replicaSet=rs0"
     ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
     ME_CONFIG_SITE_USERNAME: admin
     ME_CONFIG_SITE_PASSWORD: pass
   ports:
     - "8081:8081"
   depends_on:
     - mongo-init
   networks:
     - mongo-net

volumes:
 mongod1-data:
 mongod2-data:
 mongod3-data:

networks:
 mongo-net:
   driver: bridge
  • configuration
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(MongoProperties.class)
@EnableReactiveMongoRepositories(basePackages = "com.example.demo.repository")
public class MongoConfig extends AbstractReactiveMongoConfiguration {

    private final MongoProperties mongoProperties;

    @Override
    protected String getDatabaseName() {
        return mongoProperties.getDatabase();
    }

    @Override
    public com.mongodb.reactivestreams.client.MongoClient reactiveMongoClient() {

        String mongoUri = mongoProperties.getUri();

        return com.mongodb.reactivestreams.client.MongoClients.create(mongoUri);
    }

    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate() {
        return new ReactiveMongoTemplate(reactiveMongoClient(), getDatabaseName());
    }

    @Bean
    public ReactiveMongoTransactionManager transactionManager(ReactiveMongoDatabaseFactory factory) {
        return new ReactiveMongoTransactionManager(factory);
    }
}
  • properties
spring:
  autoconfigure:
    exclude:
      - .springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration
  data:
    mongodb:
      database: accounts
      username: root
      password: root
      authentication-database: admin

      uri: mongodb://root:root@mongod1:27017,mongod2:27018,mongod3:27019/accounts?authSource=admin&replicaSet=rs0&maxPoolSize=100&minPoolSize=5&retryWrites=true&w=majority&readPreference=primaryPreferred

Does anyone have any idea what's wrong and how to fix it?

I have docker deployed on mac os (Apple M3 Pro). I am running a spring boot application from a local host. However, it is not possible to connect to the Replica Set.

2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool ready for mongod3:27017 2024-11-19T21:46:50.470+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Adding discovered server mongod2:27017 to client view of cluster 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection created: address=mongod3:27017, driver-generated ID=298664 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool created for mongod2:27017 using options maxIdleTimeMS=0, minPoolSize=5, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000 2024-11-19T21:46:50.471+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Canonical address mongod1:27017 does not match server address. Removing mongod3:27017 from client view of cluster 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool closed for mongod3:27017 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection closed: address=mongod3:27017, driver-generated ID=298664. Reason: An error occurred while using the connection. Error: There was a socket exception raised by this connection 2024-11-19T21:46:50.469+03:00 INFO 57401 --- [}-mongod2:27017] .mongodb.driver.cluster : Exception in monitor thread while connecting to server mongod2:27017

However, nodes from the local host are available :

nc -zv mongod1 27017   
Connection to mongod1 port 27017 [tcp/*] succeeded!
nc -zv mongod2 27018
Connection to mongod2 port 27018 [tcp/*] succeeded!
 nc -zv mongod2 27019
Connection to mongod2 port 27019 [tcp/*] succeeded!
  • docker
version: '3.8'

services:
 mongod1:
   image: mongo:latest
   container_name: mongod1
   hostname: mongod1
   ports:
     - "27017:27017"
   environment:
     MONGO_INITDB_ROOT_USERNAME: root
     MONGO_INITDB_ROOT_PASSWORD: root
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod1-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongod2:
   image: mongo:latest
   container_name: mongod2
   hostname: mongod2
   ports:
     - "27018:27017"
   environment:
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod2-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongod3:
   image: mongo:latest
   container_name: mongod3
   hostname: mongod3
   ports:
     - "27019:27017"
   environment:
     MONGO_INITDB_REPLICA_SET_NAME: rs0
   volumes:
     - ./mongo-keyfile:/data/replica.key:rw
     - mongod3-data:/data/db
   command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
   networks:
     - mongo-net

 mongo-init:
   image: mongo:latest
   container_name: mongo-init
   depends_on:
     - mongod1
     - mongod2
     - mongod3
   volumes:
     - ./init-replica.sh:/init-replica.sh:rw
     - ./mongo-keyfile:/data/replica.key:rw
   entrypoint: ["bash", "/init-replica.sh"]
   networks:
     - mongo-net

 mongo-express:
   image: mongo-express:latest
   container_name: mongo-express
   environment:
     ME_CONFIG_MONGODB_ADMINUSERNAME: root
     ME_CONFIG_MONGODB_ADMINPASSWORD: root
     ME_CONFIG_MONGODB_URL: "mongodb://root:root@mongod1:27017,mongod2:27017,mongod3:27017/admin?replicaSet=rs0"
     ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
     ME_CONFIG_SITE_USERNAME: admin
     ME_CONFIG_SITE_PASSWORD: pass
   ports:
     - "8081:8081"
   depends_on:
     - mongo-init
   networks:
     - mongo-net

volumes:
 mongod1-data:
 mongod2-data:
 mongod3-data:

networks:
 mongo-net:
   driver: bridge
  • configuration
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(MongoProperties.class)
@EnableReactiveMongoRepositories(basePackages = "com.example.demo.repository")
public class MongoConfig extends AbstractReactiveMongoConfiguration {

    private final MongoProperties mongoProperties;

    @Override
    protected String getDatabaseName() {
        return mongoProperties.getDatabase();
    }

    @Override
    public com.mongodb.reactivestreams.client.MongoClient reactiveMongoClient() {

        String mongoUri = mongoProperties.getUri();

        return com.mongodb.reactivestreams.client.MongoClients.create(mongoUri);
    }

    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate() {
        return new ReactiveMongoTemplate(reactiveMongoClient(), getDatabaseName());
    }

    @Bean
    public ReactiveMongoTransactionManager transactionManager(ReactiveMongoDatabaseFactory factory) {
        return new ReactiveMongoTransactionManager(factory);
    }
}
  • properties
spring:
  autoconfigure:
    exclude:
      - .springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration
  data:
    mongodb:
      database: accounts
      username: root
      password: root
      authentication-database: admin

      uri: mongodb://root:root@mongod1:27017,mongod2:27018,mongod3:27019/accounts?authSource=admin&replicaSet=rs0&maxPoolSize=100&minPoolSize=5&retryWrites=true&w=majority&readPreference=primaryPreferred

Does anyone have any idea what's wrong and how to fix it?

Share edited Nov 19, 2024 at 19:12 skyho asked Nov 19, 2024 at 19:01 skyhoskyho 1,9037 gold badges32 silver badges75 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

As a solution, we had to use osdfs (Legacy)

本文标签: