Choi G.J bio photo

Choi G.J

IT System Engineer

RabbitMQ 서버세팅

운영체제별로 다르지만 필자는 ubuntu-14-04 기준으로 작성함

설치

1) /etc/apt/sources.list에 설치파일deb경로 추가

deb http://www.rabbitmq.com/debian/ testing main

2) unsigned packages 경고를 피하기 위해 publisc key를 신뢰할 수 있는 키 List에 추가

wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc

sudo apt-key add rabbitmq-signing-key-public.asc

3) apt-get list update

sudo apt-get update

sudo apt-get install rabbitmq-server

erlang언어 설치의 dependency를 가지고 있지만 패키지와 함께 설치된다.

EC2에서의 설치

현재는 RatbbitMQ가 미리 설치된 AMI를 제공하지는 않는다. UbuntuCentOS AMI를 사용하는걸 권장함.

(LinuxAMI를 사용하는 경우 erlang설치 최신 버젼 후 RabbitMQ설치시 버젼이 안맞는다는 등의 설치시 호환성의 문제가 많았다)

포트 접근 확인

방화벽 확인을 통해 다음 포트들이 사용가능한지 확인 필요

  • 4369 (epmd), 25672 (Erlang distribution)
  • 5672, 5671 (AMQP 0-9-1 without and with TLS)
  • 15672 (if management plugin is enabled)
  • 61613, 61614 (if STOMP is enabled)
  • 1883, 8883 (if MQTT is enabled)

로그경로 확인

/var/log/rabbitmq

output로그

  • rabbit@tester-VirtualBox.log

기타 추가로그

  • rabbit@tester-VirtualBox-sasl.log

리눅스시스템 Limit 확인&조정

RabbitMQ 수행시 동시처리를 위해 limit 제약을 수정해줘야할 필요 있음. (운영체제의 제한값을 확인해보고 수정할 필요가 있을 때만 수정해주면 됨)

유저별 open file 제약인 ulimit -n을 조정해준다. (여러 linux머신에는 1024로 되어 있는데 이값은 너무 적음)

SoftLimit

/etc/security/limits.conf에는 hard 제약이 걸려있다. SoftLimit는 linux user가 걸수 있는 제약으로 hard제약보다 클순 없음

제약 확인

ulimit -n

하드웨어 설정보기

ulimit -Ha

소프트웨어 설정보기

ulimit -Sa

제한수정

ulimit -S -n 4096

권장 Limit

  • 운영기65536 이상
  • 개발기4096 이상

반영확인

ulimit 설정 후에 RabbitMQ서버를 재기동해야 반영된다.

cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits

환경변수 설정

RabbitMQ의 디폴트 세팅이 잘되어있어서 그냥 기동시키는 것만으로도 충분히 사용가능하다. 하지만 환경에 따라 포트, 세팅 등을 변경하고자 할 때 환경변수를 바꾸어준다.

크게 3가지 종류 설정이 존재한다.

  1. rabbitmq-env.conf
  2. rabbitmq.config
  3. runtime parameters and policies

운영체제에 따라서 설정파일을 읽어들이는 위치가 다른데 ubuntu에서는 /etc/rabbitmq/. 경로에 위치시키면 된다.

RabbitMQ 환경변수 (rabbitmq-env.conf)

RABBITMQ_var_name 형태의 설정값

Shell 환경변수가 최우선시되고 없으면 rabbitmq-env.conf 또 없으면 default값을 따름

RABBITMQ_NODE_IP_ADDRESS, RABBITMQ_NODE_PORT 등의 기동환경 관련된 설정값을 나타냄

RabbitMQ 어플리케이션 설정 (rabbitmq.config)

json형태로 설정된 RabbitMQ Core 어플리케이션 및 erlang, plugin 설정값.

다음과 같이 생겼다.

[
 {ssl, [{versions, ['tlsv1.2', 'tlsv1.1', tlsv1]}]},
 {rabbit, [
           {ssl_listeners, [5671]},
           {ssl_options, [{cacertfile,"/path/to/ca_certificate.pem"},
                          {certfile,  "/path/to/server_certificate.pem"},
                          {keyfile,   "/path/to/server_key.pem"},
                          {versions, ['tlsv1.2', 'tlsv1.1', tlsv1]}

                         ]}
          ]}
].

rabbitmq.config 샘플

실시간 설정파일

클러스터 환경에서 모든 노드가 같은 동작을 하도록 하거나 기동시 바뀌어야하는 값은 실시간 파라메터를 아래와 같이 설정해서 사용한다.

rabbitmqctl	rabbitmqctl set_parameter {-p vhost} component_name name value
rabbitmqctl clear_parameter {-p vhost} component_name name
rabbitmqctl list_parameters {-p vhost}

HTTP API	PUT /api/parameters/component_name/vhost/name
DELETE /api/parameters/component_name/vhost/name
GET /api/parameters