클러스터링 설정
서버 중 일부에 장애가 발생해도, 정상적으로 동작하려면 클러스러팅 환경을 구축해야 한다.
여기서는, 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 설치법 보기