Files
help365/platform/configure-rabbitmq.html
2025-05-26 16:15:30 +04:00

387 lines
42 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<title>Кластер RabbitMQ</title>
<meta name="generator" content="Help+Manual" />
<meta name="keywords" content="" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Для работы приложения ELMA365 необходимо установить RabbitMQ версии 3.9.153.12. Установка RabbitMQ версии&nbsp;4.0 не&nbsp;поддерживается в текущей версии ELMA365." />
<meta name="picture" content="" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Cправка по Low-code платформе ELMA365" />
<meta property="og:url" content="https://elma365.com/ru/help" />
<meta property="og:image" content="" />
<meta property="og:site_name" content="ELMA365" />
<link rel="icon" href="favicon.png" type="image/png" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="./jquery-ui.min.css" />
<link rel="stylesheet" href="default.css" />
<link rel="stylesheet" href="./search-yandex.css" />
<link rel="stylesheet" href="./article.css" />
<link rel="stylesheet" href="./glossary.css" />
<link rel="stylesheet" href="./theme.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="helpman_settings.js"></script>
<script type="text/javascript" src="helpman_topicinit.js"></script>
<script type="text/javascript" src="highlight.js"></script>
<script type="text/javascript">
$(document).ready(function(){highlight();});
</script>
</head>
<body>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M6ETBEC1R9"></script><script>window.dataLayer=window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag('js', new Date()); gtag('config', 'G-M6ETBEC1R9');</script>
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
<header class="header elma-365">
<div class="container">
<a class="header__logo" href="https://elma365.com/ru/help">
<img src="./logo.svg" alt="header logo">
</a>
<!-- <div class="hero__search-form" id="search-panel">
<form class="search-form" onsubmit="ym(83179930,'reachGoal','poisk')">
<label class="search-form__label">
<span id="reset-search" class="search__icon"></span>
<input class="search-form__input" type="text">
</label>
<input class="search-form__submit" type="submit" value="Submit">
</form>
</div> -->
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
<div class="hero__search">
<a href="#" id="search-icon" class="hero__search-icon">
<img src="search-icon-white.svg" alt="search string">
</a>
<a href="#" id="side-menu-icon" class="hero__side-icon">
<img src="side_menu.svg" alt="side menu">
</a>
</div>
<div class="header__navi">
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a class="project-link" href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li><li><a class="project-link" href="https://elma365.com/ru/help/business_solutions/-elma365-store.html">Бизнес-решения</a></li></ul></span></li><li><a href="https://api.elma365.com/ru/"target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/"target="_blank">SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/" target="_blank">Академия</a></li><li><a href="https://elma365.com/ru/" target="_blank">Сайт ELMA365</a></li></ul>
</div>
</div>
</header>
<main class="main container">
<aside class="sidebar" id="sidebar">
<div class="sidebar__header">
<a class="header__logo" href="https://elma365.com/ru/help">
<img src="./logo-light.svg">
</a>
<span class="sidebar__close elma-365-close" id="close"></span>
</div>
<div class="sidebar__wrapper" id="side-menu">
</div>
</aside>
<article class="article" id="article">
<div class="article-inner">
<div class="content">
<header class="article__header">
<div class="article__bread" style="display:flex; gap:10px;">
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
<div class="topic__breadcrumbs">
<p><a href="elma365-on-premises.html">ELMA365 On-Premises</a> &gt; <a href="infrastructure-preparation.html">Подготовка инфраструктуры</a> &gt; Базы данных &gt; Отказоустойчивая инфраструктура / Кластер RabbitMQ</p>
</div>
</div>
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Кластер RabbitMQ</span></h1>
</div>
</header>
<section class="article__content">
<div class="scroll-top-inner">
<a href="#h1-article" class="scroll-top"></a>
</div>
<!-- Placeholder for topic body. -->
<p class="p_Normal">Для работы приложения ELMA365 необходимо установить RabbitMQ версии 3.9.153.12. Установка RabbitMQ версии 4.0 не поддерживается в текущей версии ELMA365.</p>
<p class="p_Normal">В статье описана установка RabbitMQ 3.12.0 и Erlang 25.3.2.2-1 для ОС Ubuntu Linux 20.04 и 22.04. Вы можете ознакомиться с руководством в <a href="https://www.rabbitmq.com/install-debian.html" target="_blank" class="weblink">официальной документации RabbitMQ</a>.</p>
<p class="p_Normal">Установка состоит из шести этапов:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal"><a href="configure-rabbitmq.html#preparation-node" class="topiclink">Подготовка нод (серверов)</a>.</li><li value="2" class="p_Normal"><a href="configure-rabbitmq.html#install-rabbitmq" class="topiclink">Установка RabbitMQ</a>.</li><li value="3" class="p_Normal"><a href="configure-rabbitmq.html#preparation-cluster-rabbitmq" class="topiclink">Подготовка кластера RabbitMQ</a>.</li><li value="4" class="p_Normal"><a href="configure-rabbitmq.html#setting-rabbitmq" class="topiclink">Настройка RabbitMQ</a>.</li><li value="5" class="p_Normal"><a href="configure-rabbitmq.html#config-haproxy" class="topiclink">Конфигурация HAproxy (блок rabbitmq)</a>.</li><li value="6" class="p_Normal"><a href="configure-rabbitmq.html#connect-to-rabbitmq" class="topiclink">Подключение к RabbitMQ</a>.</li></ol>
<h2 class="p_Heading2"><a id="preparation-node" class="hmanchor"></a><span class="f_Heading2">Шаг 1. Подготовка нод (серверов)</span></h2>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало&nbsp;внимание</span></p>
<p class="p_Normal">Минимальное количество серверов для организации кластера — три.</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец&nbsp;внимание</span></p>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:</li></ol>
<ul style="list-style-type:disc">
<li class="p_Normal"><span style="font-weight: bold;">rabbitmq-server1.your_domain</span>;</li><li class="p_Normal"><span style="font-weight: bold;">rabbitmq-server2.your_domain</span>;</li><li class="p_Normal"><span style="font-weight: bold;">rabbitmq-server3.your_domain</span>.</li></ul>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в<span style="font-weight: bold;"> /etc/hosts</span>.</li></ol>
<h2 class="p_Heading2"><a id="install-rabbitmq" class="hmanchor"></a><span class="f_Heading2">Шаг 2. Установка RabbitMQ</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Установите необходимые пакеты:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;apt-get&nbsp;install&nbsp;curl&nbsp;gnupg&nbsp;apt-transport-https&nbsp;-y</span></p>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Импортируйте все необходимые ключи:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">curl&nbsp;-1sLf&nbsp;&quot;https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA&quot;&nbsp;|&nbsp;sudo&nbsp;gpg&nbsp;--dearmor&nbsp;|&nbsp;sudo&nbsp;tee&nbsp;/usr/share/keyrings/com.rabbitmq.team.gpg&nbsp;&gt;&nbsp;/dev/</span><span class="f_CodeExample" style="font-weight: bold;">null</span><br />
<span class="f_CodeExample">curl&nbsp;-1sLf&nbsp;https://ppa1.novemberain.com/gpg.E495BB49CC4BBE5B.key&nbsp;|&nbsp;sudo&nbsp;gpg&nbsp;--dearmor&nbsp;|&nbsp;sudo&nbsp;tee&nbsp;/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg&nbsp;&gt;&nbsp;/dev/null</span><br />
<span class="f_CodeExample">curl&nbsp;-1sLf&nbsp;https://ppa1.novemberain.com/gpg.9F4587F226208342.key&nbsp;|&nbsp;sudo&nbsp;gpg&nbsp;--dearmor&nbsp;|&nbsp;sudo&nbsp;tee&nbsp;/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg&nbsp;&gt;&nbsp;/dev/null</span></p>
<p class="p_Normal">Актуальные ключи для разных версий RabbitMQ перечислены в <a href="https://www.rabbitmq.com/docs/install-debian#cloudsmith-signing-keys" target="_blank" class="weblink">официальной документации RabbitMQ</a>.</p>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Добавьте репозитории <span style="font-weight: bold;">RabbitMQ</span>:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample">sudo tee /etc/apt/sources.list.d/rabbitmq.list &lt;&lt;EOF</span><br />
<span class="f_CodeExample">deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) main</span><br />
<span class="f_CodeExample">deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) main</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main</span><br />
<span class="f_CodeExample">deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main</span><br />
<span class="f_CodeExample">EOF</span></p>
<ol style="list-style-type:upper-roman" start="4">
<li value="4" class="p_Normal">Обновите кеш пакетов:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;apt-get&nbsp;update&nbsp;-y</span></p>
<ol style="list-style-type:upper-roman" start="5">
<li value="5" class="p_Normal">Установите пакеты <span style="font-weight: bold;">Erlang</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;apt-get&nbsp;install&nbsp;-y&nbsp;erlang-base=1:25.3.2.2-1&nbsp;erlang-asn1=1:25.3.2.2-1&nbsp;erlang-crypto=1:25.3.2.2-1&nbsp;erlang-eldap=1:25.3.2.2-1&nbsp;erlang-ftp=1:25.3.2.2-1&nbsp;erlang-inets=1:25.3.2.2-1&nbsp;erlang-mnesia=1:25.3.2.2-1&nbsp;erlang-os-mon=1:25.3.2.2-1&nbsp;erlang-parsetools=1:25.3.2.2-1&nbsp;erlang-</span><span class="f_CodeExample" style="font-weight: bold;">public</span><span class="f_CodeExample">-key=1:25.3.2.2-1&nbsp;erlang-runtime-tools=1:25.3.2.2-1&nbsp;erlang-snmp=1:25.3.2.2-1&nbsp;erlang-ssl=1:25.3.2.2-1&nbsp;erlang-syntax-tools=1:25.3.2.2-1&nbsp;erlang-tftp=1:25.3.2.2-1&nbsp;erlang-tools=1:25.3.2.2-1&nbsp;erlang-xmerl=1:25.3.2.2-1</span></p>
<ol style="list-style-type:upper-roman" start="6">
<li value="6" class="p_Normal">Установите <span style="font-weight: bold;">rabbitmq-server</span> и его зависимости:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;apt-get&nbsp;install&nbsp;rabbitmq-server=3.12.0-1&nbsp;-y&nbsp;--fix-missing</span></p>
<ol style="list-style-type:upper-roman" start="7">
<li value="7" class="p_Normal">Запустите <span style="font-weight: bold;">rabbitmq-server</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;systemctl&nbsp;enable&nbsp;--now&nbsp;rabbitmq-server</span></p>
<h2 class="p_Heading2"><a id="preparation-cluster-rabbitmq" class="hmanchor"></a><span class="f_Heading2">Шаг 3. Подготовка кластера RabbitMQ</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">На каждой ноде <span style="font-weight: bold;">rabbitmq</span> создайте файл <code><b>/etc/rabbitmq/rabbitmq-env.conf</b></code> и добавьте переменные окружения <code><b>RABBITMQ_NODENAME</b></code> и <code><b>RABBITMQ_USE_LONGNAME</b></code>.</li></ol>
<p class="p_Normal">Пример заполнения для <span style="font-weight: bold;">rabbitmq-server1.your_domain</span>:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">RABBITMQ_NODENAME=rabbit@rabbitmq-server1.your_domain</span><br />
<span class="f_CodeExample">RABBITMQ_USE_LONGNAME=</span><span class="f_CodeExample" style="font-weight: bold;">true</span></p>
<p class="p_Normal">Пример заполнения для<span style="font-weight: bold;"> rabbitmq-server2.your_domain</span>:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">RABBITMQ_NODENAME=rabbit@rabbitmq-server2.your_domain</span><br />
<span class="f_CodeExample">RABBITMQ_USE_LONGNAME=</span><span class="f_CodeExample" style="font-weight: bold;">true</span></p>
<p class="p_Normal">Пример заполнения для <span style="font-weight: bold;">rabbitmq-server3.your_domain</span>:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">RABBITMQ_NODENAME=rabbit@rabbitmq-server3.your_domain</span><br />
<span class="f_CodeExample">RABBITMQ_USE_LONGNAME=</span><span class="f_CodeExample" style="font-weight: bold;">true</span></p>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Скопируйте Cookie <span style="font-weight: bold;">/var/lib/rabbitmq/.erlang.cookie</span> с первого узла<span style="font-weight: bold;"> rabbitmq-server1.your_domain</span> на все остальные узлы в кластере.</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало&nbsp;внимание</span></p>
<p class="p_Normal">Для работы кластера RabbitMQ у всех узлов, участвующих в кластере, должно совпадать содержимое файла <span style="font-weight: bold;">/var/lib/rabbitmq/.erlang.cookie</span>.</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Конец&nbsp;внимание</span></p>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Перезапустите сервис RabbitMQ на каждой ноде:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;systemctl&nbsp;restart&nbsp;rabbitmq-server</span></p>
<ol style="list-style-type:upper-roman" start="4">
<li value="4" class="p_Normal">Остановите приложение на узлах <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> и <span style="font-weight: bold;">rabbitmq-server3.your_domain</span> для последующего присоединения к кластеру:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;stop_app</span></p>
<ol style="list-style-type:upper-roman" start="5">
<li value="5" class="p_Normal">Сбросьте <span style="font-weight: bold;">rabbitmq</span> на узлах <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> и <span style="font-weight: bold;">rabbitmq-server3.your_domain</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;reset</span></p>
<ol style="list-style-type:upper-roman" start="6">
<li value="6" class="p_Normal">Присоедините узлы <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> и <span style="font-weight: bold;">rabbitmq-server3.your_domain</span> к кластеру:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;join_cluster&nbsp;rabbit@rabbitmq-server1.your_domain</span></p>
<ol style="list-style-type:upper-roman" start="7">
<li value="7" class="p_Normal">Запустите приложение на узлах <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> и <span style="font-weight: bold;">rabbitmq-server3.your_domain</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;start_app</span></p>
<ol style="list-style-type:upper-roman" start="8">
<li value="8" class="p_Normal">Проверьте статус кластера:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;cluster_status</span></p>
<h2 class="p_Heading2"><a id="setting-rabbitmq" class="hmanchor"></a><span class="f_Heading2">Шаг 4. Настройка RabbitMQ</span></h2>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало&nbsp;примечание</span></p>
<p class="p_Normal"><span style="font-weight: bold;">Примечание</span></p>
<p class="p_Normal">Для пароля разрешается применять следующие символы:</p>
<ul style="list-style-type:disc">
<li class="p_Normal">Заглавные латинские буквы: от A до Z;</li><li class="p_Normal">Строчные латинские буквы: от a до z;</li><li class="p_Normal">Цифры от 0 до 9;</li><li class="p_Normal">Символы: &nbsp;-_.</li></ul>
<p class="p_Normal">Зарезервированные (недопустимые) символы:</p>
<p class="p_Normal">! * ' ( ) ; : @ &amp; = + $ , / ? % # [ ]</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец&nbsp;примечание</span></p>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">На каждом узле включите необходимые плагины: </li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmq-plugins&nbsp;enable&nbsp;\</span><br />
<span class="f_CodeExample">rabbitmq_management</span></p>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Cоздайте <span style="font-weight: bold;">vhost</span> и дайте пользователю доступ к нему, выполнив команды на первом узле <span style="font-weight: bold;">rabbitmq-server1.your_domain</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;add_vhost&nbsp;elma365vhost</span><br />
<span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;add_user&nbsp;elma365user&nbsp;SecretPassword</span><br />
<span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;set_permissions&nbsp;-p&nbsp;elma365vhost&nbsp;elma365user&nbsp;&quot;.*&quot;&nbsp;&quot;.*&quot;&nbsp;&quot;.*&quot;</span><br />
<span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;set_user_tags&nbsp;elma365user&nbsp;administrator</span></p>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере, выполнив команду на первом узле <span style="font-weight: bold;">rabbitmq-server1.your_domain</span>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;set_policy&nbsp;-p&nbsp;'elma365vhost'&nbsp;MirrorAllQueues&nbsp;&quot;.*&quot;&nbsp;'{&quot;ha-mode&quot;:&quot;all&quot;}'</span></p>
<p class="p_Normal">Если отсутствует поддержка политики High Availability Mode, используйте политику Quorum:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">rabbitmqctl&nbsp;set_policy&nbsp;p&nbsp;'elma365vhost'&nbsp;QuorumDefault&nbsp;“^.*”&nbsp;{“queue-type”:“quorum”}&nbsp;--priority&nbsp;0&nbsp;--apply-to&nbsp;queues</span></p>
<p class="p_Normal">Чтобы посмотреть настроенные политики, используйте команду:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;rabbitmqctl&nbsp;list_policies&nbsp;--vhost&nbsp;elma365vhost</span></p>
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A1')">Настройка включения TLS/SSL в RabbitMQ</a></p>
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
<tr>
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal">Для включения поддержки TLS/SSL в RabbitMQ необходимо в файл конфигурации <span style="font-weight: bold;">/etc/rabbitmq/rabbitmq.conf</span>:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal">Добавить конфигурацию SSL в блоки<span style="font-weight: bold;"> rabbit</span> (port 5671) и <span style="font-weight: bold;">management</span> (port 15671).</li></ol>
<ol style="list-style-type:decimal" start="2">
<li value="2" class="p_Normal">В параметрах <span style="font-weight: bold;">ssl_options.certfile </span>и<span style="font-weight: bold;"> management.ssl.certfile</span> указать путь до файла сертификата сервера.</li></ol>
<ol style="list-style-type:decimal" start="3">
<li value="3" class="p_Normal">В параметрах <span style="font-weight: bold;">ssl_options.keyfile </span>и<span style="font-weight: bold;"> management.ssl.keyfile</span> указать путь до файла закрытого ключа.</li></ol>
<ol style="list-style-type:decimal" start="4">
<li value="4" class="p_Normal">В параметрах <span style="font-weight: bold;">ssl_options.cacertfile </span>и<span style="font-weight: bold;"> management.ssl.cacertfile</span> указать путь до файла корневого CA.</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">listeners.tcp&nbsp;=&nbsp;none</span><br />
<span class="f_CodeExample">listeners.ssl.</span><span class="f_CodeExample" style="font-weight: bold;">default</span><span class="f_CodeExample">&nbsp;=&nbsp;5671</span><br />
<span class="f_CodeExample">ssl_options.cacertfile&nbsp;=&nbsp;/path/to/ca_certificate.pem</span><br />
<span class="f_CodeExample">ssl_options.certfile&nbsp;=&nbsp;/path/to/server_certificate.pem</span><br />
<span class="f_CodeExample">ssl_options.keyfile&nbsp;=&nbsp;/path/to/server_key.pem</span><br />
<span class="f_CodeExample">ssl_options.verify&nbsp;=&nbsp;verify_peer</span><br />
<span class="f_CodeExample">ssl_options.fail_if_no_peer_cert&nbsp;=&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><br />
<span class="f_CodeExample" style="font-weight: bold;">&nbsp;</span><br />
<span class="f_CodeExample">management.ssl.port&nbsp;=&nbsp;15671</span><br />
<span class="f_CodeExample">management.ssl.cacertfile&nbsp;=&nbsp;/path/to/ca_certificate.pem</span><br />
<span class="f_CodeExample">management.ssl.certfile&nbsp;=&nbsp;/path/to/server_certificate.pem</span><br />
<span class="f_CodeExample">management.ssl.keyfile&nbsp;=&nbsp;/path/to/server_key.pem</span></p>
<ol style="list-style-type:decimal" start="5">
<li value="5" class="p_Normal">Перезапустить сервис RabbitMQ:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;systemctl&nbsp;restart&nbsp;rabbitmq-server</span></p>
<p class="p_Normal">Подробнее о настройке TLS/SSL в RabbitMQ читайте в <a href="https://www.rabbitmq.com/ssl.html" target="_blank" class="weblink">официальной документации RabbitMQ</a>.<br />
&nbsp;<br />
Для включения TLS/SSL между нодами RabbitMQ «Securing Cluster (Inter-node)» необходимо:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal">Объединить в один файл открытый и закрытый ключи узла, например, в<span style="font-weight: bold;"> </span><code><b>combined_keys.pem</b></code>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">cat&nbsp;server_certificate.pem&nbsp;server_key.pem&nbsp;&gt;&nbsp;combined_keys.pem</span></p>
<ol style="list-style-type:decimal" start="2">
<li value="2" class="p_CodeExample" style="white-space: normal; page-break-inside: auto;">Вывести путь к библиотеке Erlang TLS и экспортировать его в переменную окружения <code><b>ERL_SSL_PATH</b></code> в файл <code><b>/etc/rabbitmq/rabbitmq-env.conf</b></code>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">erl&nbsp;-noinput&nbsp;-eval&nbsp;'io:format(&quot;ERL_SSL_PATH=~s~n&quot;,&nbsp;[filename:dirname(code:which(inet_tls_dist))])'&nbsp;-s&nbsp;init&nbsp;stop&nbsp;&gt;&nbsp;/tmp/ssl-path.txt</span><br />
<span class="f_CodeExample">cat&nbsp;/tmp/ssl-path.txt&nbsp;/etc/rabbitmq/rabbitmq-env.conf&nbsp;&gt;&nbsp;/tmp/</span><span class="f_CodeExample" style="font-weight: bold;">new</span><span class="f_CodeExample">-rabbitmq-env.conf</span><br />
<span class="f_CodeExample">mv&nbsp;-f&nbsp;/tmp/</span><span class="f_CodeExample" style="font-weight: bold;">new</span><span class="f_CodeExample">-rabbitmq-env.conf&nbsp;/etc/rabbitmq/rabbitmq-env.conf</span></p>
<ol style="list-style-type:decimal" start="3">
<li value="3" class="p_CodeExample" style="white-space: normal; page-break-inside: auto;">В файл <code><b>/etc/rabbitmq/rabbitmq-env.conf</b></code> добавьте параметры для переменных окружения <code><b>SERVER_ADDITIONAL_ERL_ARGS</b></code> и <code><b>RABBITMQ_CTL_ERL_ARGS</b></code>:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">SERVER_ADDITIONAL_ERL_ARGS=&quot;-pa&nbsp;$ERL_SSL_PATH&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-proto_dist&nbsp;inet_tls&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-ssl_dist_opt&nbsp;server_certfile&nbsp;/path/to/combined_keys.pem&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-ssl_dist_opt&nbsp;server_secure_renegotiate&nbsp;true&nbsp;client_secure_renegotiate&nbsp;true&quot;</span><br />
<span class="f_CodeExample">RABBITMQ_CTL_ERL_ARGS=&quot;-pa&nbsp;$ERL_SSL_PATH&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-proto_dist&nbsp;inet_tls&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-ssl_dist_opt&nbsp;server_certfile&nbsp;/path/to/combined_keys.pem&nbsp;\</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;-ssl_dist_opt&nbsp;server_secure_renegotiate&nbsp;true&nbsp;client_secure_renegotiate&nbsp;true&quot;</span></p>
<ol style="list-style-type:decimal" start="4">
<li value="4" class="p_Normal"> Перезапустить сервис RabbitMQ на каждой ноде:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;systemctl&nbsp;restart&nbsp;rabbitmq-server</span></p>
<p class="p_Normal">Подробнее о настройке TLS/SSL между нодами RabbitMQ читайте в <a href="https://www.rabbitmq.com/clustering-ssl.html" target="_blank" class="weblink">официальной документации RabbitMQ</a>.</p>
</td>
</tr>
</table>
</div>
<h2 class="p_Heading2"><a id="config-haproxy" class="hmanchor"></a><span class="f_Heading2">Шаг 5. Конфигурация HAProxy (блок rabbitmq)</span></h2>
<p class="p_Normal">Балансировку нагрузки между нодами кластера RabbitMQ осуществим с помощью HAProxy, произведем настройку по статье <a href="haproxy-rabbitmq.html" class="topiclink">«Конфигурация HAProxy для RabbitMQ»</a>.</p>
<h2 class="p_Heading2"><a id="connect-to-rabbitmq" class="hmanchor"></a><span class="f_Heading2">Шаг 6. Подключение к RabbitMQ</span></h2>
<p class="p_Normal">Строка для подключения к кластеру RabbitMQ (через HAProxy):</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">amqp</span><span class="f_CodeExample">://elma365user:SecretPassword@haproxy-server.your_domain:5672/elma365vhost</span></p>
<p class="p_Normal">Строка для подключения к кластеру RabbitMQ c TLS/SSL (через HAProxy c TLS/SSL):</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">amqps://elma365user:SecretPassword@haproxy-server.your_domain:5671/elma365vhost</span></p>
<div class="bottom-nav">
<a id="prev-link" class="topic__navi_prev" href="configure-redis.html">
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
class="bottom-nav__link">configure-redis.html</span>
</a>
<a id="next-link" class="topic__navi_next" href="minio-cluster.html">
<span class="bottom-nav__link">minio-cluster.html</span> <span
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
</a>
</div>
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
<div class="feedback-wrap"><div class="feedback" id="feedback"><span><b>Была ли статья полезной?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx">Спасибо за ваш отзыв!</div><div id="feedback-success-popup"><div class="wrap"><button type="button" class="feedback-popup-close">×</button><svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_212_2187)"><path d="M22 0.6875C10.2294 0.6875 0.6875 10.2294 0.6875 22C0.6875 33.7706 10.2294 43.3125 22 43.3125C33.7706 43.3125 43.3125 33.7706 43.3125 22C43.3125 10.2294 33.7706 0.6875 22 0.6875ZM22 40.5625C11.8023 40.5625 3.4375 32.3078 3.4375 22C3.4375 11.8024 11.6922 3.4375 22 3.4375C32.1977 3.4375 40.5625 11.6922 40.5625 22C40.5625 32.1976 32.3078 40.5625 22 40.5625ZM34.1713 16.933L18.6613 32.3186C18.257 32.7197 17.604 32.7171 17.203 32.3128L9.82283 24.873C9.42176 24.4686 9.42434 23.8157 9.82867 23.4146L10.5609 22.6884C10.9652 22.2873 11.6181 22.2899 12.0192 22.6942L17.9468 28.6697L31.9926 14.7366C32.3969 14.3356 33.0498 14.3382 33.4509 14.7425L34.1772 15.4747C34.5783 15.879 34.5757 16.532 34.1713 16.933Z" fill="#27AE60"></path></g><defs><clipPath id="clip0_212_2187"><rect width="44" height="44" fill="white"></rect></clipPath></defs></svg><p>Ваш отзыв успешно отправлен!</p><span>Спасибо за обратную связь.</span></div></div><div class="feedback__popup" id="feedback__popup_why"><button type="button" class="feedback-popup-close">×</button><div class="feedback__popup-header">Уточните, почему:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Рекомендации не помогли</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Текст трудно понять</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Нет ответа на мой вопрос</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Содержание статьи не соответствует заголовку</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Другая причина</label></div><div class="feedback__popup" id="feedback__popup-other"><button type="button" class="feedback-popup-close">×</button> <div class="feedback__popup-header">Расскажите, что вам не понравилось в статье:</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Отправить"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg"/><span class="feedback-form__btn-group_yes-btn">Да</span></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg"/><span class="feedback-form__btn-group_no-btn">Нет</span></label></div><select name="category"><option disabled>Выберите вариант</option><option value="bad_recommendation" selected>Рекомендации не помогли</option><option value="difficult_text">Текст трудно понять</option><option value="no_answer">Нет ответа на мой вопрос</option><option value="bad_header">Содержание статьи не соответствует заголовку</option><option value="other_reason">Другая причина</option></select><input type="submit"></form></div></div>
</section>
</div>
<aside class="article__sidebar" style="display:none">
<input type="checkbox" />
<div class="article__arrow"></div>
<div class="table-of-contents elma365-right" id="toc2Content">
<h3 class="h3-toc">В этой статье</h3>
<nav id="toc2"></nav>
</div>
</aside>
</div>
</article>
</main>
<footer class="footer">
<div class="footer-container">
<div class="footer-mobile">
<ul class="footer-mobile__list"><li><a href="https://api.elma365.com/ru/" target="_blank">API</a></li><li><a href="https://tssdk.elma365.com/" target="_blank">TS SDK</a></li><li><a href="https://community.elma365.com/" target="_blank">Community</a></li><li><a href="https://elma-academy.com/ru/elma365" target="_blank">Академия</a></li></ul><ul class="footer-mobile__list"><li><a href="https://elma365.com/ru/help/platform/get-trial.html">Платформа</a></li><li><a href="https://elma365.com/ru/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://elma365.com/ru/help/service/service-functions.html">Service</a></li><li><a href="https://elma365.com/ru/help/projects/projects-functions.html">Проекты</a></li></ul>
</div>
<div class="container">
<div class="footer-wrap">
<div><span class="mobile-question-popup">Отправить фидбэк</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Задать вопрос</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Отправить"></div></form><div class="hidden fade-in question-success-xs">Ваш фидбэк отправлен.</div></div>
<div class="footer-flex-b">
<div class="footer-top">
<span class="footer-copy">&copy; 2025
ELMA365
</span>
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
</a>
</div>
<div class="footer-line">
<div class="footer-line-copy">
<span class="footer-copy">&copy; 2025
ELMA365
</span>
</div>
<ul class="footer-list">
<li class="footer-item"><a href="https://elma365.com/ru/" target="_blank" class="footer-link" style="color: #0D4A75;"><img src="browse.svg" alt="browse icon" class="footer-img">elma365.com</a></li><li class="footer-item"><a href="https://www.youtube.com/user/ELMABPM" target="_blank" class="footer-link"><img src="yt.svg" alt="youtube icon" class="footer-img"></a></li><li class="footer-item"><a href="https://vk.com/elma_bpm" target="_blank" class="footer-link"><img src="vk.svg" alt="vk icon" class="footer-img"></a></li><li class="footer-item"><a href="https://t.me/elmaday" target="_blank" class="footer-link"><img src="tg.svg" alt="telegram icon" class="footer-img"></a></li><li class="footer-item"><a href="https://dzen.ru/elma" target="_blank" class="footer-link"><img src="dzen.svg" alt="dzen icon" class="footer-img"></a></li>
<li class="footer-item">
<a href="https://navigator.sk.ru/orn/1122971" target="_blank">
<img src="sk-resident.svg" alt="sk icon" class="footer-img" width="117" height="34">
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<a href="#" class="arrow-top"></a>
</div>
</footer>
<!-- <script type="text/javascript" src="jquery1.min.js"></script>-->
<iframe name="hmnavigation" style="display:none!important"></iframe>
<!--<script src="./jquery-ui.js"></script> -->
<script src="./jquery-ui.min.js"></script>
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
<script src="./jquery.tocify.min.js"></script>
<script src="./TypoReporter.min.js"></script>
<script src="./google-search.js"></script>
<script src="./main.js"></script>
<script type="text/javascript">
HMInitToggle('TOGGLE0186A1','hm.type','dropdown','hm.state','0');
</script>
</body>
</html>