Использование Shovel для миграции сообщений
Используйте RabbitMQ Shovel, когда нужно перемещать сообщения между broker'ами, clusters или virtual hosts. Shovel хорошо подходит для миграции из очереди в очередь, временной пересылки или контролируемого повторного воспроизведения сообщений в другой среде.
Shovel не является механизмом синхронизации всего cluster. Он не синхронизирует пользователей, permissions, virtual hosts, exchanges, queues, bindings, Kubernetes resources или application configuration. Подготовьте эти объекты отдельно, прежде чем полагаться на Shovel для миграции рабочей нагрузки.
Содержание
Применимые сценарииПредварительные требованияВключение plugins ShovelПроцедура1. Выберите host cluster для dynamic Shovel2. Создайте dynamic Shovel3. Проверьте статус Shovel4. Проверьте перемещение сообщений5. Удалите Shovel после завершения миграцииОперационные примечанияСвязанная информацияПрименимые сценарии
Используйте Shovel, когда вам нужно одно или несколько из следующего:
- Мигрировать сообщения из одной очереди в другую очередь в новом cluster.
- Повторно воспроизвести сообщения в целевую среду во время контролируемой миграции.
- Переместить накопленные сообщения между sites во время запланированного переключения.
Используйте аварийное восстановление RabbitMQ с Federated Exchanges, когда вам нужна асинхронная репликация на основе exchange вместо передачи из очереди в очередь.
Предварительные требования
Перед настройкой Shovel убедитесь, что выполнены следующие условия:
- В cluster, где размещается Shovel, включен plugin
rabbitmq_shovel. - Включите
rabbitmq_shovel_management, если вам нужна видимость Dynamic Shovels в management UI или HTTP API. - Source и destination RabbitMQ endpoints доступны из cluster, где размещается Shovel.
- Пользователи source и destination имеют необходимые permissions.
- Destination exchanges или queues уже существуют, либо у вас есть явный процесс их создания до миграции.
Включение plugins Shovel
В следующем примере включаются необходимые plugins в cluster, на котором выполняется Shovel:
Проверьте включенные plugins:
Процедура
1. Выберите host cluster для dynamic Shovel
Dynamic Shovels хранятся как runtime parameters RabbitMQ. Создайте Shovel в cluster, который обеспечивает надежную сетевую связность и с source, и с destination broker.
2. Создайте dynamic Shovel
В следующем примере сообщения перемещаются из очереди orders на source broker в очередь orders-migrated на destination broker:
%2f — это URL-encoded default virtual host /. Замените его на URL-encoded имя virtual host, которое вы фактически используете. Если имя пользователя или пароль содержат зарезервированные URI-символы, закодируйте их с помощью URL encoding.
Используйте ack-mode="on-confirm" для production migrations, чтобы source side подтверждалась только после того, как destination подтвердит публикацию.
3. Проверьте статус Shovel
Убедитесь, что Shovel выполняется:
Также можно проверить runtime parameters:
4. Проверьте перемещение сообщений
Проверьте глубину очередей source и destination:
5. Удалите Shovel после завершения миграции
Если Shovel используется временно, удалите его после завершения миграции:
Операционные примечания
- Shovel перемещает сообщения, а не полное состояние broker.
- Если destination queue не существует, Shovel завершится с ошибкой, если только выбранный destination exchange и routing behavior не позволяют создать нужный путь.
- Сетевые сбои вызывают попытки повторного подключения в соответствии с настроенным reconnect delay.
- Для длительных задач миграции отслеживайте рост очередей, consumer lag и broker alarms как на source, так и на destination стороне.