2016. 11. 28. 11:37

RabbitMQ 메모

1. RabbitMQ 는 erlang 으로 만들어져 있어 먼저 erlang 설치가 필요하다.

아래 방법중 편한대로 설치하자.


- zero dependency Erlang RPM package for running RabbitMQ 설치(추천)

RabbitMQ 구동만을 위해 패키징된 erlang rpm

https://github.com/rabbitmq/erlang-rpm


- erlang-solutions.com 사이트에서 repository로 설치

찾아봤는데 데비안쪽만 있는거 같음


- erlang-solutions.com 에서 esl-erlang 를 rpm으로 설치하고 esl-erlang-compact rpm 을 설치

https://www.erlang-solutions.com/resources/download.html

https://github.com/jasonmcintosh/esl-erlang-compat/releases


- RabbitMq 사이트에도 올려져있음(미확인)

https://www.rabbitmq.com/releases/erlang


- epel erlang repo 설치 후 yum 설치(버전이 조금 낮은 버전이 설치가 됨)

wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
yum install erlang



2. RabbitMQ 서버 다운로드 설치

erlang 버전에 따라 설치할 수 있는 버전이 있으니 주의.

현재 최신버전 3.6.6 은 최소 erlang R16B03 이상에서만 사용가능, 최소 버전확인은 여기

https://www.rabbitmq.com/download.html


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

yum install rabbitmq-server-3.6.6.noarch.rpm


3. 서비스 등록

ntsysv 또는 chkconfig rabbitmq-server on


4. 방화벽 열기

5672 : 기본포트

4369 : ??
35197 : ??
15672 : 관리웹페이지용


5. 관리페이지 플러그인 실행

rabbitmq-plugins enable rabbitmq_management


그후 http://서버아이피:15672 에 접속하면 관리자 사이트가 뜸


6. 구동 및 관리

service rabbitmq-server start
service rabbitmq-server stop
service rabbitmq-server restart


rabbitmqctl stop # RabbitMQ 서버 정지
rabbitmqctl status # 구동중인지 체크


#rabbitmqadmin 파이썬 프로그램을 다운로드

wget http://서버아이피:15672/cli/rabbitmqadmin

적당한 곳으로 옮겨놓고 사용(추천 : /usr/sbin)


#simplequeue 생성
rabbitmqadmin declare queue name=simplequeue durable=true

#queue 확인
rabbitmqadmin -q -f bash list queues

#접속 user 생성
rabbitmqctl add_user <유저명> <비밀번호>

#permission 설정 (rabbitmq 3.3 버전부터 guest 계정은 locahost에서만 접근 가능하기 때문에 permission이 필요함.)
rabbitmqctl set_user_tags <유저명> administrator
rabbitmqctl set_permissions -p / <유저명> “.*” “.*” “.*”


7. 사용자 추가

rabbitmqctl add_user admin password
rabbitmqctl set_user_tags admin administrator


8-1. 클러스터링 - 쿠키동기화

/var/lib/rabbitmq/.erlang.cookie 또는 $HOME/.erlang.cookie 에 존재하는 쿠키를 다른 서버들로 복사

순서와 내용에 관계없이 각 서버들이 동일한 쿠키값만 유지하면 됨


8-2. 클러스터링 - hostname 설정(example-was1, example-was2 서버 클러스터링)

vi /etc/sysconfig/network

HOSTNAME=example-was1

service network restart


8-3. 클러스터링 - rabbitmq-env.conf 설정

vi /etc/rabbitmq/rabbitmq-env.conf

HOSTNAME=example-was1

NODENAME=rabbit@example-was1


8-4. 클러스터링 - rabbitmq.config 설정

vi /etc/rabbitmq/rabbitmq.config
[
  {kernel,
    [
      {inet_dist_listen_min, 35197},
      {inet_dist_listen_max, 35197}
    ]
   },
   {mnesia, [
     {dump_log_write_threshold, 1000}
   ]},
   {rabbit, [
     {cluster_nodes, {[‘rabbit@example-was1', ‘rabbit@example-was2'], disc}},
     {tcp_listeners, [5672]}
   ]}
]


8-5. 클러스터링 - Queue 복제가능하도록 HA 설정

./rabbitmqctl set_policy ha-all “^ha\.” ‘{“ha-mode”:”all”}’


8-6. 클러스터링 - 서버구동

service rabbitmq-server restart

#서버 확인
/srv/rabbitmq/sbin/rabbitmqctl status

#cluster 확인
/srv/rabbitmq/sbin/rabbitmqctl cluster_status

#rabbitmq 클러스터링이 안 묶일 때, 다음 명령어를 통해서 초기화 한다.
./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl start_app





참고

http://abh0518.net/tok/?p=384

http://abh0518.net/tok/?p=397

http://abh0518.net/tok/?p=411