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를 제공하지는 않는다. Ubuntu나 CentOS 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가지 종류 설정이 존재한다.
- rabbitmq-env.conf
- rabbitmq.config
- 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]}
]}
]}
].
실시간 설정파일
클러스터 환경에서 모든 노드가 같은 동작을 하도록 하거나 기동시 바뀌어야하는 값은 실시간 파라메터를 아래와 같이 설정해서 사용한다.
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