update
All checks were successful
Deploy Static Site / deploy (push) Successful in 6m6s

This commit is contained in:
2025-05-29 16:42:45 +04:00
parent e217f89702
commit 00717a92fb
2681 changed files with 173810 additions and 0 deletions

View File

@ -0,0 +1,349 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>RabbitMQ cluster</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="To work with the BRIX application, RabbitMQ version 3.9.15 or higher is required. The article describes the installation of RabbitMQ 3.12.0 and Erlang 25.3.2.2-1 for Ubuntu..." />
<meta name="picture" content="" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Full documentation for BRIX365 platform. Low-code developer guide. User guide. Admin guide. Developer guide." />
<meta property="og:url" content="https://brix365.com/en/help" />
<meta property="og:image" content="" />
<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>!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://brix365.com/en/help">
<img src="./logo-en.svg" alt="header logo">
</a>
<!-- <div class="hero__search-form" id="search-panel">
<form class="search-form" onsubmit="ym(83180416,'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://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a class="project-link" href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://brix365.com/en/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li><li><a class="project-link" href="https://brix365.com/en/help/business_solutions/-elma365-store.html">Business Solutions</a></li></ul></span></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li><li><a href="https://tssdk.brix365.com/" target="_blank">SDK</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://brix365.com/en/help">
<img src="./logo-light-en.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">BRIX On-Premises</a> &gt; <a href="infrastructure-preparation.html">Prepare infrastructure</a> &gt; Databases &gt; High availability infrastructure / RabbitMQ cluster</p>
</div>
</div>
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">RabbitMQ cluster</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">To work with the BRIX application, RabbitMQ version 3.9.15 or higher is required. The article describes the installation of RabbitMQ 3.12.0 and Erlang 25.3.2.2-1 for Ubuntu Linux 20.04 and 22.04. You can also refer to the guide in the <a href="https://www.rabbitmq.com/install-debian.html" target="_blank" class="weblink">official RabbitMQ documentation</a> </p>
<p class="p_Normal">Installation consists of six steps:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal"><a href="configure-rabbitmq.html#preparation-node" class="topiclink">Prepare nodes (servers)</a>.</li><li value="2" class="p_Normal"><a href="configure-rabbitmq.html#install-rabbitmq" class="topiclink">Install RabbitMQ</a>.</li><li value="3" class="p_Normal"><a href="configure-rabbitmq.html#preparation-cluster-rabbitmq" class="topiclink">Prepare RabbitMQ cluster</a>.</li><li value="4" class="p_Normal"><a href="configure-rabbitmq.html#setting-rabbitmq" class="topiclink">Configure RabbitMQ</a>.</li><li value="5" class="p_Normal"><a href="configure-rabbitmq.html#config-haproxy" class="topiclink">Configure HAproxy rabbitmq block)</a>.</li><li value="6" class="p_Normal"><a href="configure-rabbitmq.html#connect-to-rabbitmq" class="topiclink">Connect to RabbitMQ</a>.</li></ol>
<h2 class="p_Heading2"><a id="preparation-node" class="hmanchor"></a><span class="f_Heading2">Step 1: Prepare nodes (servers)</span></h2>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало&nbsp;внимание</span></p>
<p class="p_Normal">The minimum number of servers to organize a cluster is three.</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">Create three nodes (servers) with sequentially numbered host names:</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">Create the necessary host name mappings in DNS. If this is not possible, add the required entries to<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">Step 2: Install RabbitMQ</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Install the necessary packages:</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">Import all necessary keys:</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>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Add <span style="font-weight: bold;">RabbitMQ</span> repositories:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">sudo&nbsp;tee&nbsp;/etc/apt/sources.list.d/rabbitmq.list&nbsp;&lt;&lt;EOF</span><br />
<span class="f_CodeExample">deb&nbsp;[signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg]&nbsp;https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu&nbsp;$(lsb_release&nbsp;-cs)&nbsp;main</span><br />
<span class="f_CodeExample">deb-src&nbsp;[signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg]&nbsp;https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu&nbsp;$(lsb_release&nbsp;-cs)&nbsp;main</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">deb&nbsp;[signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg]&nbsp;https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu&nbsp;$(lsb_release&nbsp;-cs)&nbsp;main</span><br />
<span class="f_CodeExample">deb-src&nbsp;[signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg]&nbsp;https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu&nbsp;$(lsb_release&nbsp;-cs)&nbsp;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">Update the package cache:</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">Install <span style="font-weight: bold;">Erlang</span> packages:</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">Install <span style="font-weight: bold;">rabbitmq-server</span> and its dependencies:</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">Start <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">Step 3: Prepare RabbitMQ cluster</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">On each <span style="font-weight: bold;">rabbitmq</span> node, create the file <code><b>/etc/rabbitmq/rabbitmq-env.conf</b></code> and add the environment variables <code><b>RABBITMQ_NODENAME</b></code> and <code><b>RABBITMQ_USE_LONGNAME</b></code>.</li></ol>
<p class="p_Normal">Example content for <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">Example content for<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">Example content for <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">Copy Cookie <span style="font-weight: bold;">/var/lib/rabbitmq/.erlang.cookie</span> from the first node<span style="font-weight: bold;"> rabbitmq-server1.your_domain</span> to all the other nodes in the cluster.</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">Начало&nbsp;внимание</span></p>
<p class="p_Normal">For the RabbitMQ cluster to work, all nodes participating in the cluster must have the same content in the <span style="font-weight: bold;">/var/lib/rabbitmq/.erlang.cookie </span>file.</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">Restart the RabbitMQ service on each node:</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">Stop the application on nodes <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> and <span style="font-weight: bold;">rabbitmq-server3.your_domain</span> for subsequent joining to the cluster:</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">Reset <span style="font-weight: bold;">rabbitmq</span> on nodes <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> and <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">Join nodes <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> and <span style="font-weight: bold;">rabbitmq-server3.your_domain</span> to the cluster:</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">Start the application on nodes <span style="font-weight: bold;">rabbitmq-server2.your_domain</span> and <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">Check the cluster status:</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">Step 4: Configure 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;">Note</span></p>
<p class="p_Normal">For the password, the following characters are allowed:</p>
<ul style="list-style-type:disc">
<li class="p_Normal">Uppercase Latin letters: A to Z</li><li class="p_Normal">Lowercase Latin letters: a to z</li><li class="p_Normal">Digits: 0 to 9</li><li class="p_Normal">Symbols: -_</li></ul>
<p class="p_Normal">Reserved (invalid) symbols:</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">On each node, enable the necessary plugins: </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">Create <span style="font-weight: bold;">vhost</span> nd give the user access to it, executing commands on the first node <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">Create a policy that allows mirroring queues for all nodes in the cluster, executing the command on the first node <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">If the High Availability Mode policy is not supported, use the Quorum policy:</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">To &nbsp;view the configured policies, use the command:</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')">Enabling TLS/SSL in RabbitMQ</a></p>
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; 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">To enable TLS/SSL support in RabbitMQ, you need to edit the configuration file <span style="font-weight: bold;">/etc/rabbitmq/rabbitmq.conf</span>:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal">Add SSL configuration to the<span style="font-weight: bold;"> rabbit</span> (port 5671) and <span style="font-weight: bold;">management</span> (port 15671) blocks.</li></ol>
<ol style="list-style-type:decimal" start="2">
<li value="2" class="p_Normal">In the <span style="font-weight: bold;">ssl_options.certfile and management.ssl.certfile</span> parameters, specify the path to the server certificate file.</li></ol>
<ol style="list-style-type:decimal" start="3">
<li value="3" class="p_Normal">In the <span style="font-weight: bold;">ssl_options.keyfile </span>и<span style="font-weight: bold;"> management.ssl.keyfile</span> parameters, specify the path to the private key file.</li></ol>
<ol style="list-style-type:decimal" start="4">
<li value="4" class="p_Normal">In the <span style="font-weight: bold;">ssl_options.cacertfile </span>и<span style="font-weight: bold;"> management.ssl.cacertfile</span> parameters, specify the path to the root CA file.</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">Restart the RabbitMQ service:</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">For more details on configuring TLS/SSL in RabbitMQ, refer to the<a href="https://www.rabbitmq.com/ssl.html" target="_blank" class="weblink"> official RabbitMQ documentation</a>.<br />
&nbsp;<br />
For enabling TLS/SSL between RabbitMQ nodes &quot;Securing Cluster (Inter-node),&quot; you need to:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal">Combine the public and private keys of the node into one file, for example, in<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;">Extract the path to the Erlang TLS library and export it to the environment variable <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;">In the <code><b>/etc/rabbitmq/rabbitmq-env.conf</b></code> file, add parameters for the environment variables <code><b>SERVER_ADDITIONAL_ERL_ARGS</b></code> and <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"> Restart the RabbitMQ service on each node:</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">For more details on configuring TLS/SSL between RabbitMQ nodes, refer to the <a href="https://www.rabbitmq.com/clustering-ssl.html" target="_blank" class="weblink">official RabbitMQ documentation</a>.</p>
</td>
</tr>
</table>
</div>
<h2 class="p_Heading2"><a id="config-haproxy" class="hmanchor"></a><span class="f_Heading2">Step 5: Configure HAProxy (rabbitmq block)</span></h2>
<p class="p_Normal">Load balancing between RabbitMQ cluster nodes will be performed using HAProxy. Configure it according to <a href="haproxy-rabbitmq.html" class="topiclink">Configure HAProxy for RabbitMQ</a>.</p>
<h2 class="p_Heading2"><a id="connect-to-rabbitmq" class="hmanchor"></a><span class="f_Heading2">Step 6: Connect to RabbitMQ</span></h2>
<p class="p_Normal">Connection string to connect to the RabbitMQ cluster (via 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">Connection string to connect to the RabbitMQ cluster with TLS/SSL (via HAProxy with 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" id="feedback"><div class="feedback-help"><span><b>Was this helpful?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx" style="display: none;">Thanks for your feedback!</div><div class="feedback__popup" id="feedback__popup_why" style="display: none;"><div class="feedback__popup-header">Please specify why:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Recommendations did not help me</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Article is hard to understand</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Didn`t answer my question</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Content does not match the topic</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Other</label></div><div class="feedback__popup" id="feedback__popup-other" style="display: none;"><div class="feedback__popup-header">How we can improve it?</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Submit"></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" class="small-img" alt="like"><spanclass="feedback-form__btn-group_yes-btn">Yes</spanclass="feedback-form__btn-group_yes-btn"></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg" class="small-img" alt="dislike"><spanclass="feedback-form__btn-group_no-btn">No</spanclass="feedback-form__btn-group_no-btn"></label></div><select name="category"><option disabled="">Please specify why</option><option value="bad_recommendation" selected="">Recommendations did not help me</option><option value="difficult_text">Article is hard to understand</option><option value="no_answer">Didn`t answer my question</option><option value="bad_header">Content does not match the topic</option><option value="other_reason">Other</option></select><input type="submit"></form></div><div class="found_typo"><p style="margin: 0px; margin-top: 16px !important;"><span><b>Found a typo?</b></span> Select it and press <i>Ctrl+Enter</i> to send us feedback</p></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">In this topic</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://brix365.com/en/" target="_blank">BRIX</a></li><li><a href="https://tssdk.brix365.com/en/latest/" target="_blank">SDK</a></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li></ul><ul class="footer-mobile__list"><li><a href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li></ul>
</div>
<div class="footer-wrap">
<div><span class="mobile-question-popup">Send feedback</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Ask a question</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Send"></div></form><div class="hidden fade-in question-success-xs">Sent</div></div>
<div class="footer-flex-b">
<span class="footer-copy">&copy; 2025 BRIX</span>
<ul class="footer-list">
<li class="footer-item">
<a href="#" class="arrow-top" style="display: block;"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<iframe name="hmnavigation" style="display:none!important"></iframe>
<script src="./jquery-ui.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>