본문 바로가기

프로그래밍/MongoDB

MongoDB Docker-compose Replica

728x90
반응형

org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream

 

MongoDB 4.4.1 버전에서 대량의 DML 발생시 해당 오류가 발생해서 MongoDB 4.2.3 버전으로 변경을 하였다.

Spring boot 2.2.7 버전의 mongodb-driver 3.11.2 버전과 호환성이 맞지 않는다고 아래 링크에 나와 있다.

물론 이것이 원인이 아닐 수도 있지만 가능하면 호환성을 맞추는 것이 좋을 것 같다.

 

 

Java MongoDB Driver — MongoDB Drivers

 

docs.mongodb.com

1번 서버

docker-compose.yml

version: '3'

services:

  mongodb:
    #image: mongo:latest
    image: mongo:4.2.3
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: adminPass
    volumes:
      - ./mongodb/data/db:/data/db
      - ./mongodb.key:/etc/mongo/mongodb.key
      - ./mongodb.conf:/etc/mongo/mongodb.conf
      - ./backup:/backup
    ports:
      - 27017:27017
    command: --replSet mongo-repl --config /etc/mongo/mongodb.conf
    deploy:
      restart_policy:
        condition: on-failure
        max_attempts: 5

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: 172.20.5.0/24

2번 서버

docker-compose.yml

version: '3'

services:

  mongodb:
    #image: mongo:latest
    image: mongo:4.2.3
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: adminPass
    volumes:
      - ./mongodb/data/db:/data/db
      - ./mongodb.key:/etc/mongo/mongodb.key
      - ./mongodb.conf:/etc/mongo/mongodb.conf
      - ./backup:/backup
    ports:
      - 27017:27017
    command: --replSet mongo-repl --config /etc/mongo/mongodb.conf    
    deploy:
      restart_policy:
        condition: on-failure
        max_attempts: 5
    #pids_limit : 100


  mongodb-arbiter:
    #image: mongo:latest
    image: mongo:4.2.3
    container_name: mongodb-arbiter
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: adminPass
    volumes:
      - ./mongodb_arbiter/data/db:/data/db
      - ./mongodb.key:/etc/mongo/mongodb.key
      - ./mongodb.conf:/etc/mongo/mongodb.conf
    ports:
      - 27018:27017
    command: --replSet mongo-repl --config /etc/mongo/mongodb.conf    
    deploy:
      restart_policy:
        condition: on-failure
        max_attempts: 5

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: 172.20.5.0/24

mongodb.conf

security:
    authorization: "enabled"
    clusterAuthMode: "keyFile"
    keyFile: "/etc/mongo/mongodb.key"
replication:
    enableMajorityReadConcern: false
    oplogSizeMB: 10240
    replSetName: "mongo-repl"

chmod a+r mongodb.conf

chown polkitd mongodb.key

 

# 백그라운드 실행

docker-compose up -d

 

# docker 중지

docker-compose stop

 

Relica 구성

docker exec -it mongodb /bin/sh
# mongo admin -u admin -p 'adminPass'
 
var cfg = {
 "_id": "mongo-repl",
 "members": [{
 "_id": 0, "host": "172.27.17.188:27017","priority": 1
 },{
 "_id": 1,"host": "172.27.17.192:27017","priority": 1
 },{
 "_id": 2,"host": "172.27.17.192:27018","priority": 0,"arbiterOnly": true
 }]
 };
 rs.initiate(cfg, { force: true });
 rs.reconfig(cfg, { force: true });
728x90
반응형