Skip to content

Svalker1989/rabbitmq

Repository files navigation

Домашнее задание к занятию "Очереди RabbitMQ" - Стрекозов Владимир

Задание 1. Установка RabbitMQ

Используя Vagrant или VirtualBox, создайте виртуальную машину и установите RabbitMQ. Добавьте management plug-in и зайдите в веб-интерфейс.
Итогом выполнения домашнего задания будет приложенный скриншот веб-интерфейса RabbitMQ.

Задание 2 Отправка и получение сообщений

Используя приложенные скрипты, проведите тестовую отправку и получение сообщения. Для отправки сообщений необходимо запустить скрипт producer.py.
Для работы скриптов вам необходимо установить Python версии 3 и библиотеку Pika. Также в скриптах нужно указать IP-адрес машины, на которой запущен RabbitMQ, заменив localhost на нужный IP.
$ pip install pika
Зайдите в веб-интерфейс, найдите очередь под названием hello и сделайте скриншот. После чего запустите второй скрипт consumer.py и сделайте скриншот результата выполнения скрипта
В качестве решения домашнего задания приложите оба скриншота, сделанных на этапе выполнения.
Для закрепления материала можете попробовать модифицировать скрипты, чтобы поменять название очереди и отправляемое сообщение.
Скриншот, где видно обзор очереди с именем hello (результат выполнения скрипта producer.py, который подключается к серверу rabbitmq, создает очередь и записывает в неё сообщение):

Скриншот, где видно результат выполнения скрипта consumer.py (скрипт получает сообщения из очереди и выводит их на экран):

Задание 3 Подготовка HA кластера

Используя Vagrant или VirtualBox, создайте вторую виртуальную машину и установите RabbitMQ. Добавьте в файл hosts название и IP-адрес каждой машины, чтобы машины могли видеть друг друга по имени. Затем объедините две машины в кластер и создайте политику ha-all на все очереди.
Политику создаем командой:
rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
В кластер объединяем командами:
rabbitmqctl stop_app
rabbitmqctl join_cluster {ip_addr or dns name another rbmq server}
rabbitmqctl start_app
rabbitmqctl cluster_status
В качестве решения домашнего задания приложите скриншоты из веб-интерфейса с информацией о доступных нодах в кластере и включённой политикой.
Скришот где видно что в кластере 2 ноды (чтобы в UI отображалась информация о нодах, пользователь должен быть с тегом administrator:

Скришот где видно что в кластере установлена политика обработки очередей ha-all (все очереди реплицируются между нодами):

Скриншот вывода на ноде Deb-x64:

Скриншот вывода на ноде Deb-x64-hw02:

Для закрепления материала снова запустите скрипт producer.py и приложите скриншот выполнения команды на каждой из нод:
$ rabbitmqadmin get queue='hello'
Скриншот вывода на ноде Deb-x64:

Скриншот вывода на ноде Deb-x64-hw02:
После чего попробуйте отключить одну из нод, желательно ту, к которой подключались из скрипта, затем поправьте параметры подключения в скрипте consumer.py на вторую ноду и запустите его.
Приложите скриншот результата работы второго скрипта.
Скриншот выполнения скрипта consumer.py после отключения одной ноды (как видно скрипт успешно получил сообщение из очереди на второй ноде, так же видно что кластер не работает):

Добавление пользователя и назначение тега, если тег не админ, то в UI может отображаться не вся информация:
create a user
rabbitmqctl add_user *username* *password*
tag the user with "administrator" for full management UI and HTTP API access
rabbitmqctl set_user_tags *username* administrator
Также приложите вывод команды с двух нод:
$ rabbitmqctl cluster_status

Задание 4 Ansible playbook

Напишите плейбук, который будет производить установку RabbitMQ на любое количество нод и объединять их в кластер. При этом будет автоматически создавать политику ha-all.
Готовый плейбук разместите в своём репозитории.
Playbook file
P.S. Таски брал из https://github.com/IronCore864/ansible-rabbitmq-cluster
Лучше и удобнее всё делать с помощью ansible role.
Файл erlang.cookie.j2 содержит куки для хостов кластера.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published