[7] RabbitMQ – Cluster

22 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Skonfiguruj klaster RabbitMQ.

W tym przykładzie pokazano, jak skonfigurować 2 serwery RabbitMQ. Schemat klastra/sieci wygląda następująco:

[1] Zainstaluj i uruchom serwer RabbitMQ na wszystkich węzłach, patrz tutaj.

(Jeśli Firewalld jest uruchomiony, zezwól też na ruch na odpowiednich portach)

[2] Jeśli Firewalld jest uruchomiony, zezwól na więcej portów do klastrowania.

[root@vlsr02 ~]# firewall-cmd --add-port={4369/tcp,25672/tcp} --permanent
[root@vlsr02 ~]# firewall-cmd –reload

[3] Skonfiguruj klastrowanie w węźle.

# umieść te same ciasteczko (cookies) na wszystkich węzłach
[root@vlsr03 ~]# ssh vlsr02.zicher.lab 'cat /var/lib/rabbitmq/.erlang.cookie' > /var/lib/rabbitmq/.erlang.cookie
[root@vlsr03 ~]# systemctl restart rabbitmq-server

# zatrzymaj aplikację i zresetuj ją
[root@vlsr03 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@vlsr03 ...
[root@vlsr03 ~]# rabbitmqctl reset
Resetting node rabbit@vlsr03 …

# dołącz do klastra
# wpisz tylko nazwę hosta, nie używaj FQDN
[root@vlsr03 ~]# rabbitmqctl join_cluster rabbit@vlsr02
Clustering node rabbit@vlsr03 with rabbit@vlsr02

# uruchom aplikację
[root@vlsr03 ~]# rabbitmqctl start_app

# pokaż status
[root@vlsr03 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@vlsr03 ...
Basics
Cluster name: rabbit@vlsr02
Disk Nodes
rabbit@vlsr02
rabbit@vlsr03
Running Nodes
rabbit@vlsr02
rabbit@vlsr03
Versions
rabbit@vlsr02: RabbitMQ 3.8.3 on Erlang 22.3.4.1
rabbit@vlsr03: RabbitMQ 3.8.3 on Erlang 22.3.4.1
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@vlsr02, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@vlsr02, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@vlsr02, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@vlsr03, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@vlsr03, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@vlsr03, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Feature flags
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled

[4] Skonfiguruj ustawienia synchronizacji kolejki.

Jeśli polecenie [rabbitmqadmin] nie zostanie znalezione, zainstaluj je, patrz tutaj.

Ten przykład pokazuje, jak skonfigurować, aby kolejka była synchronizowana na wszystkich węzłach.

Istnieje kilka trybów synchronizacji między węzłami, sprawdź szczegóły na oficjalnej stronie poniżej.

-> https://www.rabbitmq.com/ha.html

[root@vlsr02 ~]# rabbitmqadmin declare queue name=shared_queue
queue declared

# ustaw zasady synchronizacji
# rabbitmqctl set_policy [policy name(any name you like)] [Queue] [Mode]
root@vlsr02 ~]# rabbitmqctl set_policy ha-policy "shared_queue" '{"ha-mode":"all"}'
Setting policy "ha-policy" for pattern "shared_queue" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

# pokaż status
[root@vlsr02 ~]# rabbitmqadmin list queues name node policy slave_nodes state synchronised_slave_nodes
+--------------+---------------+-----------+---------------+---------+--------------------------+
|     name     |     node      |  policy   |  slave_nodes  |  state  | synchronised_slave_nodes |
+--------------+---------------+-----------+---------------+---------+--------------------------+
| shared_queue | rabbit@vlsr02 | ha-policy | rabbit@vlsr03 | running | rabbit@vlsr03            |
+--------------+---------------+-----------+---------------+---------+--------------------------+

[5] Kiedy włączysz wtyczkę zarządzania na wszystkich węzłach, można wtedy zobaczyć stan każdego węzła w następujący sposób.