티스토리 뷰
RabbitMQ 변경 이력
- 3.3.0 버전부터 기본 어드민 계정인 guest/guest 계정의 웹 콘솔 로그인이 로컬로 제한되도록 변경되었다.
대상 그룹 생성
- AWS Fargate 서비스로 생성되어 실행되는 RabbitMQ 컨테이너는 생성 시점마다 IP 주소가 변경된다. NLB를 생성하면 고정된 도메인 주소를 제공할 수 있다. 이를 위해 사전에 아래와 같이
5672
,15672
번 포트에 대한 대상 그룹을 생성한다.
# 5672번 포트 대상 그룹 생성
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [대상 그룹] 클릭
→ [Create target group] 클릭
→ Choose a target type: [IP addresses] 선택
→ Target group name: foobar-broker-prod-5672 (대상 그룹 이름)
→ Protocol: HTTP (로드 밸런싱할 프로토콜)
→ Port: 5672 (로드 밸런싱할 포트)
→ VPC: [foobar-prod] 선택
→ Health check protocol: TCP
→ [Next] 클릭
→ [Create target group] 클릭
# 15672번 포트 대상 그룹 생성
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [대상 그룹] 클릭
→ [Create target group] 클릭
→ Choose a target type: [IP addresses] 선택
→ Target group name: foobar-broker-prod-15672 (대상 그룹 이름)
→ Protocol: HTTP (로드 밸런싱할 프로토콜)
→ Port: 15672 (로드 밸런싱할 포트)
→ VPC: [foobar-prod] 선택
→ Health check protocol: TCP
→ [Next] 클릭
→ [Create target group] 클릭
NLB 로드 밸런서 생성
- 이제 고정된 도메인 주소를 제공하기 위한 NLB 로드 밸런서를 생성할 차례이다.
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [로드밸런서] 클릭
→ [Load Balancer 생성] 클릭
→ Load Balancer 유형 선택: [Network Load Balancer] 생성
# 기본 구성
→ 이름: foobar-broker-prod (입력)
→ 체계: [내부] 선택
# 리스너
→ Load Balancer 프로토콜: [TCP] 선택 (리스닝할 프로토콜) → Load Balancer 포트: 5672 (입력)
→ [리스너 추가] 클릭→ Load Balancer 프로토콜: [TCP] 선택 (리스닝할 프로토콜) → Load Balancer 포트: 15672 (입력)
# 가용 영역
→ VPC: [foobar-prod] 선택 (로드 밸런싱할 대상 인스턴스 위치한 VPC 선택)
→ 가용 영역: [ap-northeast-2a] 체크 → [foobar-prod-private-1] 선택
→ 가용 영역: [ap-northeast-2b] 체크 → [foobar-prod-private-2] 선택
→ 가용 영역: [ap-northeast-2c] 체크 → [foobar-prod-private-3] 선택
# 라우팅 구성
→ 대상 그룹: [기존 대상 그룹] 선택
→ 이름: [foobar-broker-prod-5672] 선택
→ [다음: 대상 등록] 클릭
# 대상 등록
→ [다음: 검토] 클릭
# 검토
→ [생성] 클릭
EFS 생성
- 컨테이너 기동시 미리 완성된 RabbitMQ의 환경 설정을 제공하기 위해 EFS를 아래와 같이 생성한다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭 → [파일 시스템 생성] 클릭
→ 이름: foobar-broker-prod (입력)
→ Virtual Private Cloud(VPC): [foobar-prod] 선택 (마운트할 인스턴스가 속한 VPC 선택)
→ [생성] 버튼 클릭
- 다음으로 액세스 포인트를 생성한다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭
→ [foobar-broker-prod] 클릭
→ [액세스 포인트] 클릭
→ [액세스 포인트 생성] 버튼 클릭
# 액세스 포인트 생성 > 세부 정보
→ 이름: etc-rabbitmq (입력)
→ 루트 디렉토리 경로: /etc/rabbitmq (입력)
# 액세스 포인트 생성 > POSIX 사용자
→ 사용자 ID: 0 (입력)
→ 그룹 ID: 0 (입력)
# 액세스 포인트 생성 > 루트 디렉터리 생성 권한
→ 소유자 사용자 ID: 0 (입력)
→ 소유자 그룹 ID: 0 (입력)
→ 권한: 0755 (입력)
→ [액세스 포인트 생성] 클릭
- 다음으로 EFS 탑재 대상을 생성한다. (탑재 대상 생성을 누락할 경우 마운트 시점에 check that your file system ID is correct. 오류가 발생한다.)
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭
→ [foobar-broker-prod] 클릭
→ [네트워크] 클릭
→ [탑재 대상 생성] 버튼 클릭
# 가용 영역
→ Virtual Private Cloud(VPC): [foobar-prod] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2a] 선택 → 서브넷 ID: [foobar-prod-private-1] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2b] 선택 → 서브넷 ID: [foobar-prod-private-2] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2c] 선택 → 서브넷 ID: [foobar-prod-private-3] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [저장] 클릭
EFS에 Rabbit 환경 설정 작성
- 커뮤니티에서 제공하는 rabbitmq 도커 이미지는 환경 변수 구성이 부족한 점이 많다. 이를 극복하기 위해 EFS를 생성했으며, EFS와 같은 VPC에 위치한 EC2 인스턴스에서 아래와 같이 마운트하여 환경 설정을 완료한다.
$ mkdir ~/etc-rabbitmq
$ sudo mount -t efs -o tls,accesspoint=fsap-00dc418553a110643 fs-8ae18819: ~/etc-rabbitmq
$ cd ~/etc-rabbitmq
$ sudo nano rabbitmq.conf
default_user = foobar
default_pass = foobar123456
loopback_users = none
listeners.tcp.default = 5672
management.tcp.port = 15672
management.tcp.ip = 0.0.0.0
cluster_name = foobar-broker-prod
# 빌트인 플러그인 활성화
$ sudo nano enabled_plugins
[rabbitmq_management,rabbitmq_prometheus].
- 도커 컨테이너를 어떤 환경 변수도 없이 기동하면 로컬에서만 웹 콘솔에 로그인 가능한
guest
/guest
계정이 활성화되는데default_user
,default_pass
를 별도로 설정하여 어드민 권한의 사용자 계정을 생성하였다. - 도커 컨테이너를 기동했을 때 컨테이너 외부에서는 웹 콘솔에 접근할 수 있는 방법이 없기 때문에
loopback_users = none
옵션을 설정하여 원격지에서 지정된 사용자 계정으로 웹 콘솔에 로그인 가능하도록 설정하였다. enabled_plugins
파일에 빌트인 플러그인을 명시하면 도커 컨테이너 기동시 해당 플러그인이 활성화된다.rabbitmq_prometheus
플러그인을 활성화하면 Prometheus에서 수집 가능한 형태의http://{rabbitmq}:15692/metrics
엔드포인트를 활성화해준다. 플러그인 활성화 여부를 확인하려면 아래와 같이 엔드포인트에 요청하여 알 수 있다.
$ curl -s localhost:15692/metrics
ECS 작업 정의 생성
- 이제 ECS 작업 정의를 생성할 차례이다.
Amazon ECS 콘솔 접속 → 작업 정의 → [새 작업 정의 생성] 클릭 → [FARGATE] 클릭
→ 작업 정의 이름: foobar-broker-prod (입력)
→ 작업 역할: [ecsTaskExecutionRole] 선택
→ 네트워크 모드: [awsvpc] 선택
→ 작업 메모리(GB): [16GB] 선택
→ 작업 CPU(vCPU): [4 vCPU] 선택
# 볼륨 추가
→ [볼륨 추가] 클릭
→ 이름: foobar-broker-prod
→ 볼륨 유형: [EFS] 선택
→ 파일 시스템 ID: [foobar-broker-prod] 선택
→ Access point ID: [etc-rabbitmq] 선택
→ [Enable transit encryption] 체크
→ [추가] 클릭
# 컨테이너 추가
→ [컨테이너 추가] 클릭
→ 컨테이너 이름: foobar-broker-prod
→ 이미지: docker.io/rabbitmq:3-management-alpine (입력)
→ 포트 매핑: 5672/TCP, 15672/TCP
# 컨테이너 추가 > 스토리지 및 로깅
→ 탑재 지점
→ 소스 볼륨: foobar-broker-prod (작업 정의에서 추가한 EFS 볼륨을 선택)
→ 컨테이너 경로: /etc/rabbitmq (컨테이너에서 EFS 볼륨을 마운트할 경로 입력)
→ [추가] 클릭
# 작업 및 컨테이너 정의 구성
→ [생성] 클릭
참고 글
- How to configure RabbitMQ properly
- RabbitMQ 3.3.1 can not login with guest/guest
- Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN
- How to Set up a RabbitMQ Cluster on ECS Instances Running CentOS 7
- AWS ECS Fargate + RabbitMQ
- Clustering RabbitMQ on ECS using EC2 autoscaling groups
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- bootstrap
- 로드 바이크
- JHipster
- maven
- jsp
- graylog
- 태그를 입력해 주세요.
- kotlin
- node.js
- CentOS
- java
- 알뜰폰
- Tomcat
- MySQL
- jpa
- 자전거
- jstl
- Spring MVC 3
- Docker
- DynamoDB
- Eclipse
- 평속
- JavaScript
- Kendo UI Web Grid
- chrome
- 로드바이크
- Spring Boot
- spring
- 구동계
- Kendo UI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함