RabbitMQ 3.6 클러스터링
설치 및 셋팅 2016. 4. 7. 11:02
클러스터링 설정
서버 중 일부에 장애가 발생해도, 정상적으로 동작하려면 클러스러팅 환경을 구축해야 한다.
여기서는, 3 대의 머신에서 한다고 가정하고, 각 각의 IP는 192.168.199.128, 129, 130이다.
3 대의 머신 모두 .erlang.cookie 파일에 있는 값이 동일해야 한다.
scp 명령어로 나머지 두 대의 머신에 .erlang.cookie파일을 복사
1 2 3 4 5 6 7 | $ 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을 등록해 두자.
1 2 3 4 5 6 7 | 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 파일에 호스트 이름을 설정해야 한다
1 2 3 | $ vi /etc/sysconfig/network # Created by anaconda HOSTNAME=rabbitmq1 |
1 2 | # 호스트이름을 변경한 후에는 리부팅을 해야, rabbitmq 클러스터링 설정이 가능하더라. $ reboot |
rabbitmqctl cluster_status 명령으로, 노드의 이름이 rabbit@호스트이름 으로 정상적으로 변경되었는지 확인
1 2 3 4 5 6 7 | $ 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 머신에서 아래 명령을 실행
1 2 3 4 5 6 7 8 | 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대 모두 있으면 정상
1 2 3 4 5 6 7 | $ 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,[]}]}] |
클러스터 노드 군에서 노드 빼기
빼려는 노드는 실행 중이 아니어야 한다.
1 2 3 4 5 6 7 8 9 10 | $ 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,[]}]}] |
미러링 설정
여기서는 큐를 모든 노드에 미러링 시키도록 설정했다.
미러링 될 노드 개수 또는 노드 이름을 지정할 수 있다.
1 2 | # 서버 한 곳에서만 설정해도 모든 서버에 설정이 공유된다. $ rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' |