본문 바로가기
NoSQL/MongoDB

[MongoDB] MongoDB 아키텍처 간단 소개

by 연습장이 2023. 8. 6.
728x90
반응형

도입 배경

  mongodb를 소스 DBMS로 사용중인 서비스에 대해 cdc 연결이 필요한 상황이 발생하였다.

 

cdc 연결을 하기 전에

  무지성으로 연동할 수는 없으니 어떻게 연동할지 전략이 필요하였다. 그래서 우선 테스트 환경을 구축하여 cdc 연결을 해보고자 MonogDB 설치를 진행해보고자 하였다. 고려 사항으로는 아래와 같았다.

  • mongodb는 cdc가 가능한가?
    • 가능하다면 캡쳐는 무슨 플러그인을 사용하는가?
    • 무슨 데이터를 기준으로 데이터를 캡쳐하여 실시간으로 스트리밍하는가?
    • cud가 전부 가능한가?
  • 서비스에 사용중인 dbms 버전은?
    • 지금 이 버전이 현재 cdc의 debezium connector(소스 커넥터)의 버전과 호환이 되는가?
  • mongodb 테스트 시 어디까지 설치를 해봐야하는가?
    • arbiter, mongos, 샤딩, 클러스터, 레플리카 셋 등등 필요한게 많아보였다.
    • 어디까지 설치를 해보는 기준은 뭐로 정할것인가? 서비스와 유사하게? cdc에 영향이 안갈정도로만?
  • 테스트는 어떻게 진행할 것인가?
    • 테스트 시나리오에 따라 cdc 옵션이 다를 수도 있다. 
      • 반정형 데이터는 어떻게 가공을 하는가?
      • 반정형 데이터는 어느 구간에서 가공을 해야 하는가?(소스 커넥터에서? 타겟 커넥터에서? 아니면 타겟 dbms에서?)
    • 테스트 규모(데이터량 등)는 어느 정도로 해볼 것인가?
    • 타겟 dbms는 뭐가 좋을까?(참고로 종류 하나 이상이 운영중이다..)
  • 테스트 도출 결과에는 어떤 것들이 필요할까?
    • 해당 서비스에 cdc를 연동할 경우 데이터량이 증가할텐데, 이 증가된 데이터량을 cdc용 수집 DBMS가 견딜 수 있을까? 증설이 필요할까? 단순히 스토리지만 증가해도 되나? 클러스터링을 스케일아웃해야 하나?
    • 카프카 클러스터는 그냥 둬도 괜찮을까? consumer lag이 크게 발생하지 않을까? 토픽당 허용 메시지 크기를 바꿔줘야할까? 데이터 송신 시 데이터 크기를 커마해줘야 하나? 메시지가 잠깐 머물다 가는 버퍼 사이즈는 그대로 둬도 되나?

등등 이런저런 생각이 들었다. 여튼 설치는 해봐야 하니까 뭐를 어떻게 설치해봐야 할지 조사해봤고 결론은 아래와 같았다.

 

MongoDB 구조도

보면 좀 구멍이 숭숭보인다. 노드 3대로 구성하려다 보니 좀 한계가 보인다. 아쉬운 점은 아래와 같다.

  • mongos와 config 노드가 한대다...
  • replica set이 하나만 구성되어 있다. 원래라면 replica set을 3대 둬서 클러스터링 구성을 해야 DBA적으로 마음이 편안할 듯 싶다.

구성 간 특징으로는 아래가 있다.

  • primary는 1번 노드에 설치
  • secondary는 2번 노드에 설치
  • arbiter, config, mongos는 3번 노드에 설치함으로서 실제 데이터에는 손상이 최대한 가지 않도록 했다.

구성하면서 의문점은 아래와 같다.

  • config 노드에는 다큐먼트가 고아가 되지 않도록 해당 정보 저장한다고 하는데 메타데이터를 여기서 아예 가지고 있는건지, primary에서 받아와서 버퍼 개념으로 쓰는건지 확인이 좀 필요할 듯 하다. mongos와도 통신을 하는거니까 버퍼개념이지 않을까 하는 생각이 든다.

 

기본적인 세팅은 끝난거 같으니 cdc를 연동해봐야겠다.

728x90
반응형