Próbuję skonfigurować klaster serwerów RabbitMQ, aby uzyskać wysoce dostępne kolejki przy użyciu architektury serwerowej aktywnej/pasywnej. Obserwuję to prowadzi:Jak skonfigurować RabbitMQ przy użyciu architektury Active/Passive High Availability
- http://www.rabbitmq.com/clustering.html
- http://www.rabbitmq.com/ha.html
- http://karlgrz.com/rabbitmq-highly-available-queues-and-clustering-using-amazon-ec2/
Moje wymóg wysokiej dostępności jest prosta, mam dwa węzły (CentOS 6.4) z RabbitMQ (v3.2) i Erlang R15B03. Węzeł 1 musi być "aktywny", odpowiadając na wszystkie żądania, a węzeł 2 musi być węzłem "pasywnym", który ma replikowane wszystkie kolejki i komunikaty (z węzła 1).
Aby to zrobić, mam skonfigurowane następujące:
- node1 z RabbitMQ działa poprawnie w trybie non-klastra
- Node2 z RabbitMQ działa poprawnie w trybie non-klastra
następnie stworzyłem klaster między obydwoma węzłami: łącząc Node2 z Node1 (przewodnik 1). Następnie skonfigurowałem zasadę tworzenia dublowania kolejek (przewodnik 2), replikowania wszystkich kolejek i wiadomości między wszystkimi węzłami w klastrze. Działa to, mogę połączyć się z dowolnym węzłem i opublikować lub skonsumować wiadomość, gdy oba węzły są dostępne.
Problem występuje, gdy mam kolejkę "queueA", która została utworzona w węźle 1 (wzorzec w kolejce A), a gdy węzeł 1 jest zatrzymany, nie mogę połączyć się z koleją A w węźle 2, aby tworzyć lub zużywać wiadomości, Węzeł2 zgłasza błąd informujący, że węzeł 1 jest niedostępny (uważam, że kolejka A nie jest replikowana do węzła Node2, a węzła Node2 nie można awansować jako wzorca kolejki A).
Błąd jest:
{ "The AMQP operacja została przerwana: AMQP zbliżenie powód, zainicjowany przez Peer, code = 404, text = \" NOT_FOUND - home węzeł 'królik @ node1' z trwały kolejek queueA 'w vhost 'app01' jest w dół lub w niedostępnych \ "CLASSID = 50 methodId = 10, bo ="}
kolejność etapów jest stosowany:
Node1:
1. rabbitmq-server -detached
2. rabbitmqctl start_app
Node2:
3. Copy .erlang.cookie from Node1 to Node2
4. rabbitmq-server -detached
Dołącz do klastra (Node2):
5. rabbitmqctl stop_app
6. rabbitmqctl join_cluster [email protected]
7. rabbitmqctl start_app
Konfiguracja Kolejka mirroring polityka:
8. rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
Uwaga: Wzór stosowany do nazw kolejek to "" (wszystkie kolejki).
Po uruchomieniu "rabbitmqctl list_policies" i "rabbitmqctl cluster_status" wszystko jest w porządku.
Dlaczego węzeł2 nie może odpowiedzieć, jeśli węzeł 1 jest niedostępny? Czy jest coś nie tak w tej konfiguracji?
Jakie właściwości ma kolejka i wysyłane wiadomości? Czy twój klaster utrzymuje wiadomości? (jakaś konfiguracja klastra podczas konfigurowania węzła) Zajrzyj również tutaj: http://stackoverflow.com/a/23224388/1248724 – Zarathustra