[7] RabbitMQ – Cluster
22 marca 2022Skonfiguruj 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.