본문 바로가기

트러블슈팅

(2)
Spring: 다중 DB 연결 이슈와 아키텍처 설계 1. 배경Master/Slave로 이중화된 DB에 Spring 서버에서 연결을 해야 하는 상태Patroni로 이루어진 Cluster는 Etcd를 통해 Failover가 이루어질 수 있어 Master와 Slave는 고정되지 않음Spring 서버에서 API 호출 시 성격에 따라 적절한 노드로 가도록 조치가 필요 2. 해결 시도 과정 및 문제 상황Spring Scheduler + Redis를 통한 주기적 캐싱 (1)- 30초 간격으로 Spring Scheduler를 호출해 Patroni API를 호출하여 Master와 Slave 노드의 주소를 획득- 획득한 주소를 Redis에 저장하여 API 호출 시 캐싱된 데이터를 빠르게 가져올 수 있도록 함- 30초 사이에 Failover가 일어나 변경되었을 때를 고려해 ..
Patroni: Docker + Patroni + Etcd 클러스터 구성 트러블슈팅 1. 배경기획 요구사항 스펙 상 태그로 검색하는 기능이 많은 서비스를 개발해야 하는 상태태그는 여러 개를 가질 수 있지만, 이는 1NF에 부합하지 않음태그를 별도의 테이블로 만들고 매핑하는 것은 비효율적이라고 판단검색 최적화를 위해 Elastic Search를 도입하는 방법도 있지만 이는 현재 시점에서 오버엔지니어링이라 판단하나의 컬럼에 Array 형태를 저장할 수 있는 PostgreSQL을 도입하기로 결정추후 확장성을 미리 고려해 초기 단계에서 DB 이중화를 1:1로 진행Leader-Election, Failover 등의 자동화를 위해 Patroni 도입을 고려 2. 문제 상황컨테이너 설정 적용 문제 - Etcd(bitnami/etcd:latest)- Patroni 컨테이너에서  patronictl s..