
RabbitMQ 클러스터링 문서
https://www.rabbitmq.com/clustering.html
Rabbitmq 노드가 부팅될 때 클러스터가 자동으로 생성되도록 클러스터링을 위한 구성 파일을 배포할 수 있는 프로세스를 설명합니다.eg
[{rabbit,
[{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'], ram}}]}].
/etc/rabbitmq/rabbitmq.config의 3개 노드 각각에 이 파일을 적용한 다음 각각에서 Rabbitmq를 시작하면 클러스터가 형성될 것입니다.
예를 들어 이것은 너무 잘 작동하지 않는 것 같습니다.
Rabbit2를 시작했는데 Rabbit3이 아직 실행되지 않은 경우, Rabbit3을 사용하여 클러스터를 생성하려고 하기 때문에 Rabbit2에서 서비스가 시작되지 않습니다.
마찬가지로, Rabbit1에만 구성을 적용하고 Rabbit2 및 Rabbit3을 미리 시작한 경우 설명서에 따르면 Rabbit1은 Rabbit2로만 클러스터를 형성합니다(이유는 모르겠습니다).
RabbitMQ will try to cluster to each node provided, and stop after it can cluster with one of them.
이것이 작동하는 유일한 방법은 3개 노드 모두에 구성 파일을 적용하고 시작 위치에서 시작하도록 하는 것입니다.정확히동시. 노드를 순차적으로 생성하는 Ansible을 사용하여 이를 배포하려고 하는데 작동하지 않습니다.
내가 여기서 무엇을 놓치고 있는 걸까요?
답변1
또한 Puppet을 사용하여 RabbitMQ 클러스터를 배포하므로 실제로 모든 노드를 정확히 동시에 가동할 필요는 없습니다.
내가 주로 하는 일과 지금까지 나에게 효과가 있었던 일은 다음과 같다.
- RabbitMQ(RPM 또는 DEB) 설치
- 각 노드에 호스트 파일을 설정하여 세 노드 모두에 대한 항목을 포함합니다. 예:
.
192.168.1.11 dev-c1n01-rabbitmq.example.com dev-c1n01-rabbitmq
192.168.1.12 dev-c1n02-rabbitmq.example.com dev-c1n02-rabbitmq
192.168.1.13 dev-c1n03-rabbitmq.example.com dev-c1n03-rabbitmq
함께 클러스터링하는 노드(사용 가능한 DNS에 의존하고 싶지 않기 때문에) * 토끼mq.config 배포
.
[
{rabbit, [
{cluster_nodes, {['rabbit@dev-c1n01-rabbitmq', 'rabbit@dev-c1n02-rabbitmq', 'rabbit@dev-c1n03-rabbitmq'], disc}},
{cluster_partition_handling, pause_minority},
{disk_free_limit, 2147483648},
{heartbeat, 0},
{tcp_listen_options, [binary, {backlog, 1024}, {nodelay, true}, {keepalive, true} ]},
{vm_memory_high_watermark, 0.6},
{default_user, <<"admin">>},
{default_pass, <<"somedefaultpass">>}
]},
{kernel, [
]}
,
{rabbitmq_management, [
{listener, [
{port, 15672}
]}
]}
].
% EOF
- erlang.cookie 배포
얼랭 쿠키를 만들려면 보통 다음을 사용합니다.http://passwordsgenerator.net/대문자로만 구성된 20개의 문자열을 생성하도록 설정합니다. 그런 다음 이 문자열을 다음과 같이 /var/lib/rabbitmq/.erlang.cookie에 넣으세요.
echo -n 'LCQLSHVOPZFHRUXMMAPF' > /var/lib/rabbitmq/.erlang.cookie
- 시작 노드(동일한 erlang.cookie 및 Rabbitmq.config를 갖는 한 순서는 중요하지 않습니다)
이것은 당신에게 도움이 될 것입니다. 3.2, 3.3 및 3.5 버전에서 테스트되었습니다.
답변2
나는 이것에 대해 약간의 진전을 이루었습니다.
문제는 사용 선택과 관련된 것으로 보입니다.램노드보다는디스크Rabbitmq.config 파일의 노드. 문서에서:
RAM 노드는 고급 사용 사례입니다. 첫 번째 클러스터를 설정할 때 클러스터를 사용하면 안 됩니다. 중복성 요구 사항을 처리하기에 충분한 디스크 노드가 있어야 하며, 필요한 경우 확장을 위해 추가 RAM 노드를 추가해야 합니다.
RAM 노드만 포함하는 클러스터는 취약합니다. 클러스터가 중지되면 다시 시작할 수 없으며 모든 데이터가 손실됩니다. RabbitMQ는 많은 상황에서 RAM 노드 전용 클러스터 생성을 방지하지만 완전히 방지할 수는 없습니다.
"ram" 대신 "disc"를 사용하도록 구성 파일을 변경하면 클러스터 생성이 훨씬 더 안정적이었습니다.
[{rabbit,
[{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'],disc}}]}].