Computer Science/DataBase

Spring Mongo Transaction 적용기

by Donghwan 2023. 9. 25.

Condition

  • 회사에서 신규프로젝트 개발에 있어서 Mongo를 DB로 채택하였습니다.
  • Local과 Dev에서 테스트 환경에서 Mongo를 Single Pod로 구성하였습니다.
  • 4.0 버전부터 지원하는 Multi-Document Transaction을 적용하기 위해서 ReplicaSet 구성의 필요성을 느꼈습니다.
  • Single Mongo Instance는 Transaction을 사용할 수 없습니다.
  • 최소 3개의 ReplicaSet을 구성해야 합니다.
  • 트랜잭션은 WiredTiger 스토리지 엔진에서만 지원됩니다. 그리고 MongoDB 4.0 이후의 버전에서는 WiredTiger가 기본 스토리지 엔진으로 사용됩니다.



Authentication Failed.

Issue

  • Single Pod로 운영되던 Mongo를 3개의 Pod로 구성되도록 변경하였습니다.
  • 이때, Mongo DB Authentication Failed 에러가 발생.
  • 지속적으로 발생하는 것을 보고, Pod 갯수 증가 3개가 된 부분이 영향이 있을것으로 판단.
  • AuthSource와 AuthMechanism을 지정하여 Root로 지정하여서 해결된 줄 알았다.
mongodb://root:root@mongodb-service:27017/test?authSource=admin&authMechanism=SCRAM-SHA-256
  • 하지만 바로 동일한 문제가 발생하였습니다.

Solution


  • 원인은 ReplicaSet입니다.
  • 문제가 발생하던 As-Is가 k8s 환경에서 Command로 3개의 Pod가 생성되도록 설정하였습니다.
  • 이런 방법은 ReplicaSet을 생성하는게 아닌 개별적으로 Pod를 3개 띄우는 것과 동일한 방법이었습니다.
  • To-Be로 MongoDB Operator를 적용하여, ReplicaSet을 설정해주고 접근 uri를 수정하였더니 Authentication Failed를 해결하였습니다.



Cluster description not yet available. Waiting for 30000 ms before timing out

Issue

  • DB 접근 시 Cluster Time Out이 발생하는 상황.
  • DB Uri를 제대로 찾지 못한다고 판단을 내렸습니다.

Solution

  • Mongo에서 Uri를 등록할 때, ReplicaSet을 잘 지정해주어야 합니다.
//To-Be
mongodb://root:root@mongodb-dev-0.mongodb-dev-svc:27017,mongodb-dev-1.mongodb-dev-svc:27017,mongodb-dev-2.mongodb-dev-svc:27017/gpt-agent?replicaSet=mongodb-dev&&readPreference=nearest
728x90
반응형

'Computer Science > DataBase' 카테고리의 다른 글

[MySQL] Datetime 기준으로 조회하기  (0) 2021.11.19
[DataBase] 무결성  (0) 2021.10.28
[DataBase] 데이터베이스란?  (0) 2021.09.04
[MySQL] DELETE  (0) 2021.08.10
[MySQL] UPDATE  (0) 2021.08.10

댓글