본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판" 챌린지에 도전하는 마흔 여덟번째 날입니다.
마흔 일곱번째 날에는 채팅 프로젝트에 레디스 클러스터 적용에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 5. 모놀리틱 서비스 분해 >
Ch 4. 마지막으로 남은 SPOF 제거를 위한 Nginx 다중 인스턴스와 서비스 디스커버리 연동 >
02. Docker Compose를 사용한 로컬 Consul 클러스터와 Nginx 다중 인스턴스 구성
입니다.
📌 도커 컴포즈를 사용한 로컬 Consul 클러스터와 Nginx 다중 인스턴스 구성
- 🛠️ 주요 작업
- 🐳 도커 컴포즈로 Consul 3개 노드 + Nginx 2개 노드 실행
- ⚙️ 자바 코드 수정 ❌ → 설정 파일과 쉘 스크립트(register_nginx.sh)만 추가
- 🌐 Consul UI 활성화 → 클러스터/서비스 상태 확인 가능
🏗️ Consul 클러스터 구성
- 📦 버전: 2.21.1 사용
- 🔌 포트: 8500 → 18500 으로 매핑
- 🖥️ agent -server -ui -bootstrap-expect=3 → 최소 3노드 클러스터
- 🧩 각 노드는 retry-join 옵션으로 서로 연결
- 📂 데이터 디렉토리 볼륨 매핑
- 🩺 헬스체크: curl -f http://localhost:8500/v1/status/leader
🌍 Nginx 다중 인스턴스 구성
- 🖧 Nginx 2개 컨테이너 (80, 81 포트)
- 🔑 Consul 서비스 등록용 환경 변수 추가
- SERVICE_NAME=nginx
- INTERNAL_SERVICE_NAME=nginx-1 (또는 nginx-2)
- 📜 register_nginx.sh 실행 → Consul API 호출로 동적 등록
- 🩺 Consul 헬스체크(TCP 기반) 후 서비스 상태 확인
📜 register_nginx.sh 동작
- 🖥️ 컨테이너 내부 IP/Port 가져오기
- 🔗 curl 요청으로 Consul에 서비스 등록
- ✅ 헬스체크: TCP 연결 여부 확인 (interval=10s, timeout=3s)
- 🚀 Nginx 실행과 동시에 서비스 자동 등록
🔎 실행 결과
- 🖥️ Consul UI → 3개의 노드 & 2개의 Nginx 서비스 확인
- 📡 REST API 요청으로 서비스 목록(JSON) 조회 가능
- Nginx 2개 인스턴스 (localhost:80, localhost:81) 확인
- 🧪 Postman 테스트 → ping 엔드포인트 호출 성공