RabbitMQ 3.6 클러스터링

클러스터링 설정

서버 중 일부에 장애가 발생해도, 정상적으로 동작하려면 클러스러팅 환경을 구축해야 한다.

여기서는, 3 대의 머신에서 한다고 가정하고, 각 각의 IP는 192.168.199.128, 129, 130이다.

3 대의 머신 모두 .erlang.cookie 파일에 있는 값이 동일해야 한다.

scp 명령어로 나머지 두 대의 머신에 .erlang.cookie파일을 복사

$ scp /var/lib/rabbitmq/.erlang.cookie root@192.168.199.130:/var/lib/rabbitmq/ The authenticity of host '192.168.199.130 (192.168.199.130)' can't be established. ECDSA key fingerprint is a8:e8:dc:f9:b8:53:39:f0:f2:0e:5d:8f:fb:a2:7d:72. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.199.130' (ECDSA) to the list of known hosts. root@192.168.199.130's password: .erlang.cookie 100% 20 0.0KB/s 00:00

서버간 연결할 때, HOSTNAME을 이용해야 한단다.

DNS 서버나, /etc/hosts 파일에 

각 서버의 IP와 HOSTNAME을 등록해 두자.

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.199.128 rabbitmq1 192.168.199.129 rabbitmq2 192.168.199.130 rabbitmq3 # 테스트는 ping rabbitmq1

/etc/sysconfig/network 파일에 호스트 이름을 설정해야 한다

$ vi /etc/sysconfig/network # Created by anaconda HOSTNAME=rabbitmq1

# 호스트이름을 변경한 후에는 리부팅을 해야, rabbitmq 클러스터링 설정이 가능하더라. $ reboot

rabbitmqctl cluster_status 명령으로, 노드의 이름이 rabbit@호스트이름 으로 정상적으로 변경되었는지 확인

$ rabbitmqctl cluster_status Cluster status of node rabbit@rabbitmq2 ... [{nodes,[{disc,[rabbit@rabbitmq2]}]}, {running_nodes,[rabbit@rabbitmq2]}, {cluster_name,<<"rabbit@rabbitmq2">>}, {partitions,[]}, {alarms,[{rabbit@rabbitmq2,[]}]}]

rabbitmq2, rabbitmq3을 rabbbitmq1에 합류시키기

rabbitmq2, rabbitmq3 머신에서 아래 명령을 실행

rabbitmq2$ rabbitmqctl stop_app Stopping node rabbit@rabbitmq2 ... rabbitmq2$ rabbitmqctl join_cluster rabbit@rabbitmq1 Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ... rabbitmq2$ rabbitmqctl start_app Starting node rabbit@rabbitmq2 ...

모든 머신에서 합류 잘했는지 확인

nodes와 running_nodes에 3대 모두 있으면 정상

$ rabbitmqctl cluster_status Cluster status of node rabbit@rabbitmq3 ... [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]}, {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}, {cluster_name,<<"rabbit@rabbitmq1">>}, {partitions,[]}, {alarms,[{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq3,[]}]}]


클러스터 노드 군에서 노드 빼기

빼려는 노드는 실행 중이 아니어야 한다.

$ rabbitmqctl forget_cluster_node rabbit@rabbitmq2 Removing node rabbit@rabbitmq2 from cluster ... # 확인 해보기 $ rabbitmqctl cluster_status Cluster status of node rabbit@rabbitmq1 ... [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq3]}]}, {running_nodes,[rabbit@rabbitmq1]}, {cluster_name,<<"rabbit@rabbitmq1">>}, {partitions,[]}, {alarms,[{rabbit@rabbitmq1,[]}]}]


미러링 설정

여기서는 큐를 모든 노드에 미러링 시키도록 설정했다.

미러링 될 노드 개수 또는 노드 이름을 지정할 수 있다.

# 서버 한 곳에서만 설정해도 모든 서버에 설정이 공유된다. $ rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'

RabbitMQ 3.6 설치법 보기