Choi G.J bio photo

Choi G.J

IT System Engineer

실제 서비스시 고려해야할 사항 CheckList

실제 운영모드에 들어가려면 보안적인 처리나, 서비스별 구분, 성능측면 등을 위해 다음 사항들을 살펴봐야 한다.

1) 서비스 구분 및 User 권한설정

Virtual Hosts 설정

Single-tenant시

서비스 구분이 1개라면 / 만이용해서 서비스하는 것이 좋다.

Multi-teanat시

서비스가 여러가지가 있다면 각 tenant별로 vhost를 구분해서 사용하여야 한다.

  • /project1_development
  • /project1_product
  • /project2_development
  • /project2_product

User 및 권한 설정

  1. 기본적으로 생기는 계정인 guest를 삭제한다.

  2. application이 여러개면 user를 application 별로 따로 가져간다. 접속자별 구분지어 권한 부여나/만료시키기 좋다. (mobile app, web app, data조합하는 appㅇ이 있으면 3개의 user분리)

  3. 한 어플리케이션을 많은 client들이 사용하는 경우(ex IoT서비스) 는 편리함을 위해서 인증을 위한 x509 certificates나 IP대역대를 제한하는 source IP addresse ranges를 설정하는 것을 고려해야 한다.

2) 리소스 제약 확인/설정

Memory

가용 메모리 Limit설정
4GB이하 75%
4~8GB 80%
8~16GB 85%
16GB이상 90%

default 40%

최소 128MB, 최대 90%가 넘지 않도록 하는걸 추천

Disk

가용 메모리 Disk 여유공간 설정
1GB~8GB 50%
8GB~32GB 40%
32GB 30%

default 최소 50MiB 필요

최소 2GB

Open File 설정

운영체제의는 network socket을 포함해서 동시에 file open을 제어하는 제한을 가지고 있다. 동시 연결 및 큐를 예측해서 설정해야 함

추천값 = (동접사 * 0.95 * 2 + 큐의 총수)

개발환경 : 50K 면 충분 운영환경 : 500K 면 충분(리소스 많이 안먹는 수준에서)

3) 보안처리

User와 권한

vhost, users별로 publish(write), read(consume), confige(queue나 exchange생성) 별로 권한을 준다.

(자세한건 권한설정 파트 참조)

통신간 보안 TLS

TLS를 사용하여 암호화된 패킷을 사용하는 것이 권장됨.

개발 및 QA환경에서는 자체 인증한 TLS 인증서 를 사용해도 무방하며, 운영환경에서도 모든 어플리케이션이 Trusted netwokr에서 운영되거나 내부 환경에서도 자체 인증한 TLS 인증서를 사용해도 무방하다.

self-signed TLS certificates 생성 소스코드

4) 클러스터링 환경

예상 부하, 미러의 수, 데이터의 위치 등을 고려하여 클러스터 사이즈를 결정해야 된다.

연결할 노드 선정

특히 client가 클러스터링된 어느 노드에도 붙을 수 있기 때문에 클러스터간에 데이터 교환이 필요하다. 그래서 기왕이면 consumer와 producer가 같은 노드에 붙도록 만들면 좋다.
같은 이유로 기왕이면 큐의 마스터 노드에 consumer가 붙도록 만드는 것이 바람직하다.

파티션 전략

cluster 연결간에 문제가 생겼을 때 처리방식인 cluster_partition_handling 설정을 확성화 시켜

서버간 통신의 문제가 생겼을 때의 상황에 대비해야 한다.

설정 특징 선택가능 상황 비고
ignore 절대 중지되지 않도록 설정 네트웍 신뢰성 높을 때 rack안에 노드가 있는환경
pause_minority 과반수 이하만 중지가능 비교적 네트웍 신뢰성 낮을 때 EC2같은 cloud환경
pause_if_all_down minority를 직접선택 - -
autoheal winning partition(주로 client connection이 많은것)을 자동으로 결정해서 나머지를 재기동시킴 네트웍 신뢰성 보장 안될 때, 데이터 무결성보다 서비스 가용성이 중요할때 cluster가 2개인 상황

애매하면 autoheal을 선택하는 것이 바람직하다.