<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Компоненты сообщества PostgreSQL on PIG.CENTER</title><link>https://pig.center/ru/</link><description>Recent content in Компоненты сообщества PostgreSQL on PIG.CENTER</description><generator>Hugo</generator><language>ru-RU</language><lastBuildDate>Tue, 08 Sep 2026 21:29:01 +0800</lastBuildDate><atom:link href="https://pig.center/ru/index.xml" rel="self" type="application/rss+xml"/><item><title>Примечания к выпускам pgBadger 13.x</title><link>https://pig.center/ru/docs/pgbadger/releases/13/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/releases/13/</guid><description>&lt;p&gt;Здесь полностью сохранена история изменений pgBadger 13.x из исходного проекта, от новых версий к старым.&lt;/p&gt;&#10;&lt;h2 id="v13-2"&gt;v13.2 · 2025-12-29&#10;&lt;/h2&gt;&#10;&lt;p&gt;Это выпуск pgBadger с исправлениями проблем и патчами,&#10;предложенные пользователями после предыдущего выпуска.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Исправлена нормализация, некорректно обрабатывавшая сбалансированные строки&#10;в одинарных кавычках с экранированными кавычками внутри. Спасибо Bertrand&#10;Bourgier за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлены требования к заполнителям в документации.&lt;/li&gt;&#10;&lt;li&gt;Исправлен случай, когда примеры строк журнала с ошибками не попадали в отчёт.&#10;Спасибо john doe за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлена возможная проблема приоритета между ! и %s. Спасибо Luca&#10;Santarelli и Philipp Trulson за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Код pgFormatter обновлён до версии 5.9.&lt;/li&gt;&#10;&lt;li&gt;Добавлено действие GitHub CI для тестирования при отправке коммитов.&lt;/li&gt;&#10;&lt;li&gt;Исправлен разбор заполнителя %r в log_line_prefix. Спасибо nike7o0 за&#10;сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлено предупреждение о неинициализированном значении. Спасибо Ales&#10;Zeleny за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Документация по параметрам SSH для разбора журналов Postgres дополнена&#10;примерами. Спасибо Ulrich Konrad за патч.&lt;/li&gt;&#10;&lt;li&gt;Добавлена команда &amp;ndash;ssh-sudo для запуска команд по SSH через sudo. Спасибо&#10;Andrew Jackson за патч.&lt;/li&gt;&#10;&lt;li&gt;Исправлена возможная проблема приоритета между ! и строковым eq. Спасибо&#10;Adrien Nayrat за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлен разбор статистики pgbouncer. Спасибо mrgtt за сообщение.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="v13-1"&gt;v13.1 · 2025-03-16&#10;&lt;/h2&gt;&#10;&lt;p&gt;Это выпуск pgBadger с исправлениями проблем, о которых&#10;пользователи сообщили после предыдущего выпуска, и добавляет новые возможности:&lt;/p&gt;</description></item><item><title>YAML Параметры конфигурации</title><link>https://pig.center/ru/docs/patroni/config/yaml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/config/yaml/</guid><description>&lt;p&gt;&lt;a id="yaml"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="globaluniversal"&gt;Глобальный/Всемирный&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;thread_pool_size&lt;/strong&gt;: размер пула потоков, используемый Patroni для выполнения асинхронных задач и обмена данными по REST API с другими участниками во время выбора лидера или проверок в аварийном режиме. Минимальное значение — &lt;code&gt;5&lt;/code&gt;, значение по умолчанию — &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;thread_stack_size&lt;/strong&gt;: указывает размер стека, используемый для потоков, запускаемых Patroni. Значение должно быть выровнено по &lt;code&gt;64kB&lt;/code&gt;. Минимальное значение — &lt;code&gt;64kB&lt;/code&gt;, значение по умолчанию (устанавливается Patroni) — &lt;code&gt;512kB&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;name&lt;/strong&gt;: имя хоста. Должно быть уникальным для кластера. Значение &lt;code&gt;__patroni_strict_sync_replica_placeholder__&lt;/code&gt; зарезервировано для внутреннего использования Patroni и не может использоваться в качестве имени узла.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;namespace&lt;/strong&gt;: путь внутри хранилища конфигурации, где Patroni будет хранить информацию о кластере. Значение по умолчанию: &amp;ldquo;/service&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;scope&lt;/strong&gt;: имя кластера&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a id="log_settings"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Введение</title><link>https://pig.center/ru/docs/patroni/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/readme/</guid><description>&lt;p&gt;&lt;a id="readme"&gt;&lt;/a&gt;&#10;Patroni — шаблон решений высокой доступности (HA) PostgreSQL на Python. Patroni возник как ответвление проекта &lt;a href="https://github.com/compose/governor"&gt;Governor&lt;/a&gt;&#10; от Compose и содержит множество новых возможностей.&lt;/p&gt;&#10;&lt;p&gt;Дополнительные вводные материалы:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iruaCgeG7qs"&gt;PostgreSQL HA with Kubernetes and Patroni&lt;/a&gt;&#10; — доклад Джоша Беркуса на KubeCon 2016 (видео)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://engineering.zalando.com/posts/2016/02/zalandos-patroni-a-template-for-high-availability-postgresql.html"&gt;Публикация в техническом блоге Zalando за февраль 2016 года&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="development-status"&gt;Состояние разработки&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni активно разрабатывается и принимает вклады сообщества. Подробнее см. раздел &lt;a href="https://pig.center/ru/docs/patroni/contributing_guidelines/#contributing_guidelines"&gt;Участие в разработке&lt;/a&gt;&#10; ниже.&lt;/p&gt;&#10;&lt;p&gt;Сведения о новых выпусках публикуются &lt;a href="https://pig.center/ru/docs/patroni/releases/#releases"&gt;здесь&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Возможности</title><link>https://pig.center/ru/docs/pgbouncer/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/features/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Несколько уровней строгости при перераспределении соединений:&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&lt;strong&gt;Сеансовый режим пула&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Этот режим поддерживает все возможности PostgreSQL.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;Транзакционный режим пула&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул. Этот режим нарушает работу некоторых сеансовых возможностей PostgreSQL. Его можно использовать, только если приложение не применяет несовместимые возможности. Они перечислены в таблице ниже.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;Режим пула на уровне операторов&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Наиболее строгий метод. Это транзакционный режим пула с дополнительным ограничением: транзакции из нескольких операторов запрещены. Такой режим принудительно обеспечивает клиентский режим «autocommit» и в основном предназначен для PL/Proxy.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Низкое потребление памяти (по умолчанию 2 kB на соединение), поскольку PgBouncer не требуется получать пакеты целиком.&lt;/p&gt;</description></item><item><title>Настройки динамической конфигурации</title><link>https://pig.center/ru/docs/patroni/config/dynamic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/config/dynamic/</guid><description>&lt;p&gt;&lt;a id="dynamic"&gt;&lt;/a&gt;&#10;Динамическая конфигурация хранится в DCS (распределённое хранилище конфигурации) и применяется ко всем узлам кластера.&lt;/p&gt;&#10;&lt;p&gt;Чтобы изменить динамическую конфигурацию, можно использовать либо инструмент &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl_edit_config"&gt;patronictl_edit_config&lt;/a&gt;&#10;, либо Patroni &lt;a href="https://pig.center/ru/docs/patroni/rest_api/#rest_api"&gt;REST API&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;loop_wait&lt;/strong&gt;: количество секунд, в течение которых цикл будет спать. Значение по умолчанию: 10, минимально возможное значение: 1&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ttl&lt;/strong&gt;: TTL для получения блокировки лидера (в секундах). Представьте это как продолжительность времени до начала процесса автоматического переключения при отказе. Значение по умолчанию: 30, минимально возможное значение: 20&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;retry_timeout&lt;/strong&gt;: тайм-аут повторных попыток операций DCS и PostgreSQL (в секундах). DCS или сетевые проблемы, короче этого времени, не приведут к демотированию лидера. Значение по умолчанию: 10, минимально возможное значение: 3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;при изменении значений &lt;strong&gt;loop_wait&lt;/strong&gt;, &lt;strong&gt;retry_timeout&lt;/strong&gt; или &lt;strong&gt;ttl&lt;/strong&gt; необходимо соблюдать следующее правило:&lt;/p&gt;</description></item><item><title>Руководство для начинающих</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>Примечания к выпускам pgBadger 12.x</title><link>https://pig.center/ru/docs/pgbadger/releases/12/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/releases/12/</guid><description>&lt;p&gt;Здесь полностью сохранена история изменений pgBadger 12.x из исходного проекта, от новых версий к старым.&lt;/p&gt;&#10;&lt;h2 id="v12-4"&gt;v12.4 · 2023-12-25&#10;&lt;/h2&gt;&#10;&lt;p&gt;Это выпуск pgBadger с исправлениями проблем, о которых&#10;пользователи сообщили после предыдущего выпуска.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Исправлен отчёт pgbouncer для версии 1.21. Спасибо Ales Zeleny за патч.&lt;/li&gt;&#10;&lt;li&gt;Число параллельных процессов Perl больше не может превышать число файлов.&#10;Спасибо maliangzhu за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлен регрессионный тест, не работавший с версии 12.3. Спасибо ieshin&#10;за сообщение.&lt;/li&gt;&#10;&lt;li&gt;Исправлены случаи, когда записи LOG учитывались как записи уровня ERROR.&#10;Спасибо Matti Linnanvuori за сообщение.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="v12-3"&gt;v12.3 · 2023-11-27&#10;&lt;/h2&gt;&#10;&lt;p&gt;Это выпуск pgBadger с исправлениями проблем, о которых&#10;пользователи сообщили после предыдущего выпуска. Он также добавляет новые возможности:&lt;/p&gt;</description></item><item><title>Основы балансировки нагрузки</title><link>https://pig.center/ru/docs/haproxy/load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/load-balancing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Этот документ знакомит с HAProxy тех, кто ещё не знает продукт, а также тех, кто знаком с его старыми версиями и хочет открыть его заново. Главная цель — предоставить все сведения, необходимые для решения, подходит ли HAProxy пользователю. Опытные пользователи могут найти здесь решения ранее возникших задач, о которых они не знали из-за незнакомства с новой функцией. Также приведены сведения для расчёта ресурсов, описан жизненный цикл продукта и даны сравнения с продуктами, чьи возможности частично пересекаются с HAProxy.&lt;/p&gt;</description></item><item><title>Загрузка и установка</title><link>https://pig.center/ru/docs/pgbadger/download/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/download/</guid><description>&lt;h2 id="distribution-channels"&gt;Выбор канала распространения&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Канал&lt;/th&gt;&#10; &lt;th scope="col"&gt;Для чего использовать&lt;/th&gt;&#10; &lt;th scope="col"&gt;Где находится&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Официальный выпуск&lt;/td&gt;&#10; &lt;td&gt;Архивы исходного кода и примечания к выпуску&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://github.com/darold/pgbadger/releases"&gt;Выпуски GitHub&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Пакет RPM&lt;/td&gt;&#10; &lt;td&gt;Дистрибутивы Linux на базе RPM&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://yum.postgresql.org/packages/"&gt;Репозиторий PostgreSQL Yum&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Пакет Debian/Ubuntu&lt;/td&gt;&#10; &lt;td&gt;Дистрибутивы Linux на базе APT&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://wiki.postgresql.org/wiki/Apt"&gt;Репозиторий PostgreSQL Apt&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Разрабатываемый исходный код&lt;/td&gt;&#10; &lt;td&gt;Текущий код, ещё не вошедший в выпуск&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://github.com/darold/pgbadger"&gt;darold/pgbadger&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Снимок документации на этом сайте основан на дереве исходного кода версии 13.2. Перед загрузкой всегда проверяйте страницу выпусков: локальный снимок намеренно зафиксирован, тогда как исходный проект продолжает выпускать новые версии.&lt;/p&gt;</description></item><item><title>Конфигурация: pgbouncer.ini</title><link>https://pig.center/ru/docs/pgbouncer/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/config/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="description"&gt;Описание&#10;&lt;/h2&gt;&#10;&lt;p&gt;Файл конфигурации имеет формат «ini». Имена секций заключаются между &lt;code&gt;[&lt;/code&gt; и &lt;code&gt;]&lt;/code&gt;.&#10;Строки, начинающиеся с &lt;code&gt;;&lt;/code&gt; или &lt;code&gt;#&lt;/code&gt;, считаются комментариями и игнорируются.&#10;Символы &lt;code&gt;;&lt;/code&gt; и &lt;code&gt;#&lt;/code&gt; не имеют специального значения в других позициях строки.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="generic-settings"&gt;Общие параметры&#10;&lt;/h2&gt;&#10;&lt;h3 id="logfile"&gt;logfile&#10;&lt;/h3&gt;&#10;&lt;p&gt;Задаёт файл журнала. Для демонизации (&lt;code&gt;-d&lt;/code&gt;) обязательно задать этот параметр или &lt;code&gt;syslog&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Файл журнала остаётся открытым, поэтому после ротации следует выполнить&#10;&lt;code&gt;kill -HUP&lt;/code&gt; или &lt;code&gt;RELOAD;&lt;/code&gt; в консоли. В Windows службу необходимо остановить и запустить.&lt;/p&gt;</description></item><item><title>Установка</title><link>https://pig.center/ru/docs/patroni/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/installation/</guid><description>&lt;p&gt;&lt;a id="installation"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="pre-requirements-for-mac-os"&gt;Предварительные требования для Mac OS&#10;&lt;/h2&gt;&#10;&lt;p&gt;Чтобы установить необходимые компоненты на Mac, выполните:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-ca25e05e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-ca25e05e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install postgresql etcd haproxy libyaml python&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&lt;a id="psycopg2_install_options"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="psycopg"&gt;Psycopg&#10;&lt;/h2&gt;&#10;&lt;p&gt;Начиная с &lt;a href="https://www.psycopg.org/articles/2019/04/04/psycopg-28-released/"&gt;psycopg2-2.8&lt;/a&gt;&#10; двоичная версия psycopg2 больше не устанавливается по умолчанию. Для установки из исходного кода необходим компилятор C и пакеты разработки postgres и python. Поскольку в экосистеме Python нельзя указать зависимость как &lt;code&gt;psycopg2 OR psycopg2-binary&lt;/code&gt;, способ установки нужно выбрать самостоятельно.&lt;/p&gt;</description></item><item><title>Примечания к выпускам pgBadger 11.x</title><link>https://pig.center/ru/docs/pgbadger/releases/11/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/releases/11/</guid><description>&lt;p&gt;Здесь полностью сохранена история изменений pgBadger 11.x из исходного проекта, от новых версий к старым.&lt;/p&gt;&#10;&lt;h2 id="v11-8"&gt;v11.8 · 2022-04-08&#10;&lt;/h2&gt;&#10;&lt;p&gt;Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили&#10;за предыдущие три месяца, и в особенности две ошибки обнаружения новых&#10;записей журнала в инкрементальном режиме.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Исправлено обнаружение новых записей журнала по отметке времени, когда&#10;в log_line_prefix использовались миллисекунды (%m) или эпоха (%n).&lt;/li&gt;&#10;&lt;li&gt;Исправлено обнаружение новых записей в локальном файле без использования&#10;многопроцессной обработки.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Полный список изменений и благодарностей:&lt;/p&gt;</description></item><item><title>Что такое HAProxy и как он работает</title><link>https://pig.center/ru/docs/haproxy/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Название «HAProxy» обозначает продукт, а «haproxy» —&#10;исполняемую программу, программный пакет или процесс. Однако оба варианта часто используются в обоих&#10;значениях и произносятся как H-A-Proxy. На раннем этапе «haproxy» расшифровывалось как «прокси высокой&#10;доступности», а название писалось в два отдельных слова, хотя сейчас оно означает только&#10;«HAProxy».&lt;/p&gt;&#10;&lt;h2 id="section-3-1"&gt;3.1. Чем является и чем не является HAProxy&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy — это:&lt;/p&gt;</description></item><item><title>Использование команды pgbouncer</title><link>https://pig.center/ru/docs/pgbouncer/usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/usage/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="synopsis"&gt;Синтаксис&#10;&lt;/h2&gt;&#10;&lt;pre&gt;&lt;code&gt;pgbouncer [-d][-R][-v][-u user] &amp;lt;pgbouncer.ini&amp;gt;&#10;pgbouncer -V|-h&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Параметры для Windows:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;pgbouncer.exe [-v][-u user] &amp;lt;pgbouncer.ini&amp;gt;&#10;pgbouncer.exe -V|-h&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Дополнительные параметры для настройки службы Windows:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;pgbouncer.exe --regservice &amp;lt;pgbouncer.ini&amp;gt;&#10;pgbouncer.exe --unregservice &amp;lt;pgbouncer.ini&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="description"&gt;Описание&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;PgBouncer&lt;/strong&gt; — менеджер пула соединений PostgreSQL. Любое клиентское приложение может&#10;подключаться к &lt;strong&gt;PgBouncer&lt;/strong&gt; как к серверу PostgreSQL, а &lt;strong&gt;PgBouncer&lt;/strong&gt; создаст&#10;соединение с настоящим сервером либо повторно использует одно из существующих&#10;соединений.&lt;/p&gt;</description></item><item><title>Справочник командной строки</title><link>https://pig.center/ru/docs/pgbadger/command-line/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/command-line/</guid><description>&lt;p&gt;На этой странице сохранён справочник команд, сгенерированный из зафиксированной версии исходного кода. Имена параметров и текст справки приведены дословно, чтобы их можно было непосредственно сопоставить с выводом &lt;code&gt;pgbadger --help&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="usage-and-options"&gt;Использование и параметры&#10;&lt;/h2&gt;&#10;&lt;p&gt;Использование: pgbadger [options] logfile [&amp;hellip;]&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-950fc7ff-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-950fc7ff-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PostgreSQL log analyzer with fully detailed reports and graphs.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Аргументы:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-950fc7ff-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-950fc7ff-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;logfile can be a single log file, a list of files, or a shell command&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;returning a list of files. If you want to pass log content from stdin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;use - as filename. Note that input from stdin will not work with csvlog.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Параметры:&lt;/p&gt;</description></item><item><title>Настройки конфигурации среды</title><link>https://pig.center/ru/docs/patroni/config/env/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/config/env/</guid><description>&lt;p&gt;&lt;a id="env"&gt;&lt;/a&gt;&#10;Возможно переопределить некоторые параметры конфигурации, определённые в файле конфигурации Patroni, с помощью переменных среды системы. В данном документе перечислены все переменные среды, обрабатываемые Patroni. Значения, установленные с помощью этих переменных, всегда имеют приоритет перед значениями, заданными в файле конфигурации Patroni.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="globaluniversal"&gt;Глобальный/Всемирный&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_CONFIGURATION&lt;/strong&gt;: конфигурацию Patroni целиком можно задать с помощью переменной среды &lt;a href="https://pig.center/ru/docs/patroni/config/#config"&gt;PATRONI_CONFIGURATION&lt;/a&gt;&#10;. В этом случае никакие другие переменные среды не будут учитываться!&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_THREAD_POOL_SIZE&lt;/strong&gt;: размер пула потоков, используемый Patroni для выполнения асинхронных задач и обмена данными по REST API с другими участниками во время выбора лидера или проверок в аварийном режиме. Минимальное значение — &lt;code&gt;5&lt;/code&gt;, значение по умолчанию — &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_THREAD_STACK_SIZE&lt;/strong&gt;: указывает размер стека, используемый для потоков, запускаемых Patroni. Значение должно быть выровнено по &lt;code&gt;64kB&lt;/code&gt;. Минимальное значение — &lt;code&gt;64kB&lt;/code&gt;, значение по умолчанию (устанавливается Patroni) — &lt;code&gt;512kB&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_NAME&lt;/strong&gt;: имя узла, на котором выполняется текущая инстанция Patroni. Должно быть уникальным для кластера. Значение &lt;code&gt;__patroni_strict_sync_replica_placeholder__&lt;/code&gt; зарезервировано для внутреннего использования Patroni и не может использоваться в качестве имени узла.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_NAMESPACE&lt;/strong&gt;: путь в хранилище конфигурации, где Patroni будет хранить информацию о кластере. Значение по умолчанию: &amp;ldquo;/service&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_SCOPE&lt;/strong&gt;: имя кластера&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PG_MALLOC_ARENA_MAX&lt;/strong&gt;: пользовательское значение переменной среды &lt;code&gt;MALLOC_ARENA_MAX&lt;/code&gt; для процесса &lt;code&gt;postmaster&lt;/code&gt;. Если не задано, &lt;code&gt;postmaster&lt;/code&gt; унаследует значение &lt;code&gt;MALLOC_ARENA_MAX&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="log"&gt;Журнал&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_TYPE&lt;/strong&gt;: задаёт формат логов. Может быть либо &lt;strong&gt;plain&lt;/strong&gt;, либо &lt;strong&gt;json&lt;/strong&gt;. Для использования формата &lt;strong&gt;json&lt;/strong&gt; необходимо установить &lt;a href="https://pig.center/ru/docs/patroni/installation/#extras"&gt;jsonlogger&lt;/a&gt;&#10;. Значение по умолчанию — &lt;strong&gt;plain&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_LEVEL&lt;/strong&gt;: задаёт уровень ведения журнала. Значение по умолчанию — &lt;strong&gt;INFO&lt;/strong&gt; (см. &lt;a href="https://docs.python.org/3.6/library/logging.html#levels"&gt;документацию по ведению журнала в Python&lt;/a&gt;&#10;)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_TRACEBACK_LEVEL&lt;/strong&gt;: задаёт уровень, на котором будут видны трассировки. Значение по умолчанию — &lt;strong&gt;ERROR&lt;/strong&gt;. Установите значение &lt;strong&gt;DEBUG&lt;/strong&gt;, если хотите видеть трассировки только при включении &lt;strong&gt;PATRONI_LOG_LEVEL=DEBUG&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_FORMAT&lt;/strong&gt;: задаёт строку форматирования журнала. Если тип журнала — &lt;strong&gt;plain&lt;/strong&gt;, формат журнала должен быть строкой. См. &lt;a href="https://docs.python.org/3.6/library/logging.html#logrecord-attributes"&gt;атрибуты LogRecord&lt;/a&gt;&#10; для получения списка доступных атрибутов. Если тип журнала — &lt;strong&gt;json&lt;/strong&gt;, формат журнала может быть списком, помимо строки. Каждый элемент списка должен соответствовать атрибуту LogRecord. Будьте осторожны: требуется только имя поля, а символы &lt;strong&gt;%(&lt;/strong&gt; и &lt;strong&gt;)&lt;/strong&gt; опускаются. Если необходимо вывести поле журнала с другим именем ключа, используйте словарь, где ключ словаря — это поле журнала, а значение — имя поля, которое должно быть выведено в журнале. Значение по умолчанию: &lt;strong&gt;%(asctime)s %(levelname)s: %(message)s&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_DATEFORMAT&lt;/strong&gt;: задаёт строку форматирования даты и времени. (см. документацию &lt;a href="https://docs.python.org/3.6/library/logging.html#logging.Formatter.formatTime"&gt;formatTime()&lt;/a&gt;&#10;)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_STATIC_FIELDS&lt;/strong&gt;: добавить дополнительные поля в лог. Этот параметр доступен только при установке типа лога в &lt;strong&gt;json&lt;/strong&gt;. Пример &lt;code&gt;PATRONI_LOG_STATIC_FIELDS=&amp;quot;{app: patroni}&amp;quot;&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_MAX_QUEUE_SIZE&lt;/strong&gt;: Patroni использует двухэтапное ведение журнала. Записи журнала записываются в очереди в оперативной памяти, а отдельный поток извлекает их из очереди и записывает в stderr или файл. Максимальный размер внутренней очереди по умолчанию ограничен &lt;strong&gt;1000&lt;/strong&gt; записями, что достаточно для хранения журналов за последние 1 час 20 минут.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_DIR&lt;/strong&gt;: Каталог для записи журналов приложения. Каталог должен существовать и быть доступен для записи пользователем, запускающим Patroni. Если задан этот параметр среды, приложение по умолчанию сохраняет журналы 4 25MB. Значения хранения можно настроить с помощью &lt;code&gt;PATRONI_LOG_FILE_NUM&lt;/code&gt; и &lt;code&gt;PATRONI_LOG_FILE_SIZE&lt;/code&gt; (см. ниже).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_MODE&lt;/strong&gt;: Разрешения для файлов журнала (например, &lt;code&gt;0644&lt;/code&gt;). Если не указано, разрешения будут установлены на основе текущего значения umask.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_FILE_NUM&lt;/strong&gt;: Количество журналов приложений, которые необходимо сохранить.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_FILE_SIZE&lt;/strong&gt;: Размер файла patroni.log (в байтах), при достижении которого происходит смена лог-файла.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_LOGGERS&lt;/strong&gt;: Переопределение уровня ведения журнала для каждого модуля Python. Пример &lt;code&gt;PATRONI_LOG_LOGGERS=&amp;quot;{patroni.postmaster: WARNING, urllib3: DEBUG}&amp;quot;&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS&lt;/strong&gt;: Если установлено в &lt;code&gt;true&lt;/code&gt;, последовательные журналы heartbeat, одинаковые по содержанию, не будут выводиться. Значение по умолчанию — &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Время выполнения цикла высокой доступности может быть очень полезной информацией при диагностике переключений при отказе из-за нехватки ресурсов и подобных проблем. Когда &lt;code&gt;PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS&lt;/code&gt; установлен в &lt;code&gt;true&lt;/code&gt;, журналы не будут содержать записи о выполнении цикла высокой доступности (если только не произойдёт смена лидера), и, таким образом, эта потенциально полезная информация станет недоступной в журналах.&lt;/p&gt;</description></item><item><title>Примечания к выпускам pgBadger 10.x</title><link>https://pig.center/ru/docs/pgbadger/releases/10/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/releases/10/</guid><description>&lt;p&gt;Здесь полностью сохранена история изменений pgBadger 10.x из исходного проекта, от новых версий к старым.&lt;/p&gt;&#10;&lt;h2 id="v10-3"&gt;v10.3 · 2019-02-14&#10;&lt;/h2&gt;&#10;&lt;p&gt;Это выпуск pgBadger с исправлениями нескольких проблем&#10;автоматического определения формата журнала и ещё одну ошибку разбора журнала&#10;pgBouncer, о которых сообщили пользователи. Также добавлена новая возможность:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;Параметр -o | --outfile теперь можно указывать несколько раз, чтобы одной&#10;командой вывести результат в нескольких форматах. Например:&#10; pgbadger -o out.html -o out.json /log/pgsql-11.log&#10;создаст два отчёта в форматах HTML и JSON и сохранит их в соответствующих&#10;файлах.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Также исправлены ошибки и улучшены возможности.&lt;/p&gt;</description></item><item><title>Patroni REST API</title><link>https://pig.center/ru/docs/patroni/rest_api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/rest_api/</guid><description>&lt;p&gt;&lt;a id="rest_api"&gt;&lt;/a&gt;&#10;Patroni предоставляет обширный REST API. Сам Patroni использует его во время выбора лидера, инструмент &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; — для аварийных и плановых переключений, повторной инициализации, перезапусков и перезагрузки конфигурации, а HAProxy и другие балансировщики — для проверок работоспособности HTTP. API также можно применять для мониторинга. Ниже перечислены конечные точки REST API Patroni.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="health-check-endpoints"&gt;Конечные точки проверки работоспособности&#10;&lt;/h2&gt;&#10;&lt;p&gt;На все запросы проверки &lt;code&gt;GET&lt;/code&gt; Patroni возвращает документ JSON с состоянием узла и код состояния HTTP. Если документ JSON не нужен, вместо &lt;code&gt;GET&lt;/code&gt; можно использовать метод &lt;code&gt;HEAD&lt;/code&gt; или &lt;code&gt;OPTIONS&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Базовые возможности</title><link>https://pig.center/ru/docs/haproxy/basic-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/basic-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;В этом разделе перечислены возможности HAProxy: одни обычно ожидаются от любого современного балансировщика нагрузки, другие непосредственно вытекают из архитектуры HAProxy. Более сложные возможности подробно рассматриваются в следующем разделе.&lt;/p&gt;&#10;&lt;h2 id="section-3-3-1"&gt;3.3.1. Базовые возможности: проксирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Проксирование — передача данных между клиентом и сервером по двум независимым соединениям. HAProxy поддерживает следующие базовые возможности проксирования и управления соединениями:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Предоставление серверу корректного соединения для защиты от любых ошибок или атак со стороны клиента.&lt;/p&gt;</description></item><item><title>Настройка журналирования PostgreSQL</title><link>https://pig.center/ru/docs/pgbadger/postgresql-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/postgresql-logging/</guid><description>&lt;p&gt;pgBadger может отобразить только те сведения, которые PostgreSQL записывает в журнал. Начните с префикса, пригодного для разбора, и продуманной политики журналирования операторов, а затем добавьте эксплуатационные события, которые требуется анализировать.&lt;/p&gt;&#10;&lt;h2 id="minimum-query-logging"&gt;Минимальное журналирование запросов&#10;&lt;/h2&gt;&#10;&lt;p&gt;Чтобы включить текст и длительность запросов, включите журналирование операторов по длительности:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-57fd1703-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="postgresql" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-57fd1703-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-postgresql" data-lang="postgresql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;log_min_duration_statement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Значение &lt;code&gt;0&lt;/code&gt; записывает каждый завершённый оператор. На загруженном сервере выберите более высокий порог в миллисекундах, чтобы контролировать объём журнала. Прежде чем включать низкий порог в производственной среде, измерьте накладные расходы и рост хранилища.&lt;/p&gt;</description></item><item><title>Компиляция и установка PgBouncer</title><link>https://pig.center/ru/docs/pgbouncer/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/install/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="building"&gt;Сборка&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для компиляции PgBouncer требуется несколько компонентов:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.gnu.org/software/make/"&gt;GNU Make&lt;/a&gt;&#10; 3.81+&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://libevent.org/"&gt;Libevent&lt;/a&gt;&#10; 2.0+&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.freedesktop.org/wiki/Software/pkg-config/"&gt;pkg-config&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt;&#10; 1.0.1+ для поддержки TLS&lt;/li&gt;&#10;&lt;li&gt;(необязательно) &lt;a href="http://c-ares.haxx.se/"&gt;c-ares&lt;/a&gt;&#10; как альтернатива evdns из Libevent&lt;/li&gt;&#10;&lt;li&gt;(необязательно) библиотеки LDAP&lt;/li&gt;&#10;&lt;li&gt;(необязательно) библиотеки PAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;После установки зависимостей выполните:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;$ ./configure --prefix=/usr/local&#10;$ make&#10;$ make install&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Для сборки из Git или под Windows используйте отдельные инструкции ниже.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="dns-lookup-support"&gt;Поддержка поиска DNS&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer разрешает имена узлов при установке соединения, а не только один раз&#10;при загрузке конфигурации. Для этого нужна асинхронная реализация DNS. В таблице&#10;перечислены поддерживаемые бэкенды в порядке их проверки:&lt;/p&gt;</description></item><item><title>Примечания к выпускам pgBadger 9.x</title><link>https://pig.center/ru/docs/pgbadger/releases/9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/releases/9/</guid><description>&lt;p&gt;Здесь полностью сохранена история изменений pgBadger 9.x из исходного проекта, от новых версий к старым.&lt;/p&gt;&#10;&lt;h2 id="v9-2"&gt;v9.2 · 2017-07-27&#10;&lt;/h2&gt;&#10;&lt;p&gt;Этот выпуск pgBadger с исправлениями добавляет несколько новых возможностей.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Добавлен отчёт о расстоянии и оценке контрольных точек.&lt;/li&gt;&#10;&lt;li&gt;В форматировщик кода SQL добавлена поддержка ключевых слов AWS Redshift.&lt;/li&gt;&#10;&lt;li&gt;В удалённый режим добавлено автоматическое определение формата журнала,&#10;позволяющее удалённо разбирать журнал pgbouncer вместе с журналом PostgreSQL.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Также исправлены ошибки и улучшены возможности.&lt;/p&gt;</description></item><item><title>patronictl</title><link>https://pig.center/ru/docs/patroni/patronictl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/patronictl/</guid><description>&lt;p&gt;&lt;a id="patronictl_version_description"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl_version_parameters"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl_version_examples"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl"&gt;&lt;/a&gt;&#10;Patroni предоставляет интерфейс командной строки &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10;, предназначенный главным образом для взаимодействия с REST API Patroni и DCS. Он упрощает операции с кластером и удобен как людям, так и сценариям.&lt;/p&gt;&#10;&lt;p&gt;&lt;a id="patronictl_configuration"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="configuration"&gt;Конфигурация&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; использует 3 раздела конфигурации:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ctl&lt;/strong&gt;: способ аутентификации в REST API Patroni и проверки подлинности сервера. Подробнее см. &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#patronictl_settings"&gt;параметры ctl&lt;/a&gt;&#10;;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;restapi&lt;/strong&gt;: способ аутентификации в REST API Patroni и проверки подлинности сервера. Используется, только если конфигурации &lt;code&gt;ctl&lt;/code&gt; недостаточно. &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; в основном использует раздел &lt;code&gt;restapi.authentication&lt;/code&gt;, если отсутствует &lt;code&gt;ctl.authentication&lt;/code&gt;, и параметр &lt;code&gt;restapi.cafile&lt;/code&gt;, если отсутствует &lt;code&gt;ctl.cacert&lt;/code&gt;. Подробнее см. &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#restapi_settings"&gt;параметры REST API&lt;/a&gt;&#10;;&lt;/li&gt;&#10;&lt;li&gt;DCS, например &lt;strong&gt;etcd&lt;/strong&gt;: способ подключения и аутентификации в DCS, используемом Patroni.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Эти параметры можно получить из переменных окружения или файла конфигурации. Способы их задания описаны в соответствующих разделах &lt;a href="https://pig.center/ru/docs/patroni/config/env/#env"&gt;Параметров конфигурации окружения&lt;/a&gt;&#10; и &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#yaml"&gt;Параметров конфигурации YAML&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Загрузка исходных выпусков</title><link>https://pig.center/ru/docs/pgbouncer/download/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/download/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-125"&gt;PgBouncer 1.25&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.2/pgbouncer-1.25.2.tar.gz"&gt;pgbouncer-1.25.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2026-05-08&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;865371 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.2/pgbouncer-1.25.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.1/pgbouncer-1.25.1.tar.gz"&gt;pgbouncer-1.25.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-12-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;864801 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.1/pgbouncer-1.25.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.0/pgbouncer-1.25.0.tar.gz"&gt;pgbouncer-1.25.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-11-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;863322 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.0/pgbouncer-1.25.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-124"&gt;PgBouncer 1.24&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.1/pgbouncer-1.24.1.tar.gz"&gt;pgbouncer-1.24.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-04-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;717796 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.1/pgbouncer-1.24.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.0/pgbouncer-1.24.0.tar.gz"&gt;pgbouncer-1.24.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-01-10&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;706573 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.0/pgbouncer-1.24.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-123"&gt;PgBouncer 1.23&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.1/pgbouncer-1.23.1.tar.gz"&gt;pgbouncer-1.23.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-08-02&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;700025 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.1/pgbouncer-1.23.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.0/pgbouncer-1.23.0.tar.gz"&gt;pgbouncer-1.23.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-07-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;694845 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.0/pgbouncer-1.23.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-122"&gt;PgBouncer 1.22&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.1/pgbouncer-1.22.1.tar.gz"&gt;pgbouncer-1.22.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-03-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;677351 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.1/pgbouncer-1.22.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.0/pgbouncer-1.22.0.tar.gz"&gt;pgbouncer-1.22.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-01-31&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;670589 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.0/pgbouncer-1.22.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-121"&gt;PgBouncer 1.21&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.21.0/pgbouncer-1.21.0.tar.gz"&gt;pgbouncer-1.21.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-10-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;668211 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.21.0/pgbouncer-1.21.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-120"&gt;PgBouncer 1.20&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz"&gt;pgbouncer-1.20.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-08-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;638844 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.0/pgbouncer-1.20.0.tar.gz"&gt;pgbouncer-1.20.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-07-20&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;638020 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.0/pgbouncer-1.20.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-119"&gt;PgBouncer 1.19&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.1/pgbouncer-1.19.1.tar.gz"&gt;pgbouncer-1.19.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-05-31&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;623569 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.1/pgbouncer-1.19.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.0/pgbouncer-1.19.0.tar.gz"&gt;pgbouncer-1.19.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-05-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;616947 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.0/pgbouncer-1.19.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-118"&gt;PgBouncer 1.18&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.18.0/pgbouncer-1.18.0.tar.gz"&gt;pgbouncer-1.18.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2022-12-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;600825 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.18.0/pgbouncer-1.18.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-117"&gt;PgBouncer 1.17&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.17.0/pgbouncer-1.17.0.tar.gz"&gt;pgbouncer-1.17.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2022-03-23&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;598294 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.17.0/pgbouncer-1.17.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-116"&gt;PgBouncer 1.16&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.1/pgbouncer-1.16.1.tar.gz"&gt;pgbouncer-1.16.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2021-11-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;591450 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.1/pgbouncer-1.16.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.0/pgbouncer-1.16.0.tar.gz"&gt;pgbouncer-1.16.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2021-08-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;592136 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.0/pgbouncer-1.16.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-115"&gt;PgBouncer 1.15&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.15.0/pgbouncer-1.15.0.tar.gz"&gt;pgbouncer-1.15.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-11-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;588042 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.15.0/pgbouncer-1.15.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-114"&gt;PgBouncer 1.14&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.14.0/pgbouncer-1.14.0.tar.gz"&gt;pgbouncer-1.14.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-06-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;578955 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.14.0/pgbouncer-1.14.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-113"&gt;PgBouncer 1.13&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.13.0/pgbouncer-1.13.0.tar.gz"&gt;pgbouncer-1.13.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-04-27&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;574955 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.13.0/pgbouncer-1.13.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-112"&gt;PgBouncer 1.12&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.12.0/pgbouncer-1.12.0.tar.gz"&gt;pgbouncer-1.12.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-10-17&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;567465 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.12.0/pgbouncer-1.12.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-111"&gt;PgBouncer 1.11&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.11.0/pgbouncer-1.11.0.tar.gz"&gt;pgbouncer-1.11.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-08-27&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;571414 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.11.0/pgbouncer-1.11.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-110"&gt;PgBouncer 1.10&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.10.0/pgbouncer-1.10.0.tar.gz"&gt;pgbouncer-1.10.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-07-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;480571 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.10.0/pgbouncer-1.10.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-19"&gt;PgBouncer 1.9&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.9.0/pgbouncer-1.9.0.tar.gz"&gt;pgbouncer-1.9.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2018-08-13&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;469300 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.9.0/pgbouncer-1.9.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-18"&gt;PgBouncer 1.8&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8.1/pgbouncer-1.8.1.tar.gz"&gt;pgbouncer-1.8.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2017-12-20&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;465930 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8.1/pgbouncer-1.8.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8/pgbouncer-1.8.tar.gz"&gt;pgbouncer-1.8.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2017-12-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;465612 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8/pgbouncer-1.8.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-17"&gt;PgBouncer 1.7&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.2/pgbouncer-1.7.2.tar.gz"&gt;pgbouncer-1.7.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2016-02-26&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;462374 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.2/pgbouncer-1.7.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.1/pgbouncer-1.7.1.tar.gz"&gt;pgbouncer-1.7.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2016-02-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;461903 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.1/pgbouncer-1.7.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7/pgbouncer-1.7.tar.gz"&gt;pgbouncer-1.7.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-12-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;459080 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7/pgbouncer-1.7.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-16"&gt;PgBouncer 1.6&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6.1/pgbouncer-1.6.1.tar.gz"&gt;pgbouncer-1.6.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-09-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;431076 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6.1/pgbouncer-1.6.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6/pgbouncer-1.6.tar.gz"&gt;pgbouncer-1.6.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-08-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;412700 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6/pgbouncer-1.6.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-15"&gt;PgBouncer 1.5&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.5/pgbouncer-1.5.5.tar.gz"&gt;pgbouncer-1.5.5.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-04-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;336145 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.5/pgbouncer-1.5.5.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.4/pgbouncer-1.5.4.tar.gz"&gt;pgbouncer-1.5.4.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-11-28&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;339610 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.4/pgbouncer-1.5.4.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.3/pgbouncer-1.5.3.tar.gz"&gt;pgbouncer-1.5.3.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-09-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;339013 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.3/pgbouncer-1.5.3.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.2/pgbouncer-1.5.2.tar.gz"&gt;pgbouncer-1.5.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-05-29&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;335338 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.2/pgbouncer-1.5.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.1/pgbouncer-1.5.1.tar.gz"&gt;pgbouncer-1.5.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-04-17&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;334413 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.1/pgbouncer-1.5.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5/pgbouncer-1.5.tar.gz"&gt;pgbouncer-1.5.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-01-05&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;411488 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5/pgbouncer-1.5.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-14"&gt;PgBouncer 1.4&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.2/pgbouncer-1.4.2.tgz"&gt;pgbouncer-1.4.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-06-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;283204 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.2/pgbouncer-1.4.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.1/pgbouncer-1.4.1.tgz"&gt;pgbouncer-1.4.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-04-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;282728 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.1/pgbouncer-1.4.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4/pgbouncer-1.4.tgz"&gt;pgbouncer-1.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-01-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;231691 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4/pgbouncer-1.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-13"&gt;PgBouncer 1.3&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.4/pgbouncer-1.3.4.tgz"&gt;pgbouncer-1.3.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-09-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;167957 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.4/pgbouncer-1.3.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.3/pgbouncer-1.3.3.tgz"&gt;pgbouncer-1.3.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-05-10&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;167476 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.3/pgbouncer-1.3.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.2/pgbouncer-1.3.2.tgz"&gt;pgbouncer-1.3.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-03-15&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;166756 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.2/pgbouncer-1.3.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.1/pgbouncer-1.3.1.tgz"&gt;pgbouncer-1.3.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2009-07-06&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;161518 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.1/pgbouncer-1.3.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3/pgbouncer-1.3.tgz"&gt;pgbouncer-1.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2009-02-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;160154 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3/pgbouncer-1.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-12"&gt;PgBouncer 1.2&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.3/pgbouncer-1.2.3.tgz"&gt;pgbouncer-1.2.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-08&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;145372 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.3/pgbouncer-1.2.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.2/pgbouncer-1.2.2.tgz"&gt;pgbouncer-1.2.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-06&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;145017 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.2/pgbouncer-1.2.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.1/pgbouncer-1.2.1.tgz"&gt;pgbouncer-1.2.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;144903 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.1/pgbouncer-1.2.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2/pgbouncer-1.2.tgz"&gt;pgbouncer-1.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-07-29&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;143915 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2/pgbouncer-1.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-11"&gt;PgBouncer 1.1&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: right"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.2/pgbouncer-1.1.2.tgz"&gt;pgbouncer-1.1.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-12-10&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;122054 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.2/pgbouncer-1.1.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.1/pgbouncer-1.1.1.tgz"&gt;pgbouncer-1.1.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-10-26&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;121042 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.1/pgbouncer-1.1.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1/pgbouncer-1.1.tgz"&gt;pgbouncer-1.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-10-09&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;120462 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1/pgbouncer-1.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-10"&gt;PgBouncer 1.0&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Файл&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Дата&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Размер&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.8/pgbouncer-1.0.8.tgz"&gt;pgbouncer-1.0.8.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-06-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;93636 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.8/pgbouncer-1.0.8.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.7/pgbouncer-1.0.7.tgz"&gt;pgbouncer-1.0.7.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;93086 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.7/pgbouncer-1.0.7.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.6/pgbouncer-1.0.6.tgz"&gt;pgbouncer-1.0.6.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;92244 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.6/pgbouncer-1.0.6.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.5/pgbouncer-1.0.5.tgz"&gt;pgbouncer-1.0.5.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91934 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.5/pgbouncer-1.0.5.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.4/pgbouncer-1.0.4.tgz"&gt;pgbouncer-1.0.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91889 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.4/pgbouncer-1.0.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.3/pgbouncer-1.0.3.tgz"&gt;pgbouncer-1.0.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91489 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.3/pgbouncer-1.0.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.2/pgbouncer-1.0.2.tgz"&gt;pgbouncer-1.0.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-28&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;90555 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.2/pgbouncer-1.0.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.1/pgbouncer-1.0.1.tgz"&gt;pgbouncer-1.0.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-15&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;89609 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.1/pgbouncer-1.0.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0/pgbouncer-1.0.tgz"&gt;pgbouncer-1.0.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-13&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;88587 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0/pgbouncer-1.0.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="binary-packages"&gt;Двоичные пакеты&#10;&lt;/h2&gt;&#10;&lt;p&gt;В различных дистрибутивах операционных систем имеются собственные пакеты или порты PgBouncer. Поэтому сначала следует проверить, доступен ли PgBouncer в вашей системе.&lt;/p&gt;</description></item><item><title>Параллельная обработка</title><link>https://pig.center/ru/docs/pgbadger/parallel-processing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/parallel-processing/</guid><description>&lt;p&gt;pgBadger поддерживает два взаимодополняющих режима многопроцессной обработки. Выбирайте режим по структуре входных данных, а не просто по числу процессоров.&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Параметр&lt;/th&gt;&#10; &lt;th scope="col"&gt;Единица параллельной обработки&lt;/th&gt;&#10; &lt;th scope="col"&gt;Лучше всего подходит для&lt;/th&gt;&#10; &lt;th scope="col"&gt;Основное ограничение&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-j N&lt;/code&gt; / &lt;code&gt;--jobs N&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;части одного файла журнала&lt;/td&gt;&#10; &lt;td&gt;один большой журнал с произвольным доступом&lt;/td&gt;&#10; &lt;td&gt;на границах частей небольшое число запросов может быть продублировано или пропущено&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-J N&lt;/code&gt; / &lt;code&gt;--Jobs N&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;целые файлы журналов&lt;/td&gt;&#10; &lt;td&gt;множество независимых журналов&lt;/td&gt;&#10; &lt;td&gt;полезно только при достаточном числе файлов для постоянной загрузки рабочих процессов&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="single-file-jobs"&gt;Разделение одного большого файла с &lt;code&gt;-j&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-54e4ce6a-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="console" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-54e4ce6a-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; pgbadger -j &lt;span class="m"&gt;8&lt;/span&gt; /var/log/postgresql/postgresql.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Алгоритм исходного проекта делит каждый файл на &lt;code&gt;N&lt;/code&gt; диапазонов байтов, создаёт по одному процессу синтаксического анализа на диапазон, записывает временную двоичную статистику, а затем объединяет её в итоговый отчёт.&lt;/p&gt;</description></item><item><title>Стандартные возможности</title><link>https://pig.center/ru/docs/haproxy/standard-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/standard-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;В этом разделе перечислены возможности, широко используемые в HAProxy, но не обязательно присутствующие в других балансировщиках нагрузки.&lt;/p&gt;&#10;&lt;h2 id="section-3-4-1"&gt;3.4.1. Стандартные возможности: извлечение и преобразование сведений&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy поддерживает получение сведений с помощью широкого набора функций извлечения образцов. Они извлекают отдельные сведения, называемые образцами, для немедленного использования. Это применяется для привязки сеансов, построения условий, вывода сведений в журналы или дополнения заголовков HTTP.&lt;/p&gt;</description></item><item><title>Инкрементальные отчёты</title><link>https://pig.center/ru/docs/pgbadger/incremental-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/incremental-reports/</guid><description>&lt;p&gt;Инкрементальный режим сохраняет разобранную статистику в двоичном виде, а затем строит по одному HTML-отчёту на день, накопительный отчёт на неделю и связывающий их календарный индекс. Он предназначен для регулярной обработки ротируемых журналов без повторного учёта одних и тех же записей.&lt;/p&gt;&#10;&lt;h2 id="daily-and-weekly"&gt;Создание ежедневных и еженедельных отчётов&#10;&lt;/h2&gt;&#10;&lt;p&gt;Запускайте pgBadger после ежедневной ротации журнала и укажите постоянный каталог вывода:&lt;/p&gt;&#10;&lt;div class="td-code td-code--titled" id="td-code-d8d574f7-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="cron" data-td-line-count="1" role="group" aria-labelledby="td-code-d8d574f7-fence-0-title"&gt;&#10; &lt;div class="td-code__header"&gt;&#10; &lt;span class="td-code__filename" id="td-code-d8d574f7-fence-0-title" title="crontab"&gt;crontab&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d8d574f7-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-cron" data-lang="cron"&gt;0 4 * * * /usr/bin/pgbadger -I -q /var/log/postgresql/postgresql.log.1 -O /var/www/pg_reports/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Параметр &lt;code&gt;-I&lt;/code&gt; включает инкрементальный режим, а &lt;code&gt;-O&lt;/code&gt; выбирает каталог для двоичного состояния, календарного индекса и сгенерированных отчётов. pgBadger самостоятельно ведёт инкрементальное состояние в этом каталоге, поэтому &lt;code&gt;--last-parsed&lt;/code&gt; не нужен, если только вы намеренно не хотите хранить файл состояния в другом месте.&lt;/p&gt;</description></item><item><title>Создание образов реплик и начальная инициализация</title><link>https://pig.center/ru/docs/patroni/replica_bootstrap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/replica_bootstrap/</guid><description>&lt;p&gt;&lt;a id="replica_imaging_and_bootstrap"&gt;&lt;/a&gt;&#10;Patroni позволяет настраивать создание новой реплики и определять действия при начальной инициализации нового пустого кластера. Различие строго определено: Patroni создаёт реплики, только если для кластера в DCS присутствует ключ &lt;code&gt;initialize&lt;/code&gt;. Если ключа &lt;code&gt;initialize&lt;/code&gt; нет, Patroni выполняет начальную инициализацию исключительно на первом узле, получившем блокировку ключа initialize.&lt;/p&gt;&#10;&lt;p&gt;&lt;a id="custom_bootstrap"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="bootstrap"&gt;Начальная инициализация&#10;&lt;/h2&gt;&#10;&lt;p&gt;PostgreSQL предоставляет команду &lt;code&gt;initdb&lt;/code&gt; для инициализации нового кластера, и Patroni вызывает её по умолчанию. В некоторых случаях, особенно при создании нового кластера как копии существующего, встроенный метод необходимо заменить пользовательскими действиями. Patroni поддерживает сценарии пользователя для начальной инициализации новых кластеров и передаёт им обязательные аргументы, например имя кластера и путь к каталогу данных. Это настраивается в разделе &lt;code&gt;bootstrap&lt;/code&gt; конфигурации Patroni. Например:&lt;/p&gt;</description></item><item><title>Расширенные возможности</title><link>https://pig.center/ru/docs/haproxy/advanced-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/advanced-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-3-5-1"&gt;3.5.1. Расширенные возможности: управление&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy спроектирован для исключительно стабильной работы и безопасного управления в обычной рабочей среде. Он поставляется одним исполняемым файлом и не требует процедуры установки. Несколько версий легко могут сосуществовать: экземпляры можно и рекомендуется обновлять постепенно, в порядке важности, вместо одновременного переноса всех экземпляров. Файлы конфигурации удобно хранить под контролем версий. Проверка конфигурации выполняется отдельно от работающей службы, поэтому не нужно перезапускать службу, рискуя получить сбой. При проверке могут обнаруживаться сложные ошибки (например, правило, скрывающее другое правило, или неработоспособная привязка сеансов); для их устранения выдаются подробные предупреждения и рекомендации. Обратная совместимость конфигурации охватывает очень давние версии: версия 1.5 полностью поддерживала конфигурации версии 1.1, написанные 13 лет назад, а в 1.6 прекращена поддержка лишь почти неиспользуемых устаревших директив, которые можно заменить другими средствами. Обновление конфигурации и программы происходит плавно и без прерывания обслуживания: старые и новые процессы могут сосуществовать в системе, каждый обрабатывая свои соединения. При запуске выводятся состояние системы, параметры сборки и сведения о совместимости библиотек.&lt;/p&gt;</description></item><item><title>Команда справки (help)</title><link>https://pig.center/ru/docs/pgbackrest/command/help/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbackrest/command/help/</guid><description>&lt;p&gt;Предоставляется три уровня справки. Если команда не указана, будет отображена общая справка. Если указана команда (e.g. &lt;code&gt;pgbackrest help backup&lt;/code&gt;), будет отображено полное описание команды вместе со списком допустимых параметров. Если указать параметр вместе с командой (e.g. &lt;code&gt;pgbackrest help backup type&lt;/code&gt;), будет отображено полное описание параметра применительно к команде.&lt;/p&gt;&#10;&lt;h2 id="command-options"&gt;Опции команды&#10;&lt;/h2&gt;&#10;&lt;h3 id="display-help-option---help"&gt;Показать сведения о параметре помощи (&lt;code&gt;--help&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;Показать справку.&lt;/p&gt;&#10;&lt;p&gt;Отображает справку даже если команда &lt;code&gt;help&lt;/code&gt; не указана и переопределяет опцию &lt;code&gt;--version&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Журнал изменений</title><link>https://pig.center/ru/docs/pgbouncer/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/changelog/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-125x"&gt;PgBouncer 1.25.x&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;2026-05-08 - PgBouncer 1.25.2 - «Человеческое прикосновение и новый поворот в полной неопределённости борьбе за титул»&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Безопасность&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Исправлена CVE-2026-6664: целочисленное переполнение в коде разбора сетевых&#10;пакетов в PgBouncer до 1.25.2 позволяло обойти проверку границ и могло&#10;привести к аварийному завершению. Неаутентифицированный удалённый злоумышленник&#10;мог вывести PgBouncer из строя некорректным пакетом аутентификации SCRAM.&lt;/li&gt;&#10;&lt;li&gt;Исправлена CVE-2026-6665: код SCRAM в PgBouncer до 1.25.2 неверно проверял&#10;возвращаемое значение &lt;code&gt;strlcat()&lt;/code&gt; при построении содержимого SCRAM&#10;client-final-message. Злонамеренный бэкенд, отправивший SCRAM&#10;server-final-message с длинным nonce, мог вызвать переполнение стека.&lt;/li&gt;&#10;&lt;li&gt;Исправлена CVE-2026-6666: возможное обращение по нулевому указателю в&#10;PgBouncer до 1.25.2 могло привести к аварийному завершению, если сервер&#10;отправлял ответ об ошибке без поля SQLSTATE.&lt;/li&gt;&#10;&lt;li&gt;Исправлена CVE-2026-6667: PgBouncer до 1.25.2 не выполнял надлежащую проверку&#10;авторизации для административной команды &lt;code&gt;KILL_CLIENT&lt;/code&gt;. Её могли выполнять&#10;все пользователи с доступом к административной консоли, хотя сама консоль&#10;требует авторизации. Команда должна быть разрешена только пользователям,&#10;перечисленным в параметре &lt;code&gt;admin_users&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Исправления&lt;/p&gt;</description></item><item><title>Расчёт ресурсов и производительность</title><link>https://pig.center/ru/docs/haproxy/sizing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/sizing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Типичные показатели использования CPU: в режиме TCP или HTTP с закрытием соединений на HAProxy приходится 15% времени обработки, а на ядро — 85%; в режиме постоянных соединений HTTP на HAProxy приходится около 30%, а на ядро — 70%. Это означает, что операционная система и её настройка сильно влияют на общую производительность.&lt;/p&gt;&#10;&lt;p&gt;Сценарии использования сильно различаются: одни пользователи ориентируются на пропускную способность, другие — на интенсивность запросов, число одновременных соединений или производительность SSL. В этом разделе приведены некоторые сведения, помогающие оценить необходимые ресурсы.&lt;/p&gt;</description></item><item><title>Режимы репликации</title><link>https://pig.center/ru/docs/patroni/replication_modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/replication_modes/</guid><description>&lt;p&gt;&lt;a id="replication_modes"&gt;&lt;/a&gt;&#10;Patroni использует потоковую репликацию PostgreSQL. Подробнее см. &lt;a href="http://www.postgresql.org/docs/current/static/warm-standby.html#STREAMING-REPLICATION"&gt;документацию Postgres&lt;/a&gt;&#10;. По умолчанию Patroni настраивает PostgreSQL на асинхронную репликацию. Выбор схемы репликации зависит от требований бизнеса. Изучите асинхронную и синхронную репликацию, а также другие решения HA, чтобы выбрать подходящий вариант.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="asynchronous-mode-durability"&gt;Долговечность в асинхронном режиме&#10;&lt;/h2&gt;&#10;&lt;p&gt;В асинхронном режиме ради доступности кластер может потерять часть зафиксированных транзакций. При отказе или недоступности первичного сервера Patroni автоматически повышает достаточно исправный резервный сервер до первичного. Транзакции, не реплицированные на этот резервный сервер, остаются в «ответвившейся временной шкале» первичного и фактически невосстановимы&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description></item><item><title>Форматы вывода</title><link>https://pig.center/ru/docs/pgbadger/output-formats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/output-formats/</guid><description>&lt;p&gt;pgBadger выбирает формат вывода по расширению имени файла либо по параметру &lt;code&gt;-x&lt;/code&gt; / &lt;code&gt;--extension&lt;/code&gt;. Укажите &lt;code&gt;-o&lt;/code&gt; / &lt;code&gt;--outfile&lt;/code&gt; несколько раз, чтобы создать несколько форматов из одного результата разбора.&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Формат&lt;/th&gt;&#10; &lt;th scope="col"&gt;Обычное расширение&lt;/th&gt;&#10; &lt;th scope="col"&gt;Оптимальное применение&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;HTML&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.html&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;интерактивный, удобный для чтения отчёт с диаграммами&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Текст&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.txt&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;просмотр в терминале и простое архивирование&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Двоичный&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.bin&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;объединяемая промежуточная статистика и пересборка отчётов&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;JSON&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.json&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;интеграция с другим ПО; требует &lt;code&gt;JSON::XS&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Необработанный CSV&lt;/td&gt;&#10; &lt;td&gt;выбранный файл вывода&lt;/td&gt;&#10; &lt;td&gt;построчное извлечение с &lt;code&gt;--dump-raw-csv&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="html-and-text"&gt;HTML и текст&#10;&lt;/h2&gt;&#10;&lt;p&gt;По умолчанию результат записывается в &lt;code&gt;out.html&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Выпуски, пакеты и обновления</title><link>https://pig.center/ru/docs/haproxy/releases-and-upgrades/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/releases-and-upgrades/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy — проект с открытым исходным кодом под лицензией GPLv2. Это означает, что его разрешено распространять при условии предоставления доступа к исходному коду по запросу, особенно если в него внесены изменения.&lt;/p&gt;&#10;&lt;p&gt;HAProxy развивается в основной ветке разработки «master» или «mainline», от которой создают новые ветки, когда код считается стабильным. Многие сайты добровольно используют ветки разработки в рабочей среде — чтобы участвовать в проекте или потому, что им нужна самая новая функция. Их обратная связь очень ценна для исправления ошибок и оценки общего качества и стабильности разрабатываемой версии.&lt;/p&gt;</description></item><item><title>Примеры отчётов</title><link>https://pig.center/ru/docs/pgbadger/sample-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/sample-reports/</guid><description>&lt;p&gt;Примеры были созданы pgBadger 11.8 в мае 2022 года. Исходные примеры хранятся на этом сайте, поэтому навигация, диаграммы, стили и сценарии отчётов доступны без обращения к серверу исходного проекта.&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Пример&lt;/th&gt;&#10; &lt;th scope="col"&gt;Что он демонстрирует&lt;/th&gt;&#10; &lt;th scope="col"&gt;Локальная копия&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Полный отчёт&lt;/td&gt;&#10; &lt;td&gt;Активность PostgreSQL вместе со статистикой PgBouncer&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/sample.html"&gt;Открыть полный отчёт&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Инкрементальный отчёт&lt;/td&gt;&#10; &lt;td&gt;Календарный индекс, еженедельное агрегирование и ежедневные страницы&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/report/index.html"&gt;Открыть индекс инкрементальных отчётов&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Ошибки и события&lt;/td&gt;&#10; &lt;td&gt;Отчёт, ограниченный ошибками и эксплуатационными событиями&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/errors.html"&gt;Открыть отчёт об ошибках&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="complete-report"&gt;Полный отчёт&#10;&lt;/h2&gt;&#10;&lt;p&gt;Полный отчёт — автономный HTML-документ. С помощью верхней панели навигации можно изучить общую статистику, запросы, сеансы, соединения, временные файлы, контрольные точки, активность autovacuum, блокировки и диаграммы, относящиеся к PgBouncer.&lt;/p&gt;</description></item><item><title>Резервный кластер</title><link>https://pig.center/ru/docs/patroni/standby_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/standby_cluster/</guid><description>&lt;p&gt;&lt;a id="standby_cluster"&gt;&lt;/a&gt;&#10;Patroni также поддерживает настройку каскадной репликации на удалённый центр обработки данных (регион) с использованием функции, называемой «резервный кластер». Такие кластеры обладают следующими характеристиками:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;«резервный лидер», который ведёт себя примерно как обычный лидер кластера, за исключением того, что реплицирует данные с удалённого узла.&lt;/li&gt;&#10;&lt;li&gt;каскадные реплики, которые реплицируют данные с резервного сервера.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Резервный сервер-лидер удерживает и обновляет блокировку лидера в DCS. Если блокировка лидера истекает, каскадные реплики выполнят голосование для выбора другого лидера из резервных серверов.&lt;/p&gt;</description></item><item><title>Сообщество</title><link>https://pig.center/ru/docs/pgbouncer/community/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/community/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="tutorials"&gt;Учебные материалы&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://get.enterprisedb.com/docs/Tutorial_All_PPSS_pgBouncer.pdf"&gt;Настройка PgBouncer для Postgres Plus Standard Server&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Хороший обзор основных понятий PgBouncer.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="http://www.depesz.com/2012/12/02/what-is-the-point-of-bouncing/"&gt;Зачем нужен PgBouncer?&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Рассматривает различия между режимами пула.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="support"&gt;Поддержка&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer"&gt;Страница проекта&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer/issues"&gt;Трекер задач&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/tagged/pgbouncer"&gt;Раздел PgBouncer&lt;/a&gt;&#10; на Stack Overflow&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer/discussions"&gt;Обсуждения сообщества&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Часто задаваемые вопросы</title><link>https://pig.center/ru/docs/pgbouncer/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/faq/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="how-to-connect-to-pgbouncer"&gt;Как подключиться к PgBouncer?&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer работает как сервер Postgres, поэтому достаточно направить клиент&#10;на порт PgBouncer.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="how-to-load-balance-queries-between-several-servers"&gt;Как распределять запросы между несколькими серверами?&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer не имеет встроенной конфигурации для нескольких узлов.&#10;Распределение можно реализовать внешними средствами:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Циклический перебор DNS. Укажите несколько IP-адресов для одного имени DNS.&#10;PgBouncer не выполняет поиск DNS при каждом новом соединении: он кэширует&#10;все IP-адреса и перебирает их циклически. Обратите внимание: если с одним&#10;именем связано более 8 IP-адресов, бэкенд DNS должен поддерживать протокол&#10;EDNS0. Подробности приведены в README.&lt;/p&gt;</description></item><item><title>Поддержка сторожевого таймера</title><link>https://pig.center/ru/docs/patroni/watchdog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/watchdog/</guid><description>&lt;p&gt;&lt;a id="watchdog"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Запуск нескольких серверов PostgreSQL в качестве первичных может привести к потере транзакций из-за расхождения временных шкал. Такая ситуация также называется проблемой расщепленного мозга. Чтобы избежать проблемы расщепленного мозга, Patroni должен обеспечить, чтобы PostgreSQL не принимал никаких подтверждений транзакций после истечения срока действия ключа лидера в DCS. В нормальных условиях Patroni пытается достичь этого, останавливая PostgreSQL при неудаче обновления блокировки лидера по любой причине. Однако это может не произойти по различным причинам:&lt;/p&gt;</description></item><item><title>Сопутствующие продукты и альтернативы</title><link>https://pig.center/ru/docs/haproxy/ecosystem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/ecosystem/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy хорошо сочетается с некоторыми перечисленными ниже продуктами. Поэтому они упомянуты здесь, хотя и не связаны непосредственно с HAProxy.&lt;/p&gt;&#10;&lt;h2 id="section-4-1"&gt;4.1. HTTP-сервер Apache&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache — фактический стандарт среди серверов HTTP. Это очень функциональный модульный проект, поддерживающий как выдачу файлов, так и динамическое содержимое. Он может служить фронтендом для серверов приложений, а также проксировать запросы и кешировать ответы. Во всех этих сценариях перед ним обычно требуется балансировщик нагрузки. Apache может работать в разных режимах, одни из которых требуют больше ресурсов, чем другие. Некоторые модули до сих пор требуют более тяжёлой модели с заранее созданными процессами, что мешает Apache эффективно работать с большим числом соединений. В таком случае HAProxy может значительно помочь: он ограничивает число соединений с каждым сервером безопасным значением, заметно ускоряя сервер и сохраняя его ресурсы для приложения.&lt;/p&gt;</description></item><item><title>Как настроить демонстрационный кластер etcd</title><link>https://pig.center/ru/docs/etcd/tasks/operator/how-to-setup-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/how-to-setup-cluster/</guid><description>&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/setup-cluster.gif" alt="01_etcd_clustering_2016050601" loading="lazy" decoding="async"&gt;&lt;p&gt;На каждом узле etcd укажите участников кластера:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-a9e2cb81-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="9"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-a9e2cb81-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;token-01&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;machine-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;machine-2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;machine-3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.17&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.18&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.19&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380,&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380,&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Выполните следующее на каждой машине:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-a9e2cb81-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="26"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-a9e2cb81-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For machine 1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For machine 2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For machine 3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Или воспользуйтесь общедоступной службой обнаружения:&lt;/p&gt;</description></item><item><title>Режим приостановки/возобновления для кластера</title><link>https://pig.center/ru/docs/patroni/pause/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/pause/</guid><description>&lt;p&gt;&lt;a id="pause"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="the-goal"&gt;Цель&#10;&lt;/h2&gt;&#10;&lt;p&gt;В некоторых случаях Patroni должен временно прекратить управление кластером, сохраняя при этом состояние кластера в DCS. Возможные сценарии использования — редкие операции с кластером, такие как обновление до новой версии или восстановление после повреждения. В ходе таких операций узлы часто запускаются и останавливаются по причинам, неизвестным Patroni, некоторые узлы могут даже временно повышаться до статуса первичного сервера, что нарушает предположение о наличии только одного первичного сервера. Поэтому Patroni должен уметь «отключаться» от работающего кластера, реализуя эквивалент режима обслуживания, как в Pacemaker.&lt;/p&gt;</description></item><item><title>Поддержка и участие в разработке</title><link>https://pig.center/ru/docs/pgbadger/support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/support/</guid><description>&lt;p&gt;pgBadger развивается как открытый проект. Сообщения об ошибках, предложения функций, исправления документации и патчи принимаются через репозиторий исходного проекта на GitHub.&lt;/p&gt;&#10;&lt;h2 id="bugs-and-features"&gt;Ошибки и запросы функций&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Обновитесь до самой новой выпущенной версии и убедитесь, что проблема сохраняется.&lt;/li&gt;&#10;&lt;li&gt;Поищите готовый ответ среди &lt;a href="https://github.com/darold/pgbadger/issues"&gt;открытых задач&lt;/a&gt;&#10; и &lt;a href="https://github.com/darold/pgbadger/issues?q=is%3Aissue&amp;#43;is%3Aclosed"&gt;закрытых задач&lt;/a&gt;&#10;.&lt;/li&gt;&#10;&lt;li&gt;Сведите проблему к минимальному безопасному фрагменту журнала и командной строке, на которых она всё ещё воспроизводится.&lt;/li&gt;&#10;&lt;li&gt;Удалите учётные данные, конфиденциальный SQL, значения параметров, имена узлов, адреса и деловые данные.&lt;/li&gt;&#10;&lt;li&gt;Создайте &lt;a href="https://github.com/darold/pgbadger/issues/new"&gt;новую задачу&lt;/a&gt;&#10;, указав версию pgBadger, операционную систему, формат ввода, точные параметры, наблюдаемый и ожидаемый результаты.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;При аварийном завершении или ошибке синтаксического анализатора приложите только минимальный очищенный набор строк журнала, необходимый для воспроизведения проблемной границы. Полный производственный журнал или сгенерированный отчёт почти никогда не следует публиковать в общедоступной задаче.&lt;/p&gt;</description></item><item><title>Документация и сообщество</title><link>https://pig.center/ru/docs/haproxy/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/resources/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-1"&gt;1. Доступная документация&#10;&lt;/h2&gt;&#10;&lt;p&gt;Полная документация HAProxy содержится в перечисленных ниже документах. Обращайтесь к соответствующей&#10;документации, чтобы сэкономить время и получить наиболее точный ответ на свой вопрос. Также&#10;воздержитесь от отправки в список рассылки вопросов, ответы на которые уже есть в этих&#10;документах.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://pig.center/ru/docs/haproxy/load-balancing/"&gt;&lt;code&gt;intro.txt&lt;/code&gt;&lt;/a&gt;&#10; (этот документ): здесь представлены основы балансировки нагрузки, HAProxy как продукт, его&#10;возможности и ограничения, известные подводные камни, которых следует избегать, некоторые ограничения конкретных ОС, способы получения,&#10;развитие проекта, способы убедиться, что используются все известные исправления, обновление, дополнения&#10;и альтернативы.&lt;/p&gt;</description></item><item><title>DCS Отказоустойчивый режим</title><link>https://pig.center/ru/docs/patroni/dcs_failsafe_mode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/dcs_failsafe_mode/</guid><description>&lt;p&gt;&lt;a id="dcs_failsafe_mode"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="the-problem"&gt;Проблема&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni активно использует распределённое хранилище конфигурации (DCS) для решения задачи выбора лидера и обнаружения сетевых разделений. Узел может запускать PostgreSQL как первичный сервер только в том случае, если ему удаётся обновить блокировку лидера в DCS. В случае неудачи обновления блокировки лидера PostgreSQL немедленно понижается до режима только для чтения. Вероятность возникновения «проблемы» зависит от используемого DCS. Например, при использовании etcd, который применяется исключительно для Patroni, вероятность близка к нулю, тогда как при использовании K8s API (основанного на etcd) такая ситуация может возникать чаще.&lt;/p&gt;</description></item><item><title>Лицензия и благодарности</title><link>https://pig.center/ru/docs/pgbadger/license/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbadger/license/</guid><description>&lt;p&gt;pgBadger — свободное программное обеспечение с открытым исходным кодом, распространяемое по лицензии PostgreSQL. Его можно бесплатно использовать, копировать, изменять и распространять при условии сохранения уведомлений об авторских правах и лицензии.&lt;/p&gt;&#10;&lt;h2 id="postgresql-license"&gt;Лицензия PostgreSQL&#10;&lt;/h2&gt;&#10;&lt;p&gt;Copyright (c) 2012-2026, Gilles Darold&lt;/p&gt;&#10;&lt;p&gt;Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.&lt;/p&gt;</description></item><item><title>Руководство по конфигурации</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>1. Краткое напоминание об HTTP</title><link>https://pig.center/ru/docs/haproxy/http-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/http-fundamentals/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Этот документ описывает язык конфигурации в реализации указанной выше версии. Он не содержит подсказок, примеров или рекомендаций. За такими сведениями обращайтесь к справочному руководству или руководству по архитектуре. Пронумерованные главы расположены в плоской боковой панели HAProxy для прямого перехода.&lt;/p&gt;&#10;&lt;p&gt;Когда HAProxy работает в режиме HTTP, и запрос, и ответ полностью анализируются и индексируются. Это позволяет строить критерии сопоставления практически по любым элементам содержимого.&lt;/p&gt;</description></item><item><title>Команда сервера (server)</title><link>https://pig.center/ru/docs/pgbackrest/command/server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbackrest/command/server/</guid><description>&lt;p&gt;Сервер pgBackRest позволяет осуществлять доступ с удалённых хостов без использования протокола SSH.&lt;/p&gt;&#10;&lt;h2 id="command-options"&gt;Опции команды&#10;&lt;/h2&gt;&#10;&lt;h3 id="tls-server-address-option---tls-server-address"&gt;TLS Параметр адреса сервера (&lt;code&gt;--tls-server-address&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;Адрес сервера TLS.&lt;/p&gt;&#10;&lt;p&gt;IP-адрес, на котором сервер будет слушать запросы клиентов.&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-c626d97e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c626d97e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;localhost&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;tls-server-address=*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="tls-server-authorized-clients-option---tls-server-auth"&gt;TLS Параметр авторизованных клиентов сервера (&lt;code&gt;--tls-server-auth&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;TLS сервер авторизованных клиентов.&lt;/p&gt;&#10;&lt;p&gt;Клиенты авторизуются на сервере путём проверки их сертификата и проверки соответствия имени субъекта (CN) сертификата списку на сервере, настроенного с помощью опции &lt;code&gt;tls-server-auth&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Использование Patroni с Kubernetes</title><link>https://pig.center/ru/docs/patroni/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/kubernetes/</guid><description>&lt;p&gt;&lt;a id="kubernetes"&gt;&lt;/a&gt;&#10;Patroni может использовать объекты Kubernetes для хранения состояния кластера и управления ключом лидера. Это позволяет работать с Postgres в среде Kubernetes без дополнительного хранилища согласованности, то есть не требуется запуск отдельного развёртывания etcd. Patroni может использовать два различных типа объектов Kubernetes для хранения ключей лидера и конфигурации, которые настраиваются с помощью переменной среды &lt;code&gt;kubernetes.use_endpoints&lt;/code&gt; или &lt;code&gt;PATRONI_KUBERNETES_USE_ENDPOINTS&lt;/code&gt;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="use-endpoints"&gt;Используйте конечные точки&#10;&lt;/h2&gt;&#10;&lt;p&gt;Несмотря на то что этот режим рекомендуется, по соображениям совместимости он отключён по умолчанию. Когда он включён, Patroni хранит конфигурацию кластера и ключ лидера в полях &lt;code&gt;metadata: annotations&lt;/code&gt; соответствующих &lt;code&gt;Endpoints&lt;/code&gt;, которые он создаёт. Смена лидера безопаснее, чем при использовании &lt;code&gt;ConfigMaps&lt;/code&gt;, поскольку одновременно обновляются и аннотации, содержащие информацию о лидере, и фактические адреса, указывающие на запущенный под-лидер.&lt;/p&gt;</description></item><item><title>2. Настройка HAProxy</title><link>https://pig.center/ru/docs/haproxy/configuration-basics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/configuration-basics/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-2-1"&gt;2.1. Формат файла конфигурации&#10;&lt;/h2&gt;&#10;&lt;p&gt;Процесс конфигурации HAProxy включает 3 основных источников параметров:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;аргументы из командной строки, которые всегда имеют приоритет&lt;/li&gt;&#10;&lt;li&gt;конфигурационный файл, формат которого описан здесь&lt;/li&gt;&#10;&lt;li&gt;окружение запущенного процесса, в случае если явно указаны переменные среды&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Конфигурационный файл следует довольно простому иерархическому формату, который соблюдает несколько базовых правил:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-d8d31afc-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="19"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d8d31afc-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. a configuration file is an ordered sequence of statements&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. a statement is a single non-empty line before any unprotected &amp;#34;#&amp;#34; (hash)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. a line is a series of tokens or &amp;#34;words&amp;#34; delimited by unprotected spaces or&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tab characters&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. the first word or sequence of words of a line is one of the keywords or&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keyword sequences listed in this document&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. all other words are all arguments of the first one, some being well-known&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keywords listed in this document, others being values, references to other&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parts of the configuration, or expressions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. certain keywords delimit a section inside which only a subset of keywords&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; are supported&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. a section ends at the end of a file or on a special keyword starting a new&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; section&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Это всё, что нужно знать, чтобы написать простой, но надёжный генератор конфигурации, но это недостаточно для надёжного парсинга любой конфигурации и для определения того, как обрабатывать определённые крайние случаи.&lt;/p&gt;</description></item><item><title>Команда проверки доступности сервера (server-ping)</title><link>https://pig.center/ru/docs/pgbackrest/command/server-ping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbackrest/command/server-ping/</guid><description>&lt;p&gt;Проверьте доступность сервера pgBackRest TLS с помощью ping, чтобы убедиться, что он принимает соединения. Это служит проверкой работоспособности, так как аутентификация не выполняется.&lt;/p&gt;&#10;&lt;p&gt;Если на командной строке не указан хост, будет использован параметр &lt;code&gt;tls-server-host&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="command-options"&gt;Опции команды&#10;&lt;/h2&gt;&#10;&lt;h3 id="tls-server-address-option---tls-server-address"&gt;TLS Параметр адреса сервера (&lt;code&gt;--tls-server-address&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;Адрес сервера TLS.&lt;/p&gt;&#10;&lt;p&gt;IP-адрес, на котором сервер будет слушать запросы клиентов.&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-4df31a76-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-4df31a76-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;localhost&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;tls-server-address=*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="tls-server-port-option---tls-server-port"&gt;Параметр порта сервера TLS (&lt;code&gt;--tls-server-port&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;Порт сервера TLS.&lt;/p&gt;</description></item><item><title>Поддержка Citus</title><link>https://pig.center/ru/docs/patroni/citus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/citus/</guid><description>&lt;p&gt;&lt;a id="citus"&gt;&lt;/a&gt;&#10;Patroni делает развертывание кластеров &lt;a href="https://docs.citusdata.com/en/stable/installation/multi_node.html"&gt;Multi-Node Citus&lt;/a&gt;&#10; чрезвычайно простым.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tldr"&gt;TL;DR&#10;&lt;/h2&gt;&#10;&lt;p&gt;Существует лишь несколько простых правил, которым необходимо следовать:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Расширение базы данных &lt;a href="https://github.com/citusdata/citus"&gt;Citus&lt;/a&gt;&#10; для PostgreSQL должно быть доступно на всех узлах. Абсолютно минимальная поддерживаемая версия Citus — 10.0, но для использования всех преимуществ прозрачных плановых переключений и перезапусков рабочих узлов рекомендуется как минимум Citus 11.2.&lt;/li&gt;&#10;&lt;li&gt;Имя кластера (&lt;code&gt;scope&lt;/code&gt;) должно быть одинаковым для всех узлов Citus!&lt;/li&gt;&#10;&lt;li&gt;Учётные данные суперпользователя должны быть одинаковыми на координаторе и всех рабочих узлах, а &lt;code&gt;pg_hba.conf&lt;/code&gt; должен разрешать доступ суперпользователя между всеми узлами.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#restapi_settings"&gt;REST API&lt;/a&gt;&#10; доступ должен быть разрешён с узлов-работников к координатору. E.g, учётные данные должны быть одинаковыми, и, если настроены, клиентские сертификаты с узлов-работников должны быть приняты координатором.&lt;/li&gt;&#10;&lt;li&gt;Добавьте следующий раздел в &lt;code&gt;patroni.yaml&lt;/code&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-49f24e01-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-49f24e01-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;citus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;X &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 0 for coordinator and 1, 2, 3, etc for workers&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# must be the same on all nodes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;После этого вам нужно просто запустить Patroni, и он сам займётся остальным:&lt;/p&gt;</description></item><item><title>Преобразование отдельного экземпляра в кластер Patroni</title><link>https://pig.center/ru/docs/patroni/existing_data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/existing_data/</guid><description>&lt;p&gt;&lt;a id="existing_data"&gt;&lt;/a&gt;&#10;В этом разделе описано преобразование отдельного экземпляра PostgreSQL в кластер Patroni.&lt;/p&gt;&#10;&lt;p&gt;Чтобы развернуть кластер Patroni без существующего экземпляра PostgreSQL, обратитесь к разделу &lt;a href="https://pig.center/ru/docs/patroni/readme/#running_configuring"&gt;Запуск и настройка&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="procedure"&gt;Процедура&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ниже приведён обзор преобразования существующего кластера Postgres в кластер под управлением Patroni. Предполагается, что все узлы существующего кластера работают и во время миграции вы &lt;em&gt;не намерены&lt;/em&gt; менять конфигурацию Postgres. Выполните следующие действия:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Создайте пользователей Postgres, как описано в разделе &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#postgresql_settings"&gt;аутентификации&lt;/a&gt;&#10; конфигурации Patroni. В блоке SQL ниже приведены примеры команд; замените имена пользователей и пароли в соответствии со своим окружением. Если необходимые пользователи уже существуют, пропустите этот шаг.&lt;/p&gt;</description></item><item><title>Интеграция с другими инструментами</title><link>https://pig.center/ru/docs/patroni/tools_integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/tools_integration/</guid><description>&lt;p&gt;&lt;a id="tools_integration"&gt;&lt;/a&gt;&#10;Patroni способен интегрироваться с другими инструментами в вашем стеке. В этом разделе вы найдете список примеров, которые, хотя и не являются исчерпывающими, могут дать вам идеи о том, как Patroni может интегрироваться с другими инструментами.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="barman"&gt;Barman&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni предоставляет приложение с именем &lt;code&gt;patroni_barman&lt;/code&gt;, в котором реализована логика взаимодействия с &lt;code&gt;pg-backup-api&lt;/code&gt;, что позволяет выполнять операции Barman удалённо.&lt;/p&gt;&#10;&lt;p&gt;У данного приложения в настоящее время имеется несколько подкоманд: &lt;code&gt;recover&lt;/code&gt; и &lt;code&gt;config-switch&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>5. Параметры bind и server</title><link>https://pig.center/ru/docs/haproxy/bind-and-server-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/bind-and-server-options/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Ключи &amp;ldquo;bind&amp;rdquo;, &amp;ldquo;server&amp;rdquo; и &amp;ldquo;default-server&amp;rdquo; поддерживают ряд настроек, зависящих от некоторых опций сборки и от системы, на которой был собран HAProxy. Эти настройки в целом состоят из одного слова, иногда сопровождаемого значением, записанным на той же строке, что и строка &amp;ldquo;bind&amp;rdquo; или &amp;ldquo;server&amp;rdquo;. Все эти опции описаны в этой секции.&lt;/p&gt;&#10;&lt;h2 id="section-5-1"&gt;5.1. Параметры bind&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ключ &amp;ldquo;bind&amp;rdquo; поддерживает определённое количество настроек, которые передаются как аргументы на той же строке. Порядок, в котором эти аргументы приводятся, не имеет значения, при условии, что они находятся после адреса привязки. Все эти параметры являются необязательными. Некоторые из них состоят из одного слова (логические значения), в то время как другие ожидает значение после них. В этом случае значение должно быть указано немедленно после имени настройки.&lt;/p&gt;</description></item><item><title>Аспекты безопасности</title><link>https://pig.center/ru/docs/patroni/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/security/</guid><description>&lt;p&gt;&lt;a id="security"&gt;&lt;/a&gt;&#10;Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: хранилище распределённой конфигурации (DCS) и REST API Patroni (REST) (API).&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="protecting-dcs"&gt;Защита DCS&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni и &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; хранят и извлекают данные из DCS.&lt;/p&gt;&#10;&lt;p&gt;Несмотря на то что DCS не содержит никакой конфиденциальной информации, он позволяет изменять часть конфигурации Patroni/Postgres. Поэтому первым делом необходимо защитить DCS.&lt;/p&gt;&#10;&lt;p&gt;Детали защиты зависят от типа DCS, используемого в системе. Параметры аутентификации и шифрования (токены/базовая аутентификация/сертификаты клиента) для поддерживаемых типов DCS описаны в &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#yaml"&gt;настройки&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>6. Кеш</title><link>https://pig.center/ru/docs/haproxy/cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/cache/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy предоставляет кеш, предназначенный для небольших объектов (favicon, css и т. п.). Это минималистичный кеш в оперативной памяти, не требующий сложного обслуживания.&lt;/p&gt;&#10;&lt;p&gt;Кеш использует общую для всех потоков область памяти, разделённую на блоки по 1kB.&lt;/p&gt;&#10;&lt;p&gt;Если объект больше не используется, его можно удалить, чтобы сохранить новый объект, независимо от срока его действия. При выделении места для нового объекта сначала удаляются самые старые объекты.&lt;/p&gt;</description></item><item><title>HA-кластер с несколькими центрами обработки данных</title><link>https://pig.center/ru/docs/patroni/ha_multi_dc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/ha_multi_dc/</guid><description>&lt;p&gt;&lt;a id="ha_multi_dc"&gt;&lt;/a&gt;&#10;Высокая доступность кластера PostgreSQL, развернутого в нескольких центрах обработки данных, основана на репликации, которая может быть синхронной или асинхронной (см. &lt;a href="https://pig.center/ru/docs/patroni/replication_modes/#replication_modes"&gt;режимы репликации&lt;/a&gt;&#10;).&lt;/p&gt;&#10;&lt;p&gt;В обоих случаях важно четко понимать следующие понятия:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PostgreSQL может работать в качестве первичного сервера или резервного сервера-лидера только тогда, когда он владеет ключом лидера и может обновлять этот ключ.&lt;/li&gt;&#10;&lt;li&gt;Рекомендуется запускать нечётное количество узлов etcd, ZooKeeper или Consul: 3 или 5!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="synchronous-replication"&gt;Синхронная репликация&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для создания кластера с несколькими ЦО, способного автоматически переживать отказ зоны, требуется как минимум 3.&lt;/p&gt;</description></item><item><title>Часто задаваемые вопросы</title><link>https://pig.center/ru/docs/patroni/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/faq/</guid><description>&lt;p&gt;&lt;a id="faq"&gt;&lt;/a&gt;&#10;В этом разделе приведены ответы на самые частые вопросы о Patroni. Каждый подраздел посвящён отдельной категории вопросов.&lt;/p&gt;&#10;&lt;p&gt;Надеемся, это прояснит большинство вопросов. Если сомнения остаются или возникла неожиданная проблема, инструкции по получению помощи и сообщению об ошибке приведены в разделах &lt;a href="https://pig.center/ru/docs/patroni/contributing_guidelines/#chatting"&gt;общение&lt;/a&gt;&#10; и &lt;a href="https://pig.center/ru/docs/patroni/contributing_guidelines/#reporting_bugs"&gt;сообщение об ошибках&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="comparison-with-other-ha-solutions"&gt;Сравнение с другими решениями HA&#10;&lt;/h2&gt;&#10;&lt;p&gt;Почему Patroni требует отдельный кластер узлов DCS, а другие решения наподобие &lt;code&gt;repmgr&lt;/code&gt; — нет?&lt;br&gt;&#10;Решения HA можно реализовать разными способами, каждый со своими преимуществами и недостатками.&lt;/p&gt;</description></item><item><title>Примечания к выпускам</title><link>https://pig.center/ru/docs/patroni/releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/releases/</guid><description>&lt;p&gt;&lt;a id="releases"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="version-415"&gt;Версия 4.1.5&#10;&lt;/h2&gt;&#10;&lt;p&gt;Выпущено 2026-08-12&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Улучшения совместимости&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Совместимость с PostgreSQL 14.24, 15.19, 16.15, 17.11, 18.6 (Alexander Kukushkin)&lt;/p&gt;&#10;&lt;p&gt;Добавьте новый &lt;code&gt;output_plugin_libraries&lt;/code&gt; GUC, который ограничивает вывод плагинов логического декодирования.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Улучшения&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Записывать REST предупреждения о сбросе API соединений в &lt;code&gt;DEBUG&lt;/code&gt; вместо &lt;code&gt;WARNING&lt;/code&gt; (Kyle McLaren)&lt;/p&gt;&#10;&lt;p&gt;Убедитесь, что распространенные варианты &amp;ldquo;клиент неожиданно завершил операцию записи&amp;rdquo; не влияют на обработку реальных (не связанных с соединением) ошибок.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Исправления ошибок&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Исправить выравнивание при проверке &lt;code&gt;thread_stack_size&lt;/code&gt; (Sundong Kim)&lt;/p&gt;</description></item><item><title>9. Поддерживаемые фильтры</title><link>https://pig.center/ru/docs/haproxy/filters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/filters/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Ниже перечислены официально поддерживаемые фильтры и принимаемые ими параметры. В зависимости от параметров сборки некоторые фильтры могут быть недоступны. Список доступных фильтров выводится командой haproxy -vv.&lt;/p&gt;&#10;&lt;p&gt;См. также: «filter».&lt;/p&gt;&#10;&lt;h2 id="section-9-1"&gt;9.1. Трассировка&#10;&lt;/h2&gt;&#10;&lt;p&gt;filter trace [name &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;] [random-forwarding] [max-fwd &lt;code&gt;&amp;lt;max&amp;gt;&lt;/code&gt;] [hexdump]&lt;/p&gt;&#10;&lt;p&gt;Аргументы:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-ee81df02-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="16"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-ee81df02-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;name&amp;gt; is an arbitrary name that will be reported in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; messages. If no name is provided, &amp;#34;TRACE&amp;#34; is used.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;quiet&amp;gt; inhibits trace messages.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;random-forwarding&amp;gt; enables the random forwarding of parsed data. By&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default, this filter forwards all previously parsed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data. With this parameter, it only forwards a random&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; amount of the parsed data.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;max&amp;gt; is the maximum amount of data that can be forwarded at&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a time. &amp;#34;max-fwd&amp;#34; option can be combined with the&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; random forwarding. &amp;lt;max&amp;gt; must be an positive integer.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0 means there is no limit.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;hexdump&amp;gt; dumps all forwarded data to the server and the client.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Этот фильтр можно использовать как основу для разработки новых фильтров. Он определяет все обратные вызовы и для каждого из них выводит в стандартный поток ошибок (stderr) сообщение с полезными сведениями. Это может пригодиться для отладки работы других фильтров или самого HAProxy.&lt;/p&gt;</description></item><item><title>Команда версии (version)</title><link>https://pig.center/ru/docs/pgbackrest/command/version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbackrest/command/version/</guid><description>&lt;p&gt;Отображает установленную версию pgBackRest.&lt;/p&gt;&#10;&lt;h2 id="command-options"&gt;Опции команды&#10;&lt;/h2&gt;&#10;&lt;h3 id="output-option---output"&gt;Параметр вывода (&lt;code&gt;--output&lt;/code&gt;)&#10;&lt;/h3&gt;&#10;&lt;p&gt;Тип вывода.&lt;/p&gt;&#10;&lt;p&gt;Поддерживаются следующие типы вывода:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;text&lt;/code&gt; — Отображает установленную версию pgBackRest в виде текста.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;num&lt;/code&gt; — Отображает установленную версию pgBackRest в виде целого числа.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-5204a708-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-5204a708-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;text&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;output=num&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Рекомендации по участию в разработке</title><link>https://pig.center/ru/docs/patroni/contributing_guidelines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/contributing_guidelines/</guid><description>&lt;p&gt;&lt;a id="contributing_guidelines"&gt;&lt;/a&gt;&#10;&lt;a id="chatting"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="chatting"&gt;Общение&#10;&lt;/h2&gt;&#10;&lt;p&gt;Если у вас есть вопрос, нужна интерактивная помощь в устранении неполадок или хочется пообщаться с другими пользователями Patroni, присоединяйтесь к каналу &lt;a href="https://postgresteam.slack.com/archives/C9XPYG92A"&gt;#patroni&lt;/a&gt;&#10; в &lt;a href="https://pgtreats.info/slack-invite"&gt;PostgreSQL Slack&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;&lt;a id="reporting_bugs"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="reporting-bugs"&gt;Сообщение об ошибках&#10;&lt;/h2&gt;&#10;&lt;p&gt;Перед сообщением об ошибке обязательно &lt;strong&gt;воспроизведите её в последней версии Patroni&lt;/strong&gt;. Также проверьте, не зарегистрирована ли проблема в нашем &lt;a href="https://github.com/patroni/patroni/issues"&gt;трекере&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="running-tests"&gt;Запуск тестов&#10;&lt;/h2&gt;&#10;&lt;p&gt;Требования для запуска тестов behave:&lt;/p&gt;</description></item><item><title>Чтение из etcd</title><link>https://pig.center/ru/docs/etcd/tasks/developer/reading-from-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/reading-from-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="procedure"&gt;Процедура&#10;&lt;/h2&gt;&#10;&lt;p&gt;Используйте подкоманду &lt;code&gt;get&lt;/code&gt; для чтения из etcd:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-03b923cc-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-03b923cc-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello World!&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;где:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; — запрашиваемый ключ&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Hello World!&lt;/code&gt; — полученное значение&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Или для форматированного вывода:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-03b923cc-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-03b923cc-fence-1-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;$ etcdctl --endpoints=$ENDPOINTS --write-out=&amp;#34;json&amp;#34; get foo&#10;{&amp;#34;header&amp;#34;:{&amp;#34;cluster_id&amp;#34;:289318470931837780,&amp;#34;member_id&amp;#34;:14947050114012957595,&amp;#34;revision&amp;#34;:3,&amp;#34;raft_term&amp;#34;:4,&#10;&amp;#34;kvs&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;Zm9v&amp;#34;,&amp;#34;create_revision&amp;#34;:2,&amp;#34;mod_revision&amp;#34;:3,&amp;#34;version&amp;#34;:2,&amp;#34;value&amp;#34;:&amp;#34;SGVsbG8gV29ybGQh&amp;#34;}]}}&#10;$&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;где &lt;code&gt;write-out=&amp;quot;json&amp;quot;&lt;/code&gt; заставляет выводить значение в формате JSON (обратите внимание, ключ не возвращается).&lt;/p&gt;</description></item><item><title>10. Приложения FastCGI</title><link>https://pig.center/ru/docs/haproxy/fastcgi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/fastcgi/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy может отправлять запросы HTTP приложениям FastCGI с ролью Responder. Эта возможность добавлена в HAProxy 2.1. Для её использования серверы необходимо настроить на протокол FastCGI (с помощью «proto fcgi» в строке server), а в управляющем ими бэкенде нужно настроить и подключить приложение FastCGI (с помощью «use-fcgi-app» в секции прокси). Можно определить несколько приложений FastCGI, но бэкенд одновременно может использовать только одно из них.&lt;/p&gt;</description></item><item><title>11. Таблицы привязок и одноранговые узлы</title><link>https://pig.center/ru/docs/haproxy/stick-tables-and-peers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/stick-tables-and-peers/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Таблицы привязок в HAProxy — это механизм, позволяющий ассоциировать определённое количество информации и метрик с ключом определённого типа на определённый срок после последнего обновления. Это можно рассматривать как строку в таблице с несколькими столбцами, где номер строки определяется значением ключа, а столбцы представляют отдельные критерии.&lt;/p&gt;&#10;&lt;p&gt;Таблицы привязок изначально были спроектированы для хранения информации о привязке сеанса между клиентом и сервером с целью поддержания постоянных сессий между этими сущностями. Клиент подключается или отправляет запрос, клиент идентифицируется с помощью дискриминатора (источний адрес, кука, URL параметр), и выбранный сервер сохраняется в ассоциации с этим дискриминатором в таблице привязок на заданное время, чтобы последующие запросы от того же клиента автоматически направлялись на тот же сервер, где клиент создавал свою сессию приложения.&lt;/p&gt;</description></item><item><title>12. Другие секции</title><link>https://pig.center/ru/docs/haproxy/other-sections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/other-sections/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Секции, описанные ниже, реже используются и обычно поддерживают лишь несколько параметров. Между ними нет неявной связи. Они все начинаются с одного ключевого слова. Ни одна из них не допускается до секции &amp;ldquo;global&amp;rdquo;. Поддержка некоторых из них может зависеть от опций сборки (например, что касается SSL).&lt;/p&gt;&#10;&lt;h2 id="section-12-1"&gt;12.1. Трассировка&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для отладки можно включить трассировку подсистемы HAProxy. При этом выводятся отладочные сообщения об определённой подсистеме. Это мощное средство диагностики проблем. Трассировку можно динамически настраивать через CLI. Некоторые параметры также можно заранее задать в файле конфигурации, в отдельных секциях &amp;ldquo;traces&amp;rdquo;. Подробнее о трассировке см. руководство по управлению. Это инструмент разработчика для сложных сеансов отладки. Он выводит много сообщений и требует дополнительных ресурсов, поэтому используйте его осторожно. Поскольку это инструмент разработчика, обратная совместимость этой секции не гарантируется.&lt;/p&gt;</description></item><item><title>Руководство по управлению</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>1. Предварительные требования</title><link>https://pig.center/ru/docs/haproxy/prerequisites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/prerequisites/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;В этом документе описаны запуск, остановка, управление HAProxy и устранение неполадок, а также некоторые известные&#10;ограничения и подводные камни, которых следует избегать. Настройка HAProxy здесь не рассматривается (об этом читайте&#10;в &lt;a href="https://pig.center/ru/docs/haproxy/http-fundamentals/"&gt;&lt;code&gt;configuration.txt&lt;/code&gt;&lt;/a&gt;&#10;).&lt;/p&gt;&#10;&lt;p&gt;Предполагается, что читатель обладает достаточными навыками администрирования UNIX-подобной&#10;операционной системы, ежедневно использует командную оболочку и знаком с утилитами устранения неполадок,&#10;такими как strace и tcpdump.&lt;/p&gt;</description></item><item><title>Запись в etcd</title><link>https://pig.center/ru/docs/etcd/tasks/developer/writing-to-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/writing-to-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные условия&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="procedure"&gt;Процедура&#10;&lt;/h2&gt;&#10;&lt;p&gt;Используйте подкоманду &lt;code&gt;put&lt;/code&gt; для записи пары «ключ — значение»:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-6b6deb85-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-6b6deb85-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put foo &lt;span class="s2"&gt;&amp;#34;Hello World!&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;где:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; — имя ключа&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;quot;Hello World!&amp;quot;&lt;/code&gt; — значение, заключённое в кавычки&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>2. Архитектура HAProxy</title><link>https://pig.center/ru/docs/haproxy/management-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/management-architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy — многопоточный неблокирующий демон с событийной архитектурой. Это означает, что для планирования&#10;всех своих действий он использует мультиплексирование событий, вместо того чтобы полагаться на системный планировщик&#10;при переключении между ними. Чаще всего он работает как один процесс, поэтому вывод &amp;ldquo;ps aux&amp;rdquo; в&#10;системе показывает только один процесс &amp;ldquo;haproxy&amp;rdquo;, кроме случаев, когда идёт плавная перезагрузка конфигурации и старый&#10;процесс завершает работу параллельно с новым. Поэтому его работу всегда легко отслеживать&#10;с помощью утилиты strace. Чтобы масштабироваться с ростом числа доступных процессоров, по&#10;умолчанию haproxy запускает по одному рабочему потоку на каждый процессор, на котором ему разрешено выполняться. Если явно&#10;не задана иная конфигурация, входящий трафик распределяется между всеми этими потоками, каждый из которых&#10;выполняет один и тот же цикл событий. Особое внимание уделяется сведению зависимостей между потоками к строгому&#10;минимуму, чтобы добиться масштабируемости, близкой к линейной. Это имеет ряд следствий, в частности&#10;каждое соединение обслуживается одним потоком. Поэтому для использования всей доступной вычислительной&#10;мощности необходимо как минимум столько же соединений, сколько потоков, что почти&#10;всегда обеспечивается.&lt;/p&gt;</description></item><item><title>3. Запуск HAProxy</title><link>https://pig.center/ru/docs/haproxy/starting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/starting/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy запускается путём вызова программы &amp;ldquo;haproxy&amp;rdquo; с передачей на командной строке нескольких аргументов. Фактический синтаксис следующий:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-06b10d9f-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-06b10d9f-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ haproxy &lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;options&amp;gt;&lt;span class="o"&gt;]&lt;/span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;где [&lt;code&gt;&amp;lt;options&amp;gt;&lt;/code&gt;]* — произвольное число параметров. Параметр всегда начинается с &amp;lsquo;-&amp;rsquo;, за которым следуют одна или несколько букв и, возможно, один или несколько дополнительных аргументов. Без параметров HAProxy показывает страницу справки с перечнем поддерживаемых параметров. Доступные параметры могут немного различаться в зависимости от операционной системы. Многие из них имеют аналоги в секции &amp;ldquo;global&amp;rdquo;. В таком случае командная строка всегда имеет приоритет над файлом конфигурации, что позволяет быстро принудительно задать настройки, не изменяя конфигурационные файлы. Текущий список параметров:&lt;/p&gt;</description></item><item><title>4. Остановка и перезапуск HAProxy</title><link>https://pig.center/ru/docs/haproxy/stopping-and-restarting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/stopping-and-restarting/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy поддерживает плавную и жёсткую остановку. Жёсткая остановка проста: при отправке процессу haproxy сигнала SIGTERM он немедленно завершается, а все установленные соединения закрываются. Плавная остановка запускается сигналом SIGUSR1, отправленным процессу haproxy. При этом процесс лишь освобождает прослушиваемые порты, продолжая обрабатывать существующие соединения до их закрытия. После закрытия последнего соединения процесс завершается.&lt;/p&gt;&#10;&lt;p&gt;Жёсткая остановка используется для действий «stop» и «restart» сценария управления службой. Плавная остановка применяется для действия «reload», которое пытается незаметно для клиентов загрузить новую конфигурацию в новом процессе.&lt;/p&gt;</description></item><item><title>5. Ограничения файловых дескрипторов</title><link>https://pig.center/ru/docs/haproxy/file-descriptors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/file-descriptors/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Чтобы обеспечить успешное обслуживание всех входящих соединений, HAProxy при загрузке вычисляет&#10;общее число файловых дескрипторов, которые потребуются за время жизни процесса.&#10;Обычному процессу Unix по умолчанию обычно предоставляется 1024 файловых дескриптора, а привилегированный процесс&#10;может самостоятельно увеличить этот лимит. Это одна из причин запускать HAProxy от имени root и позволять ему&#10;настроить лимит. Лимит по умолчанию в 1024 файловых дескриптора позволяет обслуживать примерно 500 одновременных&#10;соединений. Расчёт основан на глобальном параметре maxconn, ограничивающем общее&#10;число соединений на процесс, числе слушателей, числе серверов с включённой&#10;проверкой работоспособности, агентских проверках, одноранговых узлах, получателях журналов и, возможно, нескольких других технических&#10;потребностях. Для грубой оценки достаточно удвоить значение maxconn&#10;и добавить несколько десятков: получится приблизительное число необходимых файловых дескрипторов.&lt;/p&gt;</description></item><item><title>6. Управление памятью</title><link>https://pig.center/ru/docs/haproxy/memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/memory/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy использует простое и быстрое управление памятью на основе пулов. Поскольку он работает с небольшим числом&#10;различных типов объектов, гораздо эффективнее брать новые объекты из пула, уже&#10;содержащего объекты подходящего размера, чем вызывать malloc() для каждого отдельного размера. Пулы&#10;организованы как стек, или LIFO: при выделении используются недавно освобождённые&#10;объекты, которые ещё находятся в кэшах CPU. Пулы близких размеров объединяются, чтобы&#10;ограничить фрагментацию памяти.&lt;/p&gt;</description></item><item><title>Как получить ключи по префиксу</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-get-key-by-prefix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-get-key-by-prefix/</guid><description>&lt;h2 id="pre-requisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;Установите etcdctl&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/dev-guide/local_cluster/"&gt;Настройте локальный кластер&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="get-keys-by-prefix"&gt;Получить ключи по префиксу&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-d082602d-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d082602d-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; get PREFIX --prefix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="global-options"&gt;Глобальные параметры&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-d082602d-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d082602d-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--endpoints&lt;span class="o"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span class="o"&gt;]&lt;/span&gt;, gRPC endpoints&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-d082602d-fence-2" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d082602d-fence-2-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--prefix, get a range of keys with matching prefix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="example"&gt;Пример&#10;&lt;/h3&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/get-by-prefix.gif" alt="03_etcdctl_get_by_prefix_2016050501" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-d082602d-fence-3" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="5"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d082602d-fence-3-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put web1 value1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put web2 value2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put web3 value3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; get web --prefix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>7. Использование CPU</title><link>https://pig.center/ru/docs/haproxy/cpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/cpu/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Обычно HAProxy проводит большую часть времени в системном режиме, а меньшую — в пользовательском пространстве. Тщательно настроенный CPU с частотой 3.5 GHz способен поддерживать около 80000 установок и закрытий сквозных соединений в секунду при загрузке CPU 100% на одном ядре. При полной загрузке одного ядра типичны следующие показатели:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;95% в системном режиме, 5% в пользовательском — для длительных соединений TCP или больших объектов HTTP;&lt;/li&gt;&#10;&lt;li&gt;85% в системном режиме и 15% в пользовательском — для коротких соединений TCP или маленьких объектов HTTP в режиме закрытия соединений;&lt;/li&gt;&#10;&lt;li&gt;70% в системном режиме и 30% в пользовательском — для маленьких объектов HTTP в режиме постоянных соединений.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Обработка правил и регулярных выражений увеличивает долю пользовательского времени. Наличие правил межсетевого экрана, отслеживания соединений и сложных таблиц маршрутизации в системе, напротив, увеличивает долю системного времени.&lt;/p&gt;</description></item><item><title>8. Ведение журнала</title><link>https://pig.center/ru/docs/haproxy/management-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/management-logging/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Для ведения журнала HAProxy всегда использует сервер syslog, поскольку сам не обращается к файловой системе. Стандартный способ — отправлять журналы по UDP на сервер журналирования (по умолчанию на порт 514). Очень часто используется адрес 127.0.0.1, где работает локальный демон syslog, но также применяется передача по сети на центральный сервер. Центральный сервер даёт дополнительные преимущества, особенно в схемах active-active, где желательно объединять журналы в порядке поступления. HAProxy может отправлять журналы локальному демону syslog и через сокет UNIX, но это совершенно не рекомендуется: если сервер syslog перезапустить во время работы haproxy, сокет будет заменён, а новые записи журналов будут теряться. Поскольку HAProxy изолирован в окружении chroot, он не сможет повторно подключиться к новому сокету. На практике также наблюдалось, что буферы журналирования сокетов UNIX очень малы, из-за чего сообщения теряются даже при очень низкой нагрузке. Однако для тестирования такой вариант вполне допустим.&lt;/p&gt;</description></item><item><title>10. Упрощение управления конфигурацией</title><link>https://pig.center/ru/docs/haproxy/configuration-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/configuration-management/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Очень часто два узла HAProxy, образующие кластер, используют совершенно одинаковую конфигурацию, за исключением нескольких адресов. Вместо того чтобы сопровождать отдельную копию конфигурации для каждого узла, которые неизбежно начнут различаться, можно включить в конфигурацию переменные окружения. Тогда несколько конфигураций смогут использовать один и тот же файл, различаясь лишь несколькими общесистемными переменными окружения. Эта возможность появилась в версии 1.5, где переменные окружения допускались только в адресах; версия 1.6 расширяет их поддержку на все параметры. Синтаксис такой же, как в оболочке UNIX: переменная начинается со знака доллара (&amp;rsquo;$&amp;rsquo;), за которым следуют открывающая фигурная скобка (&amp;rsquo;{&amp;rsquo;), имя переменной и закрывающая скобка (&amp;rsquo;}&amp;rsquo;). За исключением адресов, переменные окружения интерпретируются только в аргументах, заключённых в двойные кавычки (это ограничение было необходимо, чтобы не нарушить работу существующих конфигураций с регулярными выражениями, содержащими знак доллара).&lt;/p&gt;</description></item><item><title>11. Известные подводные камни, которых следует избегать</title><link>https://pig.center/ru/docs/haproxy/traps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/traps/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Время от времени кто-нибудь сообщает, что после перезагрузки системы служба haproxy не запустилась,&#10;но при ручном запуске работает. Чаще всего такие пользователи применяют механизм кластерного IP-адреса,&#10;например keepalived, чтобы назначать IP-адрес службы только главному узлу. Пока haproxy был&#10;привязан к адресу 0.0.0.0, всё работало, но после привязки к виртуальному IP-адресу&#10;запуск перестал удаваться. Причина в том, что при запуске службы виртуальный&#10;IP-адрес ещё не принадлежит локальному узлу, и, когда HAProxy пытается к нему привязаться,&#10;система отклоняет запрос, поскольку адрес не локальный. Решение состоит не в задержке&#10;запуска службы haproxy (это не помогло бы при перезапуске), а в правильной настройке&#10;системы, разрешающей привязку к нелокальным адресам. В Linux это легко сделать, установив&#10;параметр sysctl net.ipv4.ip_nonlocal_bind в 1. Это также необходимо для прозрачного перехвата&#10;IP-трафика, проходящего через HAProxy к определённому адресу назначения.&lt;/p&gt;</description></item><item><title>12. Отладка и проблемы производительности</title><link>https://pig.center/ru/docs/haproxy/debugging-and-performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/debugging-and-performance/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;При запуске HAProxy с параметром «-d» процесс остаётся на переднем плане и выводит по строке на каждое событие — входящее соединение, завершение соединения, каждую встреченную строку заголовка запроса или ответа. Этот отладочный вывод формируется до обработки содержимого, поэтому локальные изменения в нём не учитываются. Основное назначение — показывать запросы и ответы без запуска анализатора сетевого трафика. При одновременной обработке нескольких соединений вывод читается хуже, но скрипты «debug2ansi» и «debug2html» из каталога examples/ заметно помогают, раскрашивая его.&lt;/p&gt;</description></item><item><title>13. Соображения безопасности</title><link>https://pig.center/ru/docs/haproxy/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/security/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy рассчитан на работу с очень ограниченными привилегиями. Стандартный способ его использования — изолировать его в окружении chroot и сбросить привилегии до обычного пользователя, не имеющего никаких разрешений внутри этого окружения. Тогда, если в будущем обнаружится уязвимость, компрометация HAProxy не затронет остальную систему.&lt;/p&gt;&#10;&lt;p&gt;Чтобы выполнить chroot, процесс сначала нужно запустить от имени root. Создавать окружения chroot вручную и запускать процесс уже внутри них бессмысленно: их трудно создавать, их никогда не сопровождают должным образом, и ошибок в них всегда гораздо больше, чем в основной файловой системе. Кроме того, при компрометации злоумышленник сможет воспользоваться специально подготовленной файловой системой. К сожалению, многие администраторы путают «запустить от имени root» и «работать от имени root», из-за чего меняют UID ещё до запуска haproxy и тем самым ослабляют действующие ограничения безопасности.&lt;/p&gt;</description></item><item><title>Как удалить ключи</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-delete-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-delete-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt; и &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="add-or-delete-keys"&gt;Добавление или удаление ключей&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;del&lt;/code&gt; для удаления указанного ключа или диапазона ключей:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-8d577dc9-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-8d577dc9-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl del &lt;span class="nv"&gt;$KEY&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$END_KEY&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-8d577dc9-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-8d577dc9-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--prefix&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: delete keys with matching prefix&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--prev-kv&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: &lt;span class="k"&gt;return&lt;/span&gt; deleted key-value pairs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--from-key&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: delete keys that are greater than or equal to the given key using byte compare&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--range&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: delete range of keys without delay&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options-inherited-from-parent-commands"&gt;Параметры, унаследованные от родительских команд&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-8d577dc9-fence-2" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-8d577dc9-fence-2-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;127.0.0.1:2379&amp;#34;&lt;/span&gt;: gRPC endpoints&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="examples"&gt;Примеры&#10;&lt;/h3&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/delete-keys.gif" alt="04_etcdctl_delete_2016050601" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-8d577dc9-fence-3" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="6"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-8d577dc9-fence-3-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put key myvalue&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; del key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put k1 value1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put k2 value2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; del k --prefix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Как выполнить несколько записей в транзакции</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-transactional-write/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-transactional-write/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные условия&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt; и &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;.&lt;/li&gt;&#10;&lt;li&gt;Работающий кластер &lt;code&gt;etcd&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="terminology"&gt;Терминология&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ниже определены ключевые термины, используемые в &lt;a href="#example"&gt;примере&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Термин&lt;/th&gt;&#10; &lt;th scope="col"&gt;Определение&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#etcdctl"&gt;etcdctl&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;Инструмент командной строки для взаимодействия с сервером etcd.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Команда &lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#txn-options"&gt;&lt;code&gt;txn&lt;/code&gt;&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;Название команды &lt;code&gt;txn&lt;/code&gt; сокращает слово «transaction». Она читает несколько запросов etcd из стандартного ввода и применяет их как одну атомарную транзакцию. Транзакция состоит из списка условий, списка запросов, выполняемых при истинности всех условий, и списка запросов, выполняемых при ложности любого условия. Дополнительные сведения приведены в разделе &lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#key-value-commands"&gt;команд etcdctl для ключей и значений&lt;/a&gt;&#10;.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;compare&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Секция &lt;code&gt;compare&lt;/code&gt; в транзакции (&lt;code&gt;txn&lt;/code&gt;) выполняет условную проверку и определяет, следует ли выполнять операции транзакции. Изменения применяются только тогда, когда текущее состояние хранилища ключей и значений соответствует ожидаемым условиям. Это сохраняет согласованность данных и предотвращает конфликты при параллельной работе. Структура команды показана ниже в разделе &lt;a href="#2-perform-a-transaction"&gt;Выполнение транзакции&lt;/a&gt;&#10;.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="transactions"&gt;Транзакции&#10;&lt;/h2&gt;&#10;&lt;p&gt;Команда &lt;code&gt;txn&lt;/code&gt; обрабатывает все запросы в одной транзакции:&lt;/p&gt;</description></item><item><title>Как наблюдать за ключами</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-watch-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-watch-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt; и &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="watching-keys"&gt;Наблюдение за ключами&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;watch&lt;/code&gt; для получения уведомлений о будущих изменениях:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-854696ae-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-854696ae-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl watch &lt;span class="nv"&gt;$KEY&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$END_KEY&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-854696ae-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="5"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-854696ae-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-i, --interactive&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: interactive mode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--prefix&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: watch on a prefix &lt;span class="k"&gt;if&lt;/span&gt; prefix is &lt;span class="nb"&gt;set&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--rev&lt;span class="o"&gt;=&lt;/span&gt;0: Revision to start watching&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--prev-kv&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: get the previous key-value pair before the event happens&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--progress-notify&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: get periodic watch progress notification from server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options-inherited-from-parent-commands"&gt;Параметры, унаследованные от родительских команд&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-854696ae-fence-2" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-854696ae-fence-2-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;127.0.0.1:2379&amp;#34;&lt;/span&gt;: gRPC endpoints&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="examples"&gt;Примеры&#10;&lt;/h3&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/watch-keys.gif" alt="06_etcdctl_watch_2016050501" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-854696ae-fence-3" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="6"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-854696ae-fence-3-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; watch stock1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; watch stock --prefix&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span class="m"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put stock2 &lt;span class="m"&gt;20&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Как создать аренду</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-create-lease/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-create-lease/</guid><description>&lt;p&gt;&lt;code&gt;lease&lt;/code&gt; записывать с TTL:&lt;/p&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/create-lease.gif" alt="07_etcdctl_lease_2016050501" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-533b1b67-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="10"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-533b1b67-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; lease grant &lt;span class="m"&gt;300&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# lease 2be7547fbc6a5afa granted with TTL(300s)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put sample value --lease&lt;span class="o"&gt;=&lt;/span&gt;2be7547fbc6a5afa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; get sample&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; lease keep-alive 2be7547fbc6a5afa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; lease revoke 2be7547fbc6a5afa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# or after 300 seconds&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; get sample&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Как создавать блокировки</title><link>https://pig.center/ru/docs/etcd/tasks/developer/how-to-create-locks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/how-to-create-locks/</guid><description>&lt;p&gt;LOCK приобретает распределённый мьютекс с указанным именем. Как только блокировка будет получена, она будет удерживаться до завершения работы etcdctl.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt; и &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="creating-a-lock"&gt;Создание блокировки&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;lock&lt;/code&gt; для распределённой блокировки:&lt;/p&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/create-lock.gif" alt="08_etcdctl_lock_2016050501" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-d0f74c2e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d0f74c2e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; lock mutex1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;endpoints — определяет список адресов машин в кластере, разделённых запятыми.&lt;/li&gt;&#10;&lt;li&gt;ttl — время ожидания в секундах сессии блокировки.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Быстрый старт</title><link>https://pig.center/ru/docs/etcd/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/quickstart/</guid><description>&lt;p&gt;Следуйте этим инструкциям, чтобы локально установить, запустить и проверить кластер etcd&#10;из одного участника:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Установите etcd из готовых бинарных файлов или исходного кода. Подробности см. в разделе&#10;[Установка][].&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;Важно&lt;/strong&gt;: обязательно выполните последний&#10;шаг инструкции по установке и убедитесь, что &lt;code&gt;etcd&lt;/code&gt; доступен в пути поиска.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Запустите &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-3b677297-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="console" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-3b677297-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; etcd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-17T09:19:32.783-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:72&amp;#34;,&amp;#34;msg&amp;#34;:... }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;⋮&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;Примечание&lt;/strong&gt;: вывод &lt;code&gt;etcd&lt;/code&gt; представляет собой&#10;&lt;a href="https://pig.center/ru/docs/etcd/op-guide/configuration/#logging"&gt;журналы&lt;/a&gt;&#10; — сообщения уровня info можно&#10;игнорировать.&lt;/p&gt;</description></item><item><title>Как проводить выборы лидера в кластере etcd</title><link>https://pig.center/ru/docs/etcd/tasks/operator/how-to-conduct-elections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/how-to-conduct-elections/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Убедитесь, что установлен &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/a&gt;&#10; и &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;.&lt;/li&gt;&#10;&lt;li&gt;Проверьте наличие активного кластера etcd.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="conduct-leader-election"&gt;Проведение выборов лидера&#10;&lt;/h2&gt;&#10;&lt;p&gt;Команда &lt;code&gt;etcdctl&lt;/code&gt; используется для проведения выборов лидера в кластере etcd. Она гарантирует, что в один момент времени только один клиент может стать лидером.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;etcdctl --endpoints=$ENDPOINTS elect &amp;lt;election-name&amp;gt; [proposal]&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-399f08a4-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-399f08a4-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; elect election-name p1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;--endpoints : $ENDPOINTS&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Адрес каждого участника кластера etcd.&lt;/p&gt;</description></item><item><title>Как проверить состояние кластера</title><link>https://pig.center/ru/docs/etcd/tasks/operator/how-to-check-cluster-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/how-to-check-cluster-status/</guid><description>&lt;h2 id="prerequisites"&gt;Предварительные условия&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Установите &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt; и &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="check-overall-status"&gt;Проверка общего состояния&#10;&lt;/h2&gt;&#10;&lt;p&gt;Команда &lt;code&gt;endpoint status&lt;/code&gt; проверяет общее состояние каждой конечной точки, указанной флагом &lt;code&gt;--endpoints&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-7ac384da-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-7ac384da-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl endpoint status &lt;span class="o"&gt;(&lt;/span&gt;--endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;--cluster&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="options"&gt;Параметры&#10;&lt;/h3&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-7ac384da-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-7ac384da-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--cluster&lt;span class="o"&gt;[=&lt;/span&gt;false&lt;span class="o"&gt;]&lt;/span&gt;: use all endpoints from the cluster member list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="check-health"&gt;Проверка работоспособности&#10;&lt;/h2&gt;&#10;&lt;p&gt;Команда &lt;code&gt;endpoint health&lt;/code&gt; проверяет работоспособность каждой конечной точки, указанной флагом &lt;code&gt;--endpoints&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Демонстрация</title><link>https://pig.center/ru/docs/etcd/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/demo/</guid><description>&lt;p&gt;В этом ряду примеров показаны базовые процедуры работы с кластером etcd.&lt;/p&gt;&#10;&lt;h2 id="auth"&gt;Аутентификация&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; для аутентификации:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-c9c56904-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="24"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c9c56904-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ETCDCTL_API&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:2379&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role root root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add user0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role user0 role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; auth &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# now all client requests go through auth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 put foo bar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# user0 can read the key foo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Как сохранить базу данных</title><link>https://pig.center/ru/docs/etcd/tasks/operator/how-to-save-database/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/how-to-save-database/</guid><description>&lt;h2 id="pre-requisites"&gt;Предварительные требования&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;Установите etcdctl, etcdutl&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/dev-guide/local_cluster/"&gt;Настройте локальный кластер&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="snapshot-a-database"&gt;Сделать снимок базы данных&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;snapshot&lt;/code&gt; для создания снимка базы данных etcd в определённый момент времени:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-73c76611-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-73c76611-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINT&lt;/span&gt; snapshot save DB_NAME&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="global-options"&gt;Глобальные параметры&#10;&lt;/h3&gt;&#10;&lt;h4 id="etcdctl"&gt;etcdctl&#10;&lt;/h4&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-73c76611-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-73c76611-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--endpoints&lt;span class="o"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span class="o"&gt;]&lt;/span&gt;, gRPC endpoints&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Снимок можно запрашивать только у одного узла etcd, поэтому флаг &lt;code&gt;--endpoints&lt;/code&gt; должен содержать только одну конечную точку.&lt;/p&gt;</description></item><item><title>Установка</title><link>https://pig.center/ru/docs/etcd/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/install/</guid><description>&lt;h2 id="requirements"&gt;Требования&#10;&lt;/h2&gt;&#10;&lt;p&gt;Перед установкой etcd ознакомьтесь со следующими страницами:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/op-guide/supported-platform/"&gt;Поддерживаемые платформы&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/op-guide/hardware/"&gt;Рекомендации по оборудованию&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="install-pre-built-binaries"&gt;Установка готовых бинарных файлов&#10;&lt;/h2&gt;&#10;&lt;p&gt;Проще всего установить etcd из готовых бинарных файлов:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Загрузите с &lt;a href="https://github.com/etcd-io/etcd/releases/"&gt;Releases&lt;/a&gt;&#10; сжатый архив для своей платформы,&#10;выбрав выпуск &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.7.0"&gt;v3.7.0&lt;/a&gt;&#10; или новее.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Распакуйте архив. В результате появится каталог с бинарными файлами.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Добавьте исполняемые файлы в путь поиска. Например, переименуйте и/или переместите&#10;их в каталог из пути поиска, такой как &lt;code&gt;/usr/local/bin&lt;/code&gt;, либо добавьте в путь&#10;каталог, созданный на предыдущем шаге.&lt;/p&gt;</description></item><item><title>Функциональные шлюзы</title><link>https://pig.center/ru/docs/etcd/feature-gates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/feature-gates/</guid><description>&lt;!-- overview --&gt;&#10;&lt;p&gt;На этой странице представлен обзор функциональных шлюзов, которые администратор&#10;может задать для etcd.&lt;/p&gt;&#10;&lt;p&gt;Описание стадий возможностей приведено в разделе &lt;a href="#feature-stages"&gt;стадий возможностей&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;!-- body --&gt;&#10;&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;p&gt;Функциональные шлюзы — набор пар key=value, описывающих возможности etcd.&#10;Возможности включаются и отключаются флагом командной строки &lt;code&gt;--feature-gates&lt;/code&gt;&#10;процесса etcd.&lt;/p&gt;&#10;&lt;p&gt;etcd позволяет включить или отключить набор функциональных шлюзов.&#10;Полный список можно увидеть с помощью флага &lt;code&gt;-h&lt;/code&gt;.&#10;Чтобы задать шлюзы, присвойте флагу &lt;code&gt;--feature-gates&lt;/code&gt; список пар возможностей в командной строке:&lt;/p&gt;</description></item><item><title>Часто задаваемые вопросы</title><link>https://pig.center/ru/docs/etcd/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/faq/</guid><description>&lt;h2 id="etcd-general"&gt;Общие вопросы об etcd&#10;&lt;/h2&gt;&#10;&lt;h3 id="what-is-etcd"&gt;Что такое etcd?&#10;&lt;/h3&gt;&#10;&lt;p&gt;etcd — согласованное распределённое хранилище ключей и значений. В основном оно используется как отдельная служба координации в распределённых системах и предназначено для небольших объёмов данных, целиком помещающихся в памяти.&lt;/p&gt;&#10;&lt;h3 id="how-do-you-pronounce-etcd"&gt;Как произносится etcd?&#10;&lt;/h3&gt;&#10;&lt;p&gt;etcd произносится как &lt;strong&gt;/ˈɛtsiːdiː/&lt;/strong&gt; и означает «распределённый каталог &lt;code&gt;etc&lt;/code&gt;».&lt;/p&gt;&#10;&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Должны ли клиенты отправлять запросы лидеру etcd?&#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf"&gt;Raft&lt;/a&gt;&#10; основан на лидере: лидер обрабатывает все клиентские запросы, требующие консенсуса кластера. Однако клиенту не нужно знать, какой узел является лидером. Любой требующий консенсуса запрос, отправленный последователю, автоматически пересылается лидеру. Запросы, не требующие консенсуса (например, сериализуемое чтение), может обработать любой участник кластера.&lt;/p&gt;</description></item><item><title>Библиотеки и инструменты</title><link>https://pig.center/ru/docs/etcd/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/integrations/</guid><description>&lt;p&gt;Обратите внимание: перечисленные ниже сторонние библиотеки и инструменты (размещённые не на &lt;a href="https://github.com/etcd-io"&gt;https://github.com/etcd-io&lt;/a&gt;&#10;) не тестируются и не сопровождаются командой etcd. Перед использованием рекомендуется прочитать и изучить их документацию и исходный код.&lt;/p&gt;&#10;&lt;h2 id="tools"&gt;Инструменты&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl"&gt;etcdctl&lt;/a&gt;&#10; — клиент командной строки для etcd&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump"&gt;etcd-dump&lt;/a&gt;&#10; — утилита командной строки для выгрузки и восстановления etcd.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs"&gt;etcd-fs&lt;/a&gt;&#10; — файловая система FUSE для etcd&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir"&gt;etcddir&lt;/a&gt;&#10; — синхронизация etcd с локальным каталогом в реальном времени. Работает в Windows и Linux.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser"&gt;etcd-browser&lt;/a&gt;&#10; — веб-редактор ключей и значений etcd на AngularJS&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock"&gt;etcd-lock&lt;/a&gt;&#10; — реализация выборов главного узла и распределённой блокировки чтения/записи на основе etcd; поддерживает v2&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console"&gt;etcd-console&lt;/a&gt;&#10; — веб-редактор ключей и значений etcd на PHP&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer"&gt;etcd-viewer&lt;/a&gt;&#10; — редактор и средство просмотра хранилища ключей и значений etcd, написанное на Java&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool"&gt;etcdtool&lt;/a&gt;&#10; — экспорт, импорт и редактирование каталога etcd в JSON/YAML/TOML, а также проверка каталога по схеме JSON&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest"&gt;etcdloadtest&lt;/a&gt;&#10; — клиент командной строки для нагрузочного тестирования etcd версии 3.0 и выше.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/olamilekan000/etcd-tui"&gt;etcd-tui&lt;/a&gt;&#10; — современный терминальный пользовательский интерфейс (TUI) для работы с базой данных etcd. Позволяет переходить по ключам, просматривать значения, фильтровать данные и управлять кластером etcd непосредственно из терминала.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://etcdfinder.github.io"&gt;etcdfinder&lt;/a&gt;&#10; — сверхбыстрый современный веб-интерфейс etcd с мгновенным поиском. Поддерживает etcd v2 и v3.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas"&gt;lucas&lt;/a&gt;&#10; — веб-средство просмотра ключей и значений для кластера kubernetes etcd3.0+.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://etcdmanager.io"&gt;etcd-manager&lt;/a&gt;&#10; — современный, эффективный, многоплатформенный и бесплатный графический интерфейс и клиентский инструмент etcd 3.x. Доступен для Windows, Linux и Mac.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore"&gt;etcd-backup-restore&lt;/a&gt;&#10; — утилита для периодического инкрементного резервного копирования и восстановления etcd.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid"&gt;etcd-druid&lt;/a&gt;&#10; — оператор Kubernetes для развёртывания кластеров etcd и управления эксплуатационными операциями 2-го дня.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm"&gt;etcdadm&lt;/a&gt;&#10; — инструмент командной строки для эксплуатации кластера etcd.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/ahrtr/etcd-defrag"&gt;etcd-defrag&lt;/a&gt;&#10; — более удобный и интеллектуальный инструмент дефрагментации etcd.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper"&gt;etcdhelper&lt;/a&gt;&#10; — плагин платформы intellij для etcd.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="libraries"&gt;Библиотеки&#10;&lt;/h2&gt;&#10;&lt;p&gt;В следующих разделах клиентские библиотеки etcd перечислены по языкам.&lt;/p&gt;</description></item><item><title>Как добавлять и удалять участников</title><link>https://pig.center/ru/docs/etcd/tasks/operator/how-to-deal-with-membership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/how-to-deal-with-membership/</guid><description>&lt;p&gt;Команда &lt;code&gt;member&lt;/code&gt; добавляет, удаляет и обновляет участников:&lt;/p&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/tasks/img/manage-members.gif" alt="13_etcdctl_member_2016062301" loading="lazy" decoding="async"&gt;&lt;div class="td-code td-code--untitled" id="td-code-1efd6d78-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="46"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-1efd6d78-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For each machine&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-etcd-token-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;etcd-node-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;etcd-node-2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;etcd-node-3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.13&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.14&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.240.0.15&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380,&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380,&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For node 1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For node 2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# For node 3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NAME_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOST_3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd --data-dir&lt;span class="o"&gt;=&lt;/span&gt;data.etcd --name &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-advertise-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-peer-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2380 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--advertise-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--listen-client-urls http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;THIS_IP&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:2379 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-state &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;--initial-cluster-token &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Затем замените участника командами &lt;code&gt;member remove&lt;/code&gt; и &lt;code&gt;member add&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Сообщение об ошибках</title><link>https://pig.center/ru/docs/etcd/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/reporting_bugs/</guid><description>&lt;p&gt;Если в какой-либо части проекта etcd обнаружена ошибка или неточность в документации, сообщите нам, &lt;a href="https://github.com/etcd-io/etcd/issues/new"&gt;создав issue&lt;/a&gt;&#10;. Мы очень серьёзно относимся к ошибкам и считаем, что незначительных проблем не бывает. Перед созданием отчёта убедитесь, что issue с описанием той же проблемы ещё не существует.&lt;/p&gt;&#10;&lt;p&gt;Чтобы отчёт был точным и понятным, постарайтесь соблюдать следующие требования:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Конкретность.&lt;/strong&gt; Укажите как можно больше подробностей: версию, окружение, конфигурацию и другие существенные сведения. Если ошибка связана с работой сервера etcd, приложите журнал etcd; особенно важны начальные сообщения с конфигурацией etcd.&lt;/p&gt;</description></item><item><title>Настройка производительности</title><link>https://pig.center/ru/docs/etcd/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tuning/</guid><description>&lt;p&gt;Настройки etcd по умолчанию хорошо подходят для локальных сетей с небольшой средней задержкой. Однако при использовании etcd в нескольких центрах обработки данных или в сети с высокой задержкой может потребоваться настроить интервал heartbeat и тайм-аут выборов.&lt;/p&gt;&#10;&lt;p&gt;Сеть — не единственный источник задержки. На каждый запрос и ответ могут влиять медленные диски лидера и последователя. Каждый из этих тайм-аутов охватывает полное время от отправки запроса до успешного ответа другой машины.&lt;/p&gt;&#10;&lt;h2 id="time-parameters"&gt;Временные параметры&#10;&lt;/h2&gt;&#10;&lt;p&gt;Базовый протокол распределённого консенсуса использует два независимых временных параметра, чтобы узлы могли передать лидерство при зависании или отключении лидера. Первый параметр — &lt;em&gt;интервал heartbeat&lt;/em&gt;. Он определяет, как часто лидер сообщает последователям, что по-прежнему остаётся лидером.&#10;Рекомендуется устанавливать его примерно равным времени кругового обхода между участниками. По умолчанию etcd использует интервал heartbeat &lt;code&gt;100ms&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Протокол службы обнаружения</title><link>https://pig.center/ru/docs/etcd/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Протокол службы обнаружения помогает новому участнику etcd найти остальных участников на этапе начальной инициализации кластера с помощью общего URL обнаружения.&lt;/p&gt;&#10;&lt;p&gt;Протокол используется &lt;em&gt;только&lt;/em&gt; при начальной инициализации и не подходит для реконфигурации во время выполнения или мониторинга кластера.&lt;/p&gt;&#10;&lt;p&gt;Один новый токен обнаружения предназначен для инициализации одного &lt;em&gt;уникального&lt;/em&gt; кластера etcd. Один токен может представлять только один кластер. После запуска протокола для токена его нельзя использовать для инициализации другого кластера, даже если первый процесс завершился с ошибкой на полпути.&lt;/p&gt;</description></item><item><title>Протокол службы обнаружения</title><link>https://pig.center/ru/docs/etcd/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Протокол службы обнаружения помогает новому участнику etcd найти остальных участников на этапе начальной инициализации кластера с помощью общего токена обнаружения и списка конечных точек.&lt;/p&gt;&#10;&lt;p&gt;Протокол используется &lt;em&gt;только&lt;/em&gt; во время начальной инициализации и не подходит для реконфигурации во время выполнения или мониторинга кластера.&lt;/p&gt;&#10;&lt;p&gt;Один новый токен обнаружения предназначен для инициализации одного &lt;em&gt;уникального&lt;/em&gt; кластера etcd. Один токен может представлять только один кластер. После запуска протокола для токена его нельзя использовать для инициализации другого кластера etcd, даже если первый процесс завершился с ошибкой на полпути.&lt;/p&gt;</description></item><item><title>Соглашения по ведению журнала</title><link>https://pig.center/ru/docs/etcd/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-internal/logging/</guid><description>&lt;p&gt;etcd использует библиотеку &lt;a href="https://github.com/uber-go/zap"&gt;zap&lt;/a&gt;&#10; для ведения журнала вывода приложения, категоризированного по &lt;em&gt;уровням&lt;/em&gt;. Уровень сообщения в журнале определяется в соответствии со следующими соглашениями:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Логи DebugLevel обычно объёмные и обычно отключены в рабочей среде.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Примеры:&#10;&lt;ul&gt;&#10;&lt;li&gt;Отправка обычного сообщения удалённому узлу&lt;/li&gt;&#10;&lt;li&gt;Запись записи журнала на диск&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Уровень InfoLevel является уровнем ведения журнала по умолчанию.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Примеры:&#10;&lt;ul&gt;&#10;&lt;li&gt;Конфигурация при запуске&lt;/li&gt;&#10;&lt;li&gt;Начало создания снимка&lt;/li&gt;&#10;&lt;li&gt;Добавление нового узла в кластер&lt;/li&gt;&#10;&lt;li&gt;Добавление нового пользователя в подсистему аутентификации&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Журналы уровня Warn более важны, чем Info, но не требуют индивидуального человеческого контроля.&lt;/p&gt;</description></item><item><title>Модули Golang</title><link>https://pig.center/ru/docs/etcd/dev-internal/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-internal/modules/</guid><description>&lt;p&gt;Начиная с версии 3.5 проект etcd организован как несколько&#10;&lt;a href="https://golang.org/ref/mod"&gt;модулей Golang&lt;/a&gt;&#10;, размещённых в &lt;a href="https://golang.org/ref/mod#vcs-dir"&gt;одном репозитории&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/dev-internal/img/modules.svg" alt="Граф модулей" loading="lazy" decoding="async"&gt;&lt;p&gt;Проект включает следующие модули:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/api/v3&lt;/strong&gt; — определения API, например protos и созданные из proto библиотеки, которые задают протокол взаимодействия между клиентами и сервером etcd.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/pkg/v3&lt;/strong&gt; — набор вспомогательных пакетов, используемых etcd, но не зависящих от его специфики. Пакет следует размещать здесь только в том случае, если в будущем его можно будет вынести в отдельный репозиторий. Не добавляйте сюда код с большим числом собственных зависимостей: они автоматически станут зависимостями клиентской библиотеки, которую важно сохранять легковесной.&lt;/p&gt;</description></item><item><title>Модель данных</title><link>https://pig.center/ru/docs/etcd/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/data_model/</guid><description>&lt;p&gt;etcd предназначен для надёжного хранения редко обновляемых данных и выполнения надёжных запросов наблюдения. etcd предоставляет предыдущие версии пар «ключ — значение», поддерживая недорогие снимки и историю событий наблюдения («запросы с перемещением во времени»). Для этих сценариев хорошо подходит постоянная многоверсионная модель данных с управлением параллелизмом.&lt;/p&gt;&#10;&lt;p&gt;etcd хранит данные в многоверсионном &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure"&gt;постоянном&lt;/a&gt;&#10; хранилище ключей и значений. Когда значение пары заменяется новыми данными, постоянное хранилище сохраняет её предыдущую версию. Фактически хранилище неизменяемо: операции не обновляют структуру на месте, а всегда создают новую обновлённую структуру. После изменения все прежние версии ключей остаются доступными для чтения и наблюдения. Чтобы хранилище не росло бесконечно и не сохраняло старые версии, его можно компактизировать, удалив самые старые версии замещённых данных.&lt;/p&gt;</description></item><item><title>Конструкция клиента etcd</title><link>https://pig.center/ru/docs/etcd/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;Конструкция клиента etcd&#10;&lt;/h1&gt;&#10;&lt;p&gt;&lt;em&gt;Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h1 id="introduction"&gt;Введение&#10;&lt;/h1&gt;&#10;&lt;p&gt;Сервер etcd доказал свою надёжность многолетним тестированием с внедрением отказов. Большая часть сложной логики приложений уже обрабатывается сервером etcd и его хранилищами данных (например, состав кластера прозрачен для клиентов, а уровень Raft пересылает предложения лидеру). Хотя серверные компоненты корректны, их взаимодействие с клиентом требует иного набора сложных протоколов, обеспечивающих корректность и высокую доступность в условиях отказов. В идеале сервер etcd представляет множество физических машин как единый логический кластер, а клиент реализует автоматическое переключение между репликами при отказе. В этом документе описаны архитектурные решения клиента и подробности их реализации.&lt;/p&gt;</description></item><item><title>Конструкция обучающегося участника etcd</title><link>https://pig.center/ru/docs/etcd/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;Обучающийся участник etcd&#10;&lt;/h1&gt;&#10;&lt;p&gt;&lt;em&gt;Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h1 id="background"&gt;Предпосылки&#10;&lt;/h1&gt;&#10;&lt;p&gt;Изменение состава кластера остаётся одной из крупнейших эксплуатационных сложностей. Рассмотрим типичные проблемы.&lt;/p&gt;&#10;&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. Новый участник кластера перегружает лидера&#10;&lt;/h3&gt;&#10;&lt;p&gt;Только что присоединившийся участник etcd начинает без данных и потому требует больше обновлений от лидера, пока не догонит его журнал. Из-за этого сеть лидера с большей вероятностью окажется перегружена, а его сигналы активности последователям будут заблокированы или отброшены. Тогда у последователя может истечь тайм-аут выборов, и он начнёт новые выборы лидера. Таким образом, кластер с новым участником более подвержен выборам лидера. И сами выборы, и последующее распространение обновлений новому участнику могут вызывать периоды недоступности кластера (см. &lt;em&gt;рисунок 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Конструкция аутентификации etcd v3</title><link>https://pig.center/ru/docs/etcd/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Почему не используется система аутентификации v2?&#10;&lt;/h2&gt;&#10;&lt;p&gt;Вместо RESTful-интерфейса, как в v2, протокол v3 использует gRPC в качестве транспорта. Новый протокол даёт возможность развить и улучшить конструкцию v2. Например, аутентификация v3 выполняется для соединения, а не для каждого запроса, как более медленная аутентификация v2. Кроме того, на практике семантика аутентификации v2 неудобна для рассуждений о согласованности, что будет описано в следующих разделах. Для v3 существует чёткое описание и реализация механизма аутентификации, устраняющие недостатки системы v2.&lt;/p&gt;</description></item><item><title>API etcd</title><link>https://pig.center/ru/docs/etcd/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/api/</guid><description>&lt;p&gt;Этот документ содержит обзор основной конструкции API etcd v3.&#10;Не следует путать его с API etcd v2, объявленным устаревшим в etcd v3.5.&#10;Документ не претендует на полноту, а сосредоточен на основных идеях, необходимых для понимания etcd, без отвлечения на менее распространённые вызовы API.&#10;Все API etcd определены в &lt;a href="https://github.com/etcd-io/etcd/blob/main/api/etcdserverpb/rpc.proto"&gt;службах gRPC&lt;/a&gt;&#10;, которые группируют удалённые вызовы процедур (RPC), распознаваемые сервером etcd.&#10;Полный перечень RPC etcd приведён в формате Markdown в &lt;a href="https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/"&gt;справочнике API gRPC&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Файлы постоянного хранилища etcd</title><link>https://pig.center/ru/docs/etcd/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/persistent-storage-files/</guid><description>&lt;p&gt;В этом документе описан формат постоянного хранилища etcd: именование, содержимое и инструменты, позволяющие разработчикам исследовать файлы. В дальнейшем документ следует дополнять по мере изменений модели хранения. Он предназначен для разработчиков etcd и помогает при восстановлении данных.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Предварительные сведения&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для понимания документа полезны следующие вводные материалы:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/data_model/"&gt;обзор модели данных etcd&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://raft.github.io/raft.pdf"&gt;обзор Raft&lt;/a&gt;&#10; (особенно раздел &amp;ldquo;5.3 Log replication&amp;rdquo;).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;h3 id="long-leaving-files"&gt;Долгоживущие файлы&#10;&lt;/h3&gt;&#10;&lt;table&gt;&#10; &lt;tr&gt;&#10; &lt;th&gt;Имя файла&lt;/th&gt;&#10; &lt;th&gt;Высокоуровневое назначение&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;pre&gt;./member/snap/db&lt;/pre&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/B%2B_tree"&gt;b+tree&lt;/a&gt; bbolt&lt;/strong&gt;, хранящее все применённые данные, сведения об авторизации состава кластера и метаданные. Оно знает последний применённый индекс журнала WAL (&lt;a href="https://github.com/etcd-io/etcd/blob/a1ff0d5373335665b3e5f4cb22a538ac63757cb6/server/etcdserver/cindex/cindex.go#L92"&gt;"consistent_index"&lt;/a&gt;).&#10; &lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;pre&gt;./member/snap/0000000000000002-0000000000049425.snap&#10;./member/snap/0000000000000002-0000000000061ace.snap&lt;/pre&gt;&#10; &lt;/td&gt;&#10; &lt;td&gt;&#10; &lt;p&gt;&#10; Периодические &lt;strong&gt;снимки устаревшего хранилища v2&lt;/strong&gt;, содержащие:&#10; &lt;ul&gt;&#10; &lt;li&gt;основные сведения о составе кластера&lt;/li&gt;&#10; &lt;li&gt;версию etcd&lt;/li&gt;&#10; &lt;/ul&gt;&#10; &lt;/p&gt;</description></item><item><title>Гарантии API etcd</title><link>https://pig.center/ru/docs/etcd/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/api_guarantees/</guid><description>&lt;p&gt;etcd — согласованное и долговечное хранилище ключей и значений.&#10;Доступ к нему предоставляют &lt;a href="https://pig.center/ru/docs/etcd/learning/api/#grpc-services"&gt;службы gRPC&lt;/a&gt;&#10;.&#10;etcd обеспечивает наиболее строгие гарантии согласованности и долговечности&#10;для распределённой системы. В этой спецификации перечислены гарантии API etcd.&lt;/p&gt;&#10;&lt;h3 id="apis-to-consider"&gt;Рассматриваемые API&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;KV APIs&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#range"&gt;Range&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#rangestream"&gt;RangeStream&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#put"&gt;Put&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#delete-range"&gt;Delete&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#transaction"&gt;Transaction&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;API наблюдения&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#watch-api"&gt;Watch&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;API аренды&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#obtaining-leases"&gt;Grant&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;[Отзыв][Revoke]&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#keep-alives"&gt;Keep alive&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;API KV позволяет напрямую читать и изменять хранилище ключей и значений.&#10;API наблюдения позволяет подписываться на изменения хранилища.&#10;API аренды позволяет назначать ключу время существования.&lt;/p&gt;</description></item><item><title>etcd в сравнении с другими хранилищами ключей и значений</title><link>https://pig.center/ru/docs/etcd/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/why/</guid><description>&lt;p&gt;Название «etcd» образовано из двух идей: каталога Unix «/etc» и распределённых&#10;(«d»istributed) систем. В «/etc» хранятся данные конфигурации одной системы,&#10;тогда как etcd хранит конфигурацию крупных распределённых систем. Поэтому&#10;распределённый («d»istributed) «/etc» называется «etcd».&lt;/p&gt;&#10;&lt;p&gt;etcd задуман как универсальная основа крупных распределённых систем. Такие&#10;системы не допускают split-brain и готовы ради этого пожертвовать доступностью.&#10;etcd хранит метаданные согласованно и отказоустойчиво. Кластер etcd предоставляет&#10;хранилище ключей и значений с высокой стабильностью, надёжностью, масштабируемостью&#10;и производительностью.&lt;/p&gt;</description></item><item><title>Глоссарий</title><link>https://pig.center/ru/docs/etcd/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/glossary/</guid><description>&lt;p&gt;Этот документ определяет различные термины, используемые в документации, командной строке и исходном коде etcd.&lt;/p&gt;&#10;&lt;h2 id="alarm"&gt;Аварийный сигнал&#10;&lt;/h2&gt;&#10;&lt;p&gt;Сервер etcd подаёт аварийный сигнал, когда для сохранения надёжности кластера требуется вмешательство оператора.&lt;/p&gt;&#10;&lt;h2 id="authentication"&gt;Аутентификация&#10;&lt;/h2&gt;&#10;&lt;p&gt;Аутентификация управляет правами доступа пользователей к ресурсам etcd.&lt;/p&gt;&#10;&lt;h2 id="client"&gt;Клиент&#10;&lt;/h2&gt;&#10;&lt;p&gt;Клиент подключается к кластеру etcd и отправляет служебные запросы: получает пары «ключ — значение», записывает данные или наблюдает за обновлениями.&lt;/p&gt;</description></item><item><title>Настройка локального кластера</title><link>https://pig.center/ru/docs/etcd/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/local_cluster/</guid><description>&lt;p&gt;Для тестирования и разработки быстрее и проще всего настроить локальный кластер. Промышленное развёртывание описано в разделе &lt;a href="https://pig.center/ru/docs/etcd/op-guide/clustering/"&gt;кластеризации&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;h2 id="local-standalone-cluster"&gt;Локальный автономный кластер&#10;&lt;/h2&gt;&#10;&lt;h3 id="starting-a-cluster"&gt;Запуск кластера&#10;&lt;/h3&gt;&#10;&lt;p&gt;Чтобы развернуть автономный кластер etcd, выполните:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-10811d29-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-10811d29-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd&#10;...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Если бинарный файл &lt;code&gt;etcd&lt;/code&gt; отсутствует в текущем рабочем каталоге, он может находиться в &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; или &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Укажите правильный путь при запуске.&lt;/p&gt;&#10;&lt;p&gt;Работающий участник etcd принимает клиентские запросы на &lt;code&gt;localhost:2379&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Интеракция с etcd</title><link>https://pig.center/ru/docs/etcd/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Пользователи чаще всего взаимодействуют с etcd, устанавливая или получая значение ключа. В этом разделе описано, как это сделать с помощью etcdctl — командной строки для взаимодействия с сервером etcd. Концепции, описанные здесь, должны применимы к gRPC&amp;ndash;API или API клиентской библиотеки.&lt;/p&gt;&#10;&lt;p&gt;Версию API &lt;code&gt;2&lt;/code&gt; или &lt;code&gt;3&lt;/code&gt;, которую etcdctl использует для связи с etcd, задаёт&#10;переменная окружения &lt;code&gt;ETCDCTL_API&lt;/code&gt;. По умолчанию etcdctl из master (3.4)&#10;использует API v3, а версии 3.3 и старше — API v2.&lt;/p&gt;</description></item><item><title>Зачем нужен шлюз gRPC</title><link>https://pig.center/ru/docs/etcd/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 использует &lt;a href="https://www.grpc.io/"&gt;gRPC&lt;/a&gt;&#10; как протокол обмена сообщениями. Проект etcd&#10;включает основанный на gRPC &lt;a href="https://github.com/etcd-io/etcd/tree/main/client/v3"&gt;клиент Go&lt;/a&gt;&#10; и утилиту командной строки&#10;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl"&gt;etcdctl&lt;/a&gt;&#10; для взаимодействия с кластером etcd через gRPC. Для языков&#10;без поддержки gRPC etcd предоставляет JSON-&lt;a href="https://github.com/grpc-ecosystem/grpc-gateway"&gt;шлюз gRPC&lt;/a&gt;&#10;. Он служит&#10;RESTful-прокси, преобразующим запросы HTTP/JSON в сообщения gRPC.&lt;/p&gt;&#10;&lt;h2 id="using-grpc-gateway"&gt;Использование шлюза gRPC&#10;&lt;/h2&gt;&#10;&lt;p&gt;Шлюз принимает &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json"&gt;JSON-сопоставление&lt;/a&gt;&#10; определений сообщений&#10;&lt;a href="https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/"&gt;protocol buffer&lt;/a&gt;&#10; etcd. Поля &lt;code&gt;key&lt;/code&gt; и &lt;code&gt;value&lt;/code&gt; определены как массивы&#10;байтов, поэтому в JSON их обязательно кодировать в base64. В следующих примерах&#10;используется &lt;code&gt;curl&lt;/code&gt;, но подойдёт любой клиент HTTP/JSON.&lt;/p&gt;</description></item><item><title>Именование и обнаружение gRPC</title><link>https://pig.center/ru/docs/etcd/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd предоставляет резолвер gRPC для альтернативной системы имён, которая получает конечные точки из etcd при обнаружении служб gRPC. Механизм основан на наблюдении за обновлениями ключей с префиксом имени службы.&lt;/p&gt;&#10;&lt;p&gt;Эта возможность является экспериментальной, поскольку зависит от пакета &lt;a href="https://github.com/grpc/grpc-go/tree/4cedec40eb2ccfbe3f56bb15e894903111ada2d2/resolver"&gt;google.golang.org/grpc/resolver&lt;/a&gt;&#10;, который всё ещё считается экспериментальным в grpc-go.&lt;/p&gt;&#10;&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Использование обнаружения etcd с go-grpc&#10;&lt;/h2&gt;&#10;&lt;p&gt;Клиент etcd предоставляет резолвер gRPC для разрешения конечных точек gRPC с бэкендом etcd. Резолвер инициализируется клиентом etcd:&lt;/p&gt;</description></item><item><title>Встраивание etcd в Go-приложение</title><link>https://pig.center/ru/docs/etcd/dev-guide/golang_embed_pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/golang_embed_pkg/</guid><description>&lt;p&gt;Пакет go etcd &lt;code&gt;embed&lt;/code&gt; предоставляет простой способ встраивания сервера etcd непосредственно в ваше приложение.&lt;/p&gt;&#10;&lt;p&gt;Дополнительные сведения см. в документации пакета &lt;a href="https://pkg.go.dev/go.etcd.io/etcd/server/v3/embed"&gt;embed&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Ограничения системы</title><link>https://pig.center/ru/docs/etcd/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Ограничение размера запроса&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd разработан для обработки небольших пар ключ-значение, характерных для метаданных. Более крупные запросы будут работать, но могут увеличить задержку других запросов. По умолчанию максимальный размер любого запроса составляет 1.5 MiB. Этот лимит можно настроить с помощью флага &lt;code&gt;--max-request-bytes&lt;/code&gt; для сервера etcd.&lt;/p&gt;&#10;&lt;h2 id="storage-size-limit"&gt;Ограничение размера хранилища&#10;&lt;/h2&gt;&#10;&lt;p&gt;По умолчанию ограничение размера хранилища составляет 2 GiB, настраивается с помощью флага &lt;code&gt;--quota-backend-bytes&lt;/code&gt;. 8 GiB — рекомендуемый максимальный размер для обычных сред, etcd выдает предупреждение при запуске, если сконфигурированное значение превышает его.&lt;/p&gt;</description></item><item><title>Возможности etcd</title><link>https://pig.center/ru/docs/etcd/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/features/</guid><description>&lt;p&gt;В этом документе представлен обзор возможностей etcd, помогающий понять их назначение и связанный с ними процесс устаревания. Порядок разработки возможностей etcd описан в &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md"&gt;рекомендациях для разработчиков&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;Возможности etcd проходят три стадии: экспериментальную, стабильную и небезопасную. Получить их список можно командой &lt;code&gt;etcd --help&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="experimental"&gt;Экспериментальные&#10;&lt;/h2&gt;&#10;&lt;p&gt;Чтобы получить обратную связь на раннем этапе, новые возможности обычно добавляются как экспериментальные. Их можно определить по имени флага с префиксом &lt;code&gt;--experimental&lt;/code&gt;. При использовании экспериментальной возможности учитывайте следующее:&lt;/p&gt;</description></item><item><title>Справочник API</title><link>https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;Этот справочник API автоматически создан из указанных файлов &lt;code&gt;.proto&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h5 id="service-auth-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;Auth&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthEnable&lt;/td&gt;&#10; &lt;td&gt;AuthEnableRequest&lt;/td&gt;&#10; &lt;td&gt;AuthEnableResponse&lt;/td&gt;&#10; &lt;td&gt;AuthEnable включает аутентификацию.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthDisable&lt;/td&gt;&#10; &lt;td&gt;AuthDisableRequest&lt;/td&gt;&#10; &lt;td&gt;AuthDisableResponse&lt;/td&gt;&#10; &lt;td&gt;AuthDisable отключает аутентификацию.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthStatus&lt;/td&gt;&#10; &lt;td&gt;AuthStatusRequest&lt;/td&gt;&#10; &lt;td&gt;AuthStatusResponse&lt;/td&gt;&#10; &lt;td&gt;AuthStatus отображает состояние аутентификации.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Authenticate&lt;/td&gt;&#10; &lt;td&gt;AuthenticateRequest&lt;/td&gt;&#10; &lt;td&gt;AuthenticateResponse&lt;/td&gt;&#10; &lt;td&gt;Authenticate обрабатывает запрос аутентификации.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserAdd&lt;/td&gt;&#10; &lt;td&gt;AuthUserAddRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserAddResponse&lt;/td&gt;&#10; &lt;td&gt;UserAdd добавляет нового пользователя. Имя пользователя не может быть пустым.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserGet&lt;/td&gt;&#10; &lt;td&gt;AuthUserGetRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserGetResponse&lt;/td&gt;&#10; &lt;td&gt;UserGet получает подробные сведения о пользователе.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserList&lt;/td&gt;&#10; &lt;td&gt;AuthUserListRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserListResponse&lt;/td&gt;&#10; &lt;td&gt;UserList получает список всех пользователей.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserDelete&lt;/td&gt;&#10; &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;&#10; &lt;td&gt;UserDelete удаляет указанного пользователя.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserChangePassword&lt;/td&gt;&#10; &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;&#10; &lt;td&gt;UserChangePassword изменяет пароль указанного пользователя.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserGrantRole&lt;/td&gt;&#10; &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;&#10; &lt;td&gt;UserGrant предоставляет указанному пользователю роль.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserRevokeRole&lt;/td&gt;&#10; &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;&#10; &lt;td&gt;UserRevokeRole отзывает роль указанного пользователя.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleAdd&lt;/td&gt;&#10; &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;&#10; &lt;td&gt;RoleAdd добавляет новую роль. Имя роли не может быть пустым.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleGet&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;&#10; &lt;td&gt;RoleGet получает подробные сведения о роли.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleList&lt;/td&gt;&#10; &lt;td&gt;AuthRoleListRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleListResponse&lt;/td&gt;&#10; &lt;td&gt;RoleList получает список всех ролей.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleDelete&lt;/td&gt;&#10; &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;&#10; &lt;td&gt;RoleDelete удаляет указанную роль.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleGrantPermission&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;&#10; &lt;td&gt;RoleGrantPermission предоставляет указанной роли разрешение на заданный ключ или диапазон.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleRevokePermission&lt;/td&gt;&#10; &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;&#10; &lt;td&gt;RoleRevokePermission отзывает у указанной роли разрешение на ключ или диапазон.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-cluster-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;Cluster&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberAdd&lt;/td&gt;&#10; &lt;td&gt;MemberAddRequest&lt;/td&gt;&#10; &lt;td&gt;MemberAddResponse&lt;/td&gt;&#10; &lt;td&gt;MemberAdd добавляет участника в кластер.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberRemove&lt;/td&gt;&#10; &lt;td&gt;MemberRemoveRequest&lt;/td&gt;&#10; &lt;td&gt;MemberRemoveResponse&lt;/td&gt;&#10; &lt;td&gt;MemberRemove удаляет существующего участника из кластера.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberUpdate&lt;/td&gt;&#10; &lt;td&gt;MemberUpdateRequest&lt;/td&gt;&#10; &lt;td&gt;MemberUpdateResponse&lt;/td&gt;&#10; &lt;td&gt;MemberUpdate обновляет конфигурацию участника.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberList&lt;/td&gt;&#10; &lt;td&gt;MemberListRequest&lt;/td&gt;&#10; &lt;td&gt;MemberListResponse&lt;/td&gt;&#10; &lt;td&gt;MemberList перечисляет всех участников кластера.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberPromote&lt;/td&gt;&#10; &lt;td&gt;MemberPromoteRequest&lt;/td&gt;&#10; &lt;td&gt;MemberPromoteResponse&lt;/td&gt;&#10; &lt;td&gt;MemberPromote повышает обучающегося участника raft без права голоса до участника raft с правом голоса.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-kv-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;KV&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Range&lt;/td&gt;&#10; &lt;td&gt;RangeRequest&lt;/td&gt;&#10; &lt;td&gt;RangeResponse&lt;/td&gt;&#10; &lt;td&gt;Range получает ключи диапазона из хранилища ключей и значений.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Put&lt;/td&gt;&#10; &lt;td&gt;PutRequest&lt;/td&gt;&#10; &lt;td&gt;PutResponse&lt;/td&gt;&#10; &lt;td&gt;Put помещает заданный ключ в хранилище ключей и значений. Запрос put увеличивает ревизию хранилища и создаёт одно событие в истории событий.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;DeleteRange&lt;/td&gt;&#10; &lt;td&gt;DeleteRangeRequest&lt;/td&gt;&#10; &lt;td&gt;DeleteRangeResponse&lt;/td&gt;&#10; &lt;td&gt;DeleteRange удаляет заданный диапазон из хранилища ключей и значений. Запрос удаления увеличивает ревизию хранилища и создаёт событие удаления в истории для каждого удалённого ключа.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Txn&lt;/td&gt;&#10; &lt;td&gt;TxnRequest&lt;/td&gt;&#10; &lt;td&gt;TxnResponse&lt;/td&gt;&#10; &lt;td&gt;Txn обрабатывает несколько запросов в одной транзакции. Запрос txn увеличивает ревизию хранилища ключей и значений и создаёт события с одной ревизией для каждого выполненного запроса. Многократное изменение одного ключа в одной txn недопустимо.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Compact&lt;/td&gt;&#10; &lt;td&gt;CompactionRequest&lt;/td&gt;&#10; &lt;td&gt;CompactionResponse&lt;/td&gt;&#10; &lt;td&gt;Compact компактизирует историю событий в хранилище ключей и значений etcd. Хранилище следует периодически компактизировать, иначе история событий будет расти бесконечно.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-lease-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;Lease&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseGrant&lt;/td&gt;&#10; &lt;td&gt;LeaseGrantRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseGrantResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseGrant создаёт аренду, которая истекает, если сервер не получает keepAlive в течение заданного срока жизни. При истечении аренды все присоединённые к ней ключи истекают и удаляются. Каждый истёкший ключ создаёт событие удаления в истории событий.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseRevoke&lt;/td&gt;&#10; &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseRevoke отзывает аренду. Все присоединённые к ней ключи истекают и удаляются.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseKeepAlive&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAlive поддерживает аренду активной, передавая потоком запросы поддержания активности от клиента серверу и ответы от сервера клиенту.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseTimeToLive&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLive получает сведения об аренде.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseLeases&lt;/td&gt;&#10; &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseLeases перечисляет все существующие аренды.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-maintenance-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;Maintenance&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Alarm&lt;/td&gt;&#10; &lt;td&gt;AlarmRequest&lt;/td&gt;&#10; &lt;td&gt;AlarmResponse&lt;/td&gt;&#10; &lt;td&gt;Alarm активирует, деактивирует и запрашивает аварийные сигналы о состоянии кластера.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Status&lt;/td&gt;&#10; &lt;td&gt;StatusRequest&lt;/td&gt;&#10; &lt;td&gt;StatusResponse&lt;/td&gt;&#10; &lt;td&gt;Status получает состояние участника.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Defragment&lt;/td&gt;&#10; &lt;td&gt;DefragmentRequest&lt;/td&gt;&#10; &lt;td&gt;DefragmentResponse&lt;/td&gt;&#10; &lt;td&gt;Defragment дефрагментирует базу данных бэкенда участника для освобождения места.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Hash&lt;/td&gt;&#10; &lt;td&gt;HashRequest&lt;/td&gt;&#10; &lt;td&gt;HashResponse&lt;/td&gt;&#10; &lt;td&gt;Hash вычисляет хеш всего пространства ключей бэкенда, включая сегменты key, lease и другие сегменты хранилища. Предназначено ТОЛЬКО для тестирования! Не полагайтесь на операцию в рабочей среде с текущими транзакциями, поскольку Hash не удерживает блокировки MVCC. Для проверки согласованности сегмента &amp;ldquo;key&amp;rdquo; используйте API &amp;ldquo;HashKV&amp;rdquo;.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;HashKV&lt;/td&gt;&#10; &lt;td&gt;HashKVRequest&lt;/td&gt;&#10; &lt;td&gt;HashKVResponse&lt;/td&gt;&#10; &lt;td&gt;HashKV вычисляет хеш всех ключей MVCC до заданной ревизии. Перебирает только сегмент &amp;ldquo;key&amp;rdquo; в хранилище бэкенда.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Snapshot&lt;/td&gt;&#10; &lt;td&gt;SnapshotRequest&lt;/td&gt;&#10; &lt;td&gt;SnapshotResponse&lt;/td&gt;&#10; &lt;td&gt;Snapshot передаёт снимок всего бэкенда от участника клиенту потоком.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MoveLeader&lt;/td&gt;&#10; &lt;td&gt;MoveLeaderRequest&lt;/td&gt;&#10; &lt;td&gt;MoveLeaderResponse&lt;/td&gt;&#10; &lt;td&gt;MoveLeader запрашивает у текущего узла-лидера передачу лидерства назначенному узлу.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Downgrade&lt;/td&gt;&#10; &lt;td&gt;DowngradeRequest&lt;/td&gt;&#10; &lt;td&gt;DowngradeResponse&lt;/td&gt;&#10; &lt;td&gt;Downgrade запрашивает понижение версии, проверяет его допустимость или отменяет его для версии кластера. Поддерживается начиная с etcd 3.5.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-watch-apietcdserverpbrpcproto"&gt;Служба &lt;code&gt;Watch&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Watch&lt;/td&gt;&#10; &lt;td&gt;WatchRequest&lt;/td&gt;&#10; &lt;td&gt;WatchResponse&lt;/td&gt;&#10; &lt;td&gt;Watch наблюдает за происходящими или уже произошедшими событиями. Ввод и вывод являются потоками: входной поток создаёт и отменяет наблюдателей, выходной отправляет события. Один RPC watch может наблюдать несколько диапазонов ключей и одновременно передавать события нескольких наблюдений. Всю историю событий можно наблюдать с последней ревизии компактизации.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmmember-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AlarmMember&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;memberID&lt;/td&gt;&#10; &lt;td&gt;memberID — идентификатор участника, связанного с активированным аварийным сигналом.&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarm&lt;/td&gt;&#10; &lt;td&gt;alarm — тип активированного аварийного сигнала.&lt;/td&gt;&#10; &lt;td&gt;AlarmType&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AlarmRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;action&lt;/td&gt;&#10; &lt;td&gt;action — тип отправляемого запроса аварийного сигнала. Действие может GET состояния сигналов, ACTIVATE сигнал или DEACTIVATE активированный сигнал.&lt;/td&gt;&#10; &lt;td&gt;AlarmAction&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;memberID&lt;/td&gt;&#10; &lt;td&gt;memberID — идентификатор участника, связанного с сигналом. Если memberID равен 0, запрос относится ко всем участникам.&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarm&lt;/td&gt;&#10; &lt;td&gt;alarm — тип аварийного сигнала, рассматриваемого запросом.&lt;/td&gt;&#10; &lt;td&gt;AlarmType&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AlarmResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarms&lt;/td&gt;&#10; &lt;td&gt;alarms — список аварийных сигналов, связанных с запросом.&lt;/td&gt;&#10; &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authdisablerequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthDisableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authdisableresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthDisableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenablerequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthEnableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenableresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthEnableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroleaddrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name — имя роли, добавляемой в систему аутентификации.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroleaddresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroledeleterequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroledeleteresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegetrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegetresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;perm&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) authpb.Permission&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegrantpermissionrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleGrantPermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name — имя роли, которой будет предоставлено разрешение.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;perm&lt;/td&gt;&#10; &lt;td&gt;perm — разрешение, предоставляемое роли.&lt;/td&gt;&#10; &lt;td&gt;authpb.Permission&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegrantpermissionresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleGrantPermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolelistrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolelistresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;roles&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolerevokepermissionrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleRevokePermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;range_end&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolerevokepermissionresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthRoleRevokePermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authstatusrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthStatusRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authstatusresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthStatusResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;enabled&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bool&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;authRevision&lt;/td&gt;&#10; &lt;td&gt;authRevision — текущая ревизия хранилища аутентификации&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuseraddrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;options&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;authpb.UserAddOptions&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;hashedPassword&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuseraddresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserchangepasswordrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserChangePasswordRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name — имя пользователя, пароль которого изменяется.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;password — новый пароль пользователя. Обратите внимание: это поле будет удалено на уровне API.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;hashedPassword&lt;/td&gt;&#10; &lt;td&gt;hashedPassword — новый пароль пользователя. Обратите внимание: это поле будет инициализировано на уровне API.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserchangepasswordresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserChangePasswordResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserdeleterequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name — имя удаляемого пользователя.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserdeleteresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergetrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergetresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;roles&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergrantrolerequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserGrantRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;user&lt;/td&gt;&#10; &lt;td&gt;user — имя пользователя, которому следует предоставить указанную роль.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;role — имя роли, предоставляемой пользователю.&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergrantroleresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserGrantRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserlistrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserlistresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;users&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserrevokerolerequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserRevokeRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserrevokeroleresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthUserRevokeRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenticaterequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthenticateRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenticateresponse-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;AuthenticateResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;token&lt;/td&gt;&#10; &lt;td&gt;token — авторизованный токен, который можно использовать в последующих RPC&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-compactionrequest-apietcdserverpbrpcproto"&gt;Сообщение &lt;code&gt;CompactionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;CompactionRequest компактизирует хранилище ключей и значений до заданной ревизии. Все замещённые ключи с ревизией меньше ревизии компактизации удаляются.&lt;/p&gt;</description></item><item><title>Справочник API: конкурентность</title><link>https://pig.center/ru/docs/etcd/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;Этот справочник API автоматически создан из указанных файлов &lt;code&gt;.proto&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h5 id="service-lock-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;служба &lt;code&gt;Lock&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;Служба блокировок предоставляет клиентские средства блокировки через интерфейс gRPC.&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Метод&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип запроса&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип ответа&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Lock&lt;/td&gt;&#10; &lt;td&gt;LockRequest&lt;/td&gt;&#10; &lt;td&gt;LockResponse&lt;/td&gt;&#10; &lt;td&gt;Lock получает распределённую совместную блокировку с указанным именем. При успехе возвращается уникальный ключ, существующий, пока вызывающая сторона удерживает блокировку. Вместе с транзакциями ключ позволяет безопасно гарантировать, что etcd обновляется только при владении блокировкой. Блокировка удерживается до вызова Unlock для ключа или истечения аренды владельца.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Unlock&lt;/td&gt;&#10; &lt;td&gt;UnlockRequest&lt;/td&gt;&#10; &lt;td&gt;UnlockResponse&lt;/td&gt;&#10; &lt;td&gt;Unlock принимает ключ, возвращённый Lock, и освобождает блокировку. Следующий ожидающий вызов Lock пробуждается и получает владение блокировкой.&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-lockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;сообщение &lt;code&gt;LockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name — идентификатор получаемой распределённой совместной блокировки.&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;lease&lt;/td&gt;&#10; &lt;td&gt;lease — идентификатор аренды, привязанной к владению блокировкой. Если удерживающая блокировку аренда истекает или отзывается, блокировка освобождается автоматически. Вызовы Lock с одной арендой считаются одним получением; повторная блокировка с той же арендой ничего не делает.&lt;/td&gt;&#10; &lt;td&gt;int64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-lockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;сообщение &lt;code&gt;LockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;key — ключ, существующий в etcd, пока вызывающая Lock сторона владеет блокировкой. Пользователи не должны изменять ключ, иначе поведение блокировки не определено.&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-unlockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;сообщение &lt;code&gt;UnlockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;key — ключ владения блокировкой, выданный Lock.&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-unlockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;сообщение &lt;code&gt;UnlockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;Поле&lt;/th&gt;&#10; &lt;th scope="col"&gt;Описание&lt;/th&gt;&#10; &lt;th scope="col"&gt;Тип&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-election-serveretcdserverapiv3electionv3electionpbv3electionproto"&gt;служба &lt;code&gt;Election&lt;/code&gt; (server/etcdserver/api/v3election/v3electionpb/v3election.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;Служба выборов предоставляет клиентские средства выборов через интерфейс gRPC.&lt;/p&gt;</description></item><item><title>Аутентификация</title><link>https://pig.center/ru/docs/etcd/op-guide/authentication/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/authentication/authentication/</guid><description>&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; для аутентификации:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-2cb198a2-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="24"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-2cb198a2-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ETCDCTL_API&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:2379&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role root root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add user0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role user0 role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; auth &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# now all client requests go through auth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 put foo bar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# user0 can read the key foo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="note"&gt;Примечание:&#10;&lt;/h3&gt;&#10;&lt;p&gt;Это всего лишь заглушка, которую необходимо заполнить и обновить, добавив больше информации об аутентификации. Текст выше — всего лишь пример кода.&lt;/p&gt;</description></item><item><title>Параметры конфигурации</title><link>https://pig.center/ru/docs/etcd/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/configuration/</guid><description>&lt;p&gt;etcd можно настроить следующими способами:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;Флаги командной строки&lt;/a&gt;&#10;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Переменные окружения&lt;/strong&gt;: каждому флагу соответствует переменная окружения&#10;с тем же именем, префиксом &lt;code&gt;ETCD_&lt;/code&gt;, прописными буквами и форматом&#10;&lt;a href="https://en.wikipedia.org/wiki/Snake_case"&gt;snake case&lt;/a&gt;&#10;. Например, &lt;code&gt;--some-flag&lt;/code&gt; соответствует &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;Файл конфигурации&lt;/a&gt;&#10;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;Внимание&lt;/strong&gt;: при сочетании разных способов конфигурации действуют следующие&#10;правила.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Флаги командной строки имеют приоритет над переменными окружения.&lt;/li&gt;&#10;&lt;li&gt;Если указан &lt;em&gt;файл конфигурации&lt;/em&gt;, все флаги командной строки и переменные окружения &lt;strong&gt;игнорируются&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="command-line-flags"&gt;Флаги командной строки&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ниже флаги представлены в формате &lt;code&gt;--flag-name DEFAULT_VALUE&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Управление доступом на основе ролей</title><link>https://pig.center/ru/docs/etcd/op-guide/authentication/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/authentication/rbac/</guid><description>&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;p&gt;Аутентификация появилась в etcd 2.1. В API etcd v3 интерфейс API и пользовательский&#10;интерфейс аутентификации немного изменены для соответствия новой модели данных.&#10;Это руководство поможет настроить базовую аутентификацию и управление доступом&#10;на основе ролей в etcd v3.&lt;/p&gt;&#10;&lt;h2 id="special-users-and-roles"&gt;Специальные пользователи и роли&#10;&lt;/h2&gt;&#10;&lt;p&gt;Существует один специальный пользователь &lt;code&gt;root&lt;/code&gt; и одна специальная роль &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="user-root"&gt;Пользователь &lt;code&gt;root&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;Пользователя &lt;code&gt;root&lt;/code&gt; с полным доступом к etcd необходимо создать до включения&#10;аутентификации. Он предназначен для административных задач: управления ролями&#10;и обычными пользователями. Пользователь &lt;code&gt;root&lt;/code&gt; должен иметь роль &lt;code&gt;root&lt;/code&gt; и может&#10;изменять любые данные в etcd.&lt;/p&gt;</description></item><item><title>Модель транспортной безопасности</title><link>https://pig.center/ru/docs/etcd/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/security/</guid><description>&lt;p&gt;etcd поддерживает автоматический TLS и аутентификацию по клиентским сертификатам как для связи клиентов с сервером, так и для связи одноранговых узлов (серверов друг с другом внутри кластера). &lt;strong&gt;Обратите внимание: по умолчанию etcd не включает &lt;a href="https://pig.center/ru/docs/etcd/op-guide/authentication/"&gt;аутентификацию на основе RBAC&lt;/a&gt;&#10; и аутентификацию на транспортном уровне, чтобы упростить начало работы с базой данных. Кроме того, изменение этого значения по умолчанию нарушило бы совместимость проекта, установленную с 2013 года. Кластер etcd без включённых функций безопасности может открыть свои данные любым клиентам.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Руководство по кластеризации</title><link>https://pig.center/ru/docs/etcd/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;p&gt;При статическом запуске кластера etcd каждый участник должен знать других участников кластера. В некоторых случаях IP-адреса участников заранее неизвестны. Тогда кластер etcd можно инициализировать с помощью службы обнаружения.&lt;/p&gt;&#10;&lt;p&gt;После запуска кластера etcd участники добавляются и удаляются посредством &lt;a href="https://pig.center/ru/docs/etcd/op-guide/runtime-configuration/"&gt;динамического изменения конфигурации&lt;/a&gt;&#10;. Чтобы лучше понять конструкцию этого механизма, рекомендуется прочитать &lt;a href="https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/"&gt;документ о конструкции динамической конфигурации&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;В руководстве рассматриваются следующие механизмы начальной инициализации кластера etcd:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#static"&gt;Статическая инициализация&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#etcd-discovery"&gt;Обнаружение etcd&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dns-discovery"&gt;Обнаружение DNS&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Каждый механизм будет использован для создания кластера etcd из трёх машин со следующими параметрами:&lt;/p&gt;</description></item><item><title>Запуск кластеров etcd в контейнерах</title><link>https://pig.center/ru/docs/etcd/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/container/</guid><description>&lt;p&gt;В этом руководстве показано, как запустить etcd в Docker с помощью &lt;a href="https://pig.center/ru/docs/etcd/op-guide/clustering/#static"&gt;процесса статической начальной инициализации&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;h2 id="docker"&gt;Docker&#10;&lt;/h2&gt;&#10;&lt;p&gt;Чтобы предоставить клиентам вне узла Docker доступ к API etcd, используйте IP-адрес узла контейнера. Способ получения IP-адреса подробно описан в документации &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt;&#10;. Также можно передать команде &lt;code&gt;docker run&lt;/code&gt; флаг &lt;code&gt;--net=host&lt;/code&gt;, чтобы не помещать контейнер в отдельный сетевой стек.&lt;/p&gt;&#10;&lt;h3 id="running-a-single-node-etcd"&gt;Запуск одного узла etcd&#10;&lt;/h3&gt;&#10;&lt;p&gt;При настройке etcd используйте IP-адрес узла:&lt;/p&gt;</description></item><item><title>Запуск кластеров etcd как StatefulSet Kubernetes</title><link>https://pig.center/ru/docs/etcd/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/kubernetes/</guid><description>&lt;p&gt;Ниже показано, как выполнить &lt;a href="https://pig.center/ru/docs/etcd/op-guide/clustering/#static"&gt;статическую начальную инициализацию&lt;/a&gt;&#10; в виде StatefulSet Kubernetes.&lt;/p&gt;&#10;&lt;h2 id="example-manifest"&gt;Пример манифеста&#10;&lt;/h2&gt;&#10;&lt;p&gt;Этот манифест содержит службу и StatefulSet для развёртывания статического кластера etcd в Kubernetes.&lt;/p&gt;&#10;&lt;p&gt;Если скопировать содержимое манифеста в файл &lt;code&gt;etcd.yaml&lt;/code&gt;, его можно применить к кластеру следующей командой.&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-f9d5f19e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-f9d5f19e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl apply --filename etcd.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;После применения дождитесь готовности подов.&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-f9d5f19e-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="5"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-f9d5f19e-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get pods&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME READY STATUS RESTARTS AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd-0 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd-1 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcd-2 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Используемый в примере контейнер содержит etcdctl, который можно вызывать непосредственно внутри подов.&lt;/p&gt;</description></item><item><title>Режимы отказа</title><link>https://pig.center/ru/docs/etcd/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/failures/</guid><description>&lt;p&gt;В крупных развёртываниях машин отказы неизбежны. Машина выходит из строя при неисправности оборудования или программного обеспечения. Несколько машин могут отказать одновременно из-за перебоя питания или проблем с сетью. Разные виды отказов также могут происходить одновременно; перечислить все возможные случаи практически невозможно.&lt;/p&gt;&#10;&lt;p&gt;В этом разделе описаны виды отказов и механизмы, позволяющие etcd сохранять работоспособность. Почти любой конкретный отказ можно отнести к одной из этих категорий. Чтобы подготовиться к редким или &lt;a href="https://pig.center/ru/docs/etcd/op-guide/recovery/"&gt;невосстановимым отказам&lt;/a&gt;&#10;, всегда создавайте &lt;a href="https://pig.center/ru/docs/etcd/op-guide/maintenance/#snapshot-backup"&gt;резервные копии&lt;/a&gt;&#10; кластера etcd.&lt;/p&gt;</description></item><item><title>Восстановление после аварии</title><link>https://pig.center/ru/docs/etcd/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/recovery/</guid><description>&lt;p&gt;etcd рассчитан на отказы машин. Кластер etcd автоматически восстанавливается&#10;после временных сбоев, например перезагрузки машины, и допускает до &lt;em&gt;(N-1)/2&lt;/em&gt;&#10;постоянных отказов в кластере из N участников. При постоянном отказе из-за&#10;неисправности оборудования или повреждения диска участник теряет доступ к&#10;кластеру. Если кластер навсегда теряет более &lt;em&gt;(N-1)/2&lt;/em&gt; участников, происходит&#10;катастрофический отказ с безвозвратной потерей кворума. Без кворума кластер не&#10;может достичь консенсуса и продолжать принимать обновления.&lt;/p&gt;&#10;&lt;p&gt;Для восстановления после катастрофического отказа etcd v3 предоставляет&#10;средства снимков и восстановления, позволяющие воссоздать кластер без потери&#10;данных ключей v3. Восстановление ключей v2 описано в &lt;a href="https://etcd.io/docs/v2.3/admin_guide#disaster-recovery"&gt;руководстве администратора v2&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Шлюз etcd</title><link>https://pig.center/ru/docs/etcd/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;Что такое шлюз etcd&#10;&lt;/h2&gt;&#10;&lt;p&gt;Шлюз etcd — простой TCP-прокси, пересылающий сетевые данные кластеру etcd. Шлюз не хранит состояния и работает прозрачно: он не анализирует клиентские запросы и не вмешивается в ответы кластера. Он не завершает TLS-соединения, не выполняет TLS-рукопожатия от имени клиентов и не проверяет защищённость соединения.&lt;/p&gt;&#10;&lt;p&gt;Шлюз поддерживает несколько конечных точек серверов etcd и использует простую циклическую политику. Он направляет трафик только доступным конечным точкам и скрывает от клиентов отказы. В будущем могут появиться другие политики повторных попыток, например взвешенная циклическая.&lt;/p&gt;</description></item><item><title>Прокси gRPC</title><link>https://pig.center/ru/docs/etcd/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/grpc_proxy/</guid><description>&lt;p&gt;Прокси gRPC — это не сохраняющий состояние обратный прокси etcd, работающий на уровне gRPC (L7). Он предназначен для снижения общей вычислительной нагрузки на основной кластер etcd. Для горизонтального масштабирования прокси объединяет запросы API наблюдения и аренды. Для защиты кластера от злоупотребляющих клиентов он кэширует запросы диапазонов ключей.&lt;/p&gt;&#10;&lt;p&gt;Прокси gRPC поддерживает несколько конечных точек сервера etcd. При запуске прокси случайным образом выбирает одну конечную точку сервера etcd. Она обслуживает все запросы, пока прокси не обнаружит её отказ. Обнаружив отказ конечной точки, прокси gRPC переключается на другую доступную точку, скрывая сбой от клиентов. В будущем могут поддерживаться и другие политики повторных попыток, например взвешенный циклический выбор.&lt;/p&gt;</description></item><item><title>Рекомендации по оборудованию</title><link>https://pig.center/ru/docs/etcd/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/hardware/</guid><description>&lt;p&gt;Для разработки и тестирования etcd обычно хорошо работает с ограниченными ресурсами; его часто запускают на ноутбуке или дешёвой облачной машине. Однако для правильной эксплуатации промышленных кластеров полезны рекомендации по оборудованию. Это не строгие правила, а хорошая отправная точка для надёжного развёртывания. Перед вводом в эксплуатацию всегда проверяйте систему с имитацией рабочей нагрузки.&lt;/p&gt;&#10;&lt;h2 id="cpus"&gt;CPU&#10;&lt;/h2&gt;&#10;&lt;p&gt;Немногим развёртываниям etcd требуется большая вычислительная мощность. Типичному кластеру для стабильной работы достаточно от двух до четырёх ядер.&#10;Сильно нагруженные развёртывания, обслуживающие тысячи клиентов или десятки тысяч запросов в секунду, обычно ограничены CPU, поскольку etcd может отдавать запросы из памяти. Им, как правило, требуется от восьми до шестнадцати выделенных ядер.&lt;/p&gt;</description></item><item><title>Обслуживание</title><link>https://pig.center/ru/docs/etcd/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для сохранения надёжности кластер etcd нуждается в периодическом обслуживании. В зависимости от требований использующего etcd приложения такое обслуживание обычно можно автоматизировать и выполнять без простоя или существенного снижения производительности.&lt;/p&gt;&#10;&lt;p&gt;Все операции обслуживания etcd управляют ресурсами хранилища, занятыми пространством ключей etcd. Недостаточный контроль его размера предотвращается квотами дискового пространства: если у участника etcd заканчивается место, квота активирует аварийные сигналы для всего кластера и переводит систему в режим обслуживания с ограниченными операциями. Чтобы не исчерпать место для записи в пространство ключей, его историю необходимо компактизировать. Само дисковое пространство можно освободить дефрагментацией участников etcd. Наконец, регулярное резервное копирование состояния участника с помощью снимков позволяет восстановиться после непреднамеренной логической потери или повреждения данных, вызванных ошибкой эксплуатации.&lt;/p&gt;</description></item><item><title>Мониторинг etcd</title><link>https://pig.center/ru/docs/etcd/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/monitoring/</guid><description>&lt;p&gt;Каждый сервер etcd предоставляет локальные сведения мониторинга через конечные&#10;точки HTTP на клиентском порту. Эти данные полезны для проверки состояния системы&#10;и отладки кластера.&lt;/p&gt;&#10;&lt;h2 id="debug-endpoint"&gt;Конечная точка отладки&#10;&lt;/h2&gt;&#10;&lt;p&gt;Если задан &lt;code&gt;--log-level=debug&lt;/code&gt;, сервер etcd экспортирует отладочные сведения по&#10;пути &lt;code&gt;/debug&lt;/code&gt; на клиентском порту. Используйте &lt;code&gt;--log-level=debug&lt;/code&gt; осторожно:&#10;он снижает производительность и включает подробное ведение журнала.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;/debug/pprof&lt;/code&gt; — стандартная конечная точка профилирования среды выполнения Go.&#10;Она позволяет профилировать использование CPU, кучи, мьютексов и goroutine.&#10;В примере &lt;code&gt;go tool pprof&lt;/code&gt; получает 10 функций, на которые etcd тратит больше всего времени:&lt;/p&gt;</description></item><item><title>Производительность</title><link>https://pig.center/ru/docs/etcd/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Понимание производительности&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd обеспечивает стабильную и устойчиво высокую производительность. Её определяют два фактора: задержка и пропускная способность. Задержка — время выполнения одной операции. Пропускная способность — общее число операций, завершённых за определённый период. Обычно средняя задержка растёт вместе с общей пропускной способностью, когда etcd принимает параллельные клиентские запросы. В типичной облачной среде, например на стандартной машине &lt;code&gt;n-4&lt;/code&gt; в Google Compute Engine (GCE) или сопоставимой машине AWS, кластер etcd из трёх участников при небольшой нагрузке завершает запрос менее чем за одну миллисекунду, а при высокой выполняет более 30,000 запросов в секунду.&lt;/p&gt;</description></item><item><title>Устройство реконфигурации во время выполнения</title><link>https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Реконфигурация во время выполнения — одна из самых сложных и подверженных ошибкам возможностей распределённой системы, особенно основанной на консенсусе системы вроде etcd.&lt;/p&gt;&#10;&lt;p&gt;Ниже описано устройство команд реконфигурации etcd и способы решения связанных проблем.&lt;/p&gt;&#10;&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Двухфазное изменение конфигурации сохраняет безопасность кластера&#10;&lt;/h2&gt;&#10;&lt;p&gt;В etcd каждая реконфигурация во время выполнения в целях безопасности проходит &lt;a href="https://pig.center/ru/docs/etcd/op-guide/runtime-configuration/#add-a-new-member"&gt;две фазы&lt;/a&gt;&#10;. Например, чтобы добавить участника, сначала сообщите кластеру новую конфигурацию, а затем запустите участника.&lt;/p&gt;</description></item><item><title>Динамическое изменение конфигурации</title><link>https://pig.center/ru/docs/etcd/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd поддерживает поэтапное изменение конфигурации во время работы, позволяя&#10;обновлять состав кластера без остановки.&lt;/p&gt;&#10;&lt;p&gt;Запросы изменения конфигурации обрабатываются только при работающем большинстве&#10;участников. В производственной среде &lt;strong&gt;настоятельно рекомендуется&lt;/strong&gt; кластер&#10;размером более двух. Удалять участника из кластера из двух участников небезопасно:&#10;его большинство также равно двум, поэтому ошибка во время удаления может&#10;остановить кластер и потребовать &lt;a href="#restart-cluster-from-majority-failure"&gt;перезапуска после потери большинства&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;Архитектура описана в &lt;a href="https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/"&gt;документе о динамическом изменении конфигурации&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;h2 id="reconfiguration-use-cases"&gt;Сценарии реконфигурации&#10;&lt;/h2&gt;&#10;&lt;p&gt;В этом разделе рассмотрены распространённые причины изменения конфигурации.&#10;Обычно это сочетания добавления и удаления участников, описанные в разделе&#10;&lt;a href="#cluster-reconfiguration-operations"&gt;Операции изменения конфигурации кластера&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Поддерживаемые платформы</title><link>https://pig.center/ru/docs/etcd/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;Уровни поддержки&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd работает на разных платформах, однако предоставляемые гарантии зависят от&#10;уровня поддержки платформы:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Уровень 1&lt;/strong&gt;: полностью поддерживается &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS"&gt;сопровождающими etcd&lt;/a&gt;&#10;; гарантируется&#10;прохождение всех тестов, включая функциональные тесты и тесты надёжности.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Уровень 2&lt;/strong&gt;: гарантируется прохождение интеграционных и сквозных тестов, но&#10;не обязательно функциональных тестов или тестов надёжности.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Уровень 3&lt;/strong&gt;: гарантируется успешная сборка; тестирование может быть минимальным&#10;или отсутствовать, поэтому платформу следует считать &lt;em&gt;нестабильной&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="current-support"&gt;Текущая поддержка&#10;&lt;/h2&gt;&#10;&lt;p&gt;В следующей таблице перечислены поддерживаемые платформы и соответствующие&#10;уровни поддержки etcd:&lt;/p&gt;</description></item><item><title>Версионирование</title><link>https://pig.center/ru/docs/etcd/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/versioning/</guid><description>&lt;p&gt;Данный документ описывает версии, поддерживаемые проектом etcd.&lt;/p&gt;&#10;&lt;h2 id="service-versioning-and-supported-versions"&gt;Версионирование сервиса и поддерживаемые версии&#10;&lt;/h2&gt;&#10;&lt;p&gt;Версии etcd выражаются как &lt;strong&gt;x.y.z&lt;/strong&gt;, где &lt;strong&gt;x&lt;/strong&gt; — мажорная версия, &lt;strong&gt;y&lt;/strong&gt; — минорная версия, а &lt;strong&gt;z&lt;/strong&gt; — версия исправления, в соответствии с терминологией &lt;a href="https://semver.org/"&gt;Semantic Versioning&lt;/a&gt;&#10;.&lt;br&gt;&#10;Новые минорные версии могут добавлять дополнительные функции в API.&lt;/p&gt;&#10;&lt;p&gt;Проект etcd поддерживает ветки релизов для текущей версии и предыдущего выпуска. Например, когда v3.5 является текущей версией, поддерживается v3.4. Когда выпускается v3.6, v3.4 прекращает поддержку.&lt;/p&gt;</description></item><item><title>Повреждение данных</title><link>https://pig.center/ru/docs/etcd/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/data_corruption/</guid><description>&lt;p&gt;В etcd встроено автоматическое обнаружение повреждения данных, предотвращающее расхождение состояния участников.&lt;/p&gt;&#10;&lt;h2 id="enabling-data-corruption-detection"&gt;Включение обнаружения повреждения данных&#10;&lt;/h2&gt;&#10;&lt;p&gt;Повреждение данных можно обнаруживать с помощью:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Начальной проверки, включаемой флагом &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Периодической проверки:&#10;&lt;ul&gt;&#10;&lt;li&gt;Хеша сжатой ревизии, включаемой флагом &lt;code&gt;--experimental-compact-hash-check-enabled&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Хеша последней ревизии, включаемой флагом &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Начальная проверка выполняется при начальной инициализации участника etcd.&#10;Участник сравнивает своё постоянное состояние с другими участниками и завершает работу при несовпадении.&lt;/p&gt;&#10;&lt;p&gt;Обе периодические проверки выполняются лидером уже работающего кластера.&#10;Лидер сравнивает своё постоянное состояние с другими участниками и при несовпадении подаёт аварийный сигнал CORRUPT.&#10;Обе проверки решают одну задачу, однако для баланса между производительностью и временем обнаружения стоит включить обе.&lt;/p&gt;</description></item><item><title>Тестирование использования памяти хранилищем</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;&#10;&lt;p&gt;Физическую память потребляют два компонента хранилища etcd. Для ускорения поиска ключей процесс etcd выделяет &lt;em&gt;индекс в памяти&lt;/em&gt;. Управляемый операционной системой &lt;em&gt;страничный кеш&lt;/em&gt; процесса хранит недавно прочитанные с диска данные для быстрого повторного использования.&lt;/p&gt;&#10;&lt;p&gt;Индекс в памяти хранит все ключи в структуре данных &lt;a href="https://en.wikipedia.org/wiki/B-tree"&gt;B-tree&lt;/a&gt;&#10; вместе с указателями на данные на диске — значения. Каждый ключ в B-tree может содержать несколько указателей на разные версии значения. Поэтому теоретическое потребление памяти индексом можно приблизительно оценить формулой:&lt;/p&gt;</description></item><item><title>Тестирование использования памяти наблюдателями</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Возможности наблюдения активно развиваются, поэтому потребление памяти может меняться. Мы не ожидаем, что оно значительно превысит приведённые ниже значения.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Одна из основных целей etcd — поддерживать очень большое число наблюдателей, выполняющих огромное количество наблюдений. etcd стремится поддерживать O(10k) клиентов, O(100K) потоков наблюдения (O(10) потоков на клиента) и O(10M) наблюдений в сумме (O(100) наблюдений на поток). На каждое отдельное наблюдение приходится наибольшая часть общего потребления памяти etcd, поэтому именно оно находится в центре текущей и будущей оптимизации.&lt;/p&gt;</description></item><item><title>Тестирование производительности etcd v3</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Физические машины&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE тип машинного оборудования n1-highcpu-2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x выделенный локальный диск SSD, подключённый под /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1x выделенный медленный диск для ОС&lt;/li&gt;&#10;&lt;li&gt;1.8 GB памяти&lt;/li&gt;&#10;&lt;li&gt;2x процессора&lt;/li&gt;&#10;&lt;li&gt;версия etcd 2.2.0&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;etcd Кластер&#10;&lt;/h2&gt;&#10;&lt;p&gt;1 участник etcd, работающий в режиме демонстрации v3&lt;/p&gt;&#10;&lt;h2 id="testing"&gt;Тестирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Используйте &lt;a href="https://github.com/etcd-io/etcd/tree/main/tools/benchmark"&gt;инструмент тестирования производительности etcd v3&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;h2 id="performance"&gt;Производительность&#10;&lt;/h2&gt;&#10;&lt;h3 id="reading-one-single-key"&gt;чтение одного ключа&#10;&lt;/h3&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;размер ключа в байтах&lt;/th&gt;&#10; &lt;th scope="col"&gt;количество клиентов&lt;/th&gt;&#10; &lt;th scope="col"&gt;чтение QPS&lt;/th&gt;&#10; &lt;th scope="col"&gt;90-й процентиль задержки (мс)&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;256&lt;/td&gt;&#10; &lt;td&gt;1&lt;/td&gt;&#10; &lt;td&gt;2716&lt;/td&gt;&#10; &lt;td&gt;0.4&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;256&lt;/td&gt;&#10; &lt;td&gt;64&lt;/td&gt;&#10; &lt;td&gt;16623&lt;/td&gt;&#10; &lt;td&gt;6.1&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;256&lt;/td&gt;&#10; &lt;td&gt;256&lt;/td&gt;&#10; &lt;td&gt;16622&lt;/td&gt;&#10; &lt;td&gt;21.7&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Производительность почти такая же, как и у сервера с пустым обработчиком.&lt;/p&gt;</description></item><item><title>Тестирование памяти etcd v2.2.0-rc</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Физическая машина&#10;&lt;/h2&gt;&#10;&lt;p&gt;Тип машины GCE n1-standard-2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x выделенный локальный SSD, подключённый в /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1x выделенный медленный диск для ОС&lt;/li&gt;&#10;&lt;li&gt;7.5 GB памяти&lt;/li&gt;&#10;&lt;li&gt;2x CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd"&gt;etcd&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-1fb21f6d-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-1fb21f6d-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git&#10;Git SHA: 103cb5c&#10;Go Version: go1.5&#10;Go OS/Arch: linux/amd64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="testing"&gt;Тестирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Запускается кластер etcd из 3 участников, каждый из которых использует 2 ядра.&lt;/p&gt;</description></item><item><title>Тестирование производительности etcd v2.2.0-rc</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Физическая машина&#10;&lt;/h2&gt;&#10;&lt;p&gt;Тип машины GCE n1-highcpu-2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x выделенный локальный SSD, подключённый в /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1x выделенный медленный диск для ОС&lt;/li&gt;&#10;&lt;li&gt;1.8 GB памяти&lt;/li&gt;&#10;&lt;li&gt;2x CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;Кластер etcd&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 участника etcd 2.2.0-rc, каждый работает на отдельной машине.&lt;/p&gt;&#10;&lt;p&gt;Точные версии:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-259af033-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-259af033-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git&#10;Git SHA: 59a5a7e&#10;Go Version: go1.4.2&#10;Go OS/Arch: linux/amd64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Кроме того, базовая производительность измеряется на кластере из 3 участников etcd 2.1.0 стадии alpha. Текущий коммит etcd — &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144"&gt;c7146bd5&lt;/a&gt;&#10;, тот же, что использован в &lt;a href="https://pig.center/ru/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/"&gt;тестировании etcd 2.1&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Тестирование производительности etcd v2.2.0</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Физические машины&#10;&lt;/h2&gt;&#10;&lt;p&gt;Тип машины GCE n1-highcpu-2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x выделенный локальный SSD, используемый как каталог данных etcd&lt;/li&gt;&#10;&lt;li&gt;1x выделенный медленный диск для ОС&lt;/li&gt;&#10;&lt;li&gt;1.8 GB памяти&lt;/li&gt;&#10;&lt;li&gt;2x CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;Кластер etcd&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 участника etcd 2.2.0, каждый работает на отдельной машине.&lt;/p&gt;&#10;&lt;p&gt;Точные версии:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-3f6da3a0-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-3f6da3a0-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0&#10;Git SHA: e4561dd&#10;Go Version: go1.5&#10;Go OS/Arch: linux/amd64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="testing"&gt;Тестирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Запустите ещё одну машину вне кластера etcd и примените &lt;a href="https://github.com/rakyll/hey"&gt;инструмент HTTP-тестирования &lt;code&gt;hey&lt;/code&gt;&lt;/a&gt;&#10; с патчем повторного использования соединений для отправки запросов каждому участнику кластера etcd. Патч и шаги для воспроизведения процедуры приведены в &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark"&gt;инструкции по тестированию&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Тестирование производительности etcd v2.1.0</title><link>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Физические машины&#10;&lt;/h2&gt;&#10;&lt;p&gt;Тип машины GCE n1-highcpu-2&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x выделенный локальный SSD, подключённый в /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1x выделенный медленный диск для ОС&lt;/li&gt;&#10;&lt;li&gt;1.8 GB памяти&lt;/li&gt;&#10;&lt;li&gt;2x CPU&lt;/li&gt;&#10;&lt;li&gt;etcd версии 2.1.0 alpha&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;Кластер etcd&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 участника etcd, каждый работает на отдельной машине&lt;/p&gt;&#10;&lt;h2 id="testing"&gt;Тестирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Запустите ещё одну машину и с помощью &lt;a href="https://github.com/rakyll/hey"&gt;инструмента HTTP-тестирования hey&lt;/a&gt;&#10; отправляйте запросы каждому участнику etcd. Подробные инструкции приведены в &lt;a href="https://github.com/etcd-io/etcd/tree/main/hack/benchmark"&gt;руководстве по разработке тестов производительности&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Обновление кластеров etcd и приложений</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;В этом разделе содержатся документы, специфичные для обновления кластеров etcd и приложений.&lt;/p&gt;&#10;&lt;h2 id="upgrade-policy"&gt;Политика обновления&#10;&lt;/h2&gt;&#10;&lt;p&gt;Перед обновлением обратите внимание, что etcd поддерживает только следующие два случая обновления:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Обновление патча:&lt;/strong&gt; обновление между выпусками патча в рамках одной минорной версии (e.g. 3.7.0 - 3.7.1).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Минорное обновление:&lt;/strong&gt; обновление по одной минорной версии за раз (e.g. 3.6 - 3.7). Обновления, пропускающие минорную версию, не поддерживаются и, скорее всего, завершатся неудачно. Обновитесь до последней версии патча перед обновлением до следующей минорной версии.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Обновление кластера etcd v3.x&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_1/"&gt;Обновление etcd с 3.0 до 3.1&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_2/"&gt;Обновление etcd с 3.1 до 3.2&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_3/"&gt;Обновление etcd с 3.2 до 3.3&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_4/"&gt;Обновление etcd с 3.3 до 3.4&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_5/"&gt;Обновление etcd с 3.4 до 3.5&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_6/"&gt;Обновление etcd с 3.5 до 3.6&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_7/"&gt;Обновление etcd с 3.6 до 3.7&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="upgrading-from-etcd-v23"&gt;Обновление с etcd v2.3&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/upgrades/upgrade_3_0/"&gt;Обновление кластера v2.3 до v3.0&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Снижение версии кластеров etcd и приложений</title><link>https://pig.center/ru/docs/etcd/downgrades/downgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/downgrades/downgrading-etcd/</guid><description>&lt;p&gt;В этом разделе содержатся документы, специфичные для понижения версии кластеров etcd и приложений.&lt;/p&gt;&#10;&lt;h2 id="downgrading-an-etcd-v3x-cluster"&gt;Снижение версии кластера etcd v3.x&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/downgrades/downgrade_3_5/"&gt;Понижение версии etcd с 3.5 до 3.4&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/downgrades/downgrade_3_6/"&gt;Понижение версии etcd с 3.6 до 3.5&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/downgrades/downgrade_3_7/"&gt;Понижение версии etcd с 3.7 до 3.6&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Обновление etcd с v3.5 до v3.6</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_6/</guid><description>&lt;p&gt;В общем случае переход с etcd v3.5 на v3.6 можно выполнить как скользящее обновление без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.5 и заменять их процессами etcd v3.6&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.6 кластеру становятся доступны новые возможности v3.6&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#upgrade-procedure"&gt;начала обновления&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;h4 id="update-35"&gt;Обновление 3.5&#10;&lt;/h4&gt;&#10;&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Важно&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Перед обновлением до 3.6 убедитесь, что &lt;a href="https://etcd.io/blog/2026/july-patch-release/"&gt;все участники 3.5 обновлены до 3.5.32 или более поздней версии&lt;/a&gt;&#10;. Корректирующие выпуски с 3.5.24 по 3.5.26 устраняют несколько потенциальных препятствий обновлению; в &lt;a href="https://etcd.io/blog/2026/july-patch-release/"&gt;3.5.32&lt;/a&gt;&#10; добавлен &lt;code&gt;--v2-deprecation=write-only-skip-check&lt;/code&gt;, а &lt;code&gt;etcdutl check v2store&lt;/code&gt; расширен для проверки не только снимка v2, но и записей WAL.&lt;/p&gt;</description></item><item><title>Понижение версии etcd с v3.7 до v3.6</title><link>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_7/</guid><description>&lt;p&gt;В общем случае переход с etcd v3.7 на v3.6 можно выполнить как скользящее понижение версии без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.7 и заменять их процессами etcd v3.6&lt;/li&gt;&#10;&lt;li&gt;после включения понижения версии новые возможности v3.7 становятся недоступны кластеру&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#downgrade-procedure"&gt;начала понижения версии&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="downgrade-checklists"&gt;Контрольные списки понижения версии&#10;&lt;/h3&gt;&#10;&lt;p&gt;Основные различия между v3.7 и v3.6:&lt;/p&gt;&#10;&lt;h4 id="difference-in-flags"&gt;Различия во флагах&#10;&lt;/h4&gt;&#10;&lt;p&gt;v3.7 не добавляет новых флагов, поэтому процесс v3.6 принимает все флаги конфигурации v3.7 и при понижении версии изменять конфигурацию не требуется.&lt;/p&gt;</description></item><item><title>Обновление etcd с 3.4 до 3.5</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;В общем случае переход с etcd 3.4 на 3.5 можно выполнить как скользящее обновление без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.4 и заменять их процессами etcd v3.5&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.5 кластеру становятся доступны новые возможности v3.5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#upgrade-procedure"&gt;начала обновления&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3 (например, если файл &lt;code&gt;db&lt;/code&gt; перемещён). etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.&lt;/p&gt;</description></item><item><title>Понижение версии etcd от 3.5 до 3.4</title><link>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_5/</guid><description>&lt;p&gt;В общем случае, понижение версии от etcd 3.5 к 3.4 может быть безостановочным и ролевым:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;по одному останавливайте процессы etcd 3.5 и заменяйте их на процессы etcd 3.4&lt;/li&gt;&#10;&lt;li&gt;после запуска любых процессов 3.4 новые функции в 3.5 больше не доступны для кластера&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Перед &lt;a href="#downgrade-procedure"&gt;началом понижения версии&lt;/a&gt;&#10; прочитайте остальную часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="downgrade-checklists"&gt;Проверочные списки для понижения версии&#10;&lt;/h3&gt;&#10;&lt;p&gt;содержимое/enhttps://etcd.io/docs/v3.5/op-guide/authentication/rbac.md&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Если в кластере включена аутентификация, поэтапное понижение с 3.5 не поддерживается: 3.5 &lt;a href="https://github.com/etcd-io/etcd/pull/11943"&gt;изменяет формат связанных с аутентификацией записей WAL&lt;/a&gt;&#10;. Сначала следуйте &lt;a href="https://pig.center/ru/docs/etcd/op-guide/authentication/rbac/"&gt;инструкциям по аутентификации&lt;/a&gt;&#10;, чтобы отключить её и удалить всех пользователей.&lt;/p&gt;</description></item><item><title>Понижение версии etcd с v3.6 до v3.5</title><link>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/downgrades/downgrade_3_6/</guid><description>&lt;p&gt;В общем случае переход с etcd v3.6 на v3.5 можно выполнить как скользящее понижение версии без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.6 и заменять их процессами etcd v3.5&lt;/li&gt;&#10;&lt;li&gt;после включения понижения версии новые возможности v3.6 становятся недоступны кластеру&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#downgrade-procedure"&gt;начала понижения версии&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="downgrade-checklists"&gt;Контрольные списки понижения версии&#10;&lt;/h3&gt;&#10;&lt;p&gt;Основные нарушающие совместимость изменения между v3.6 и v3.5:&lt;/p&gt;&#10;&lt;h4 id="difference-in-flags"&gt;Различия во флагах&#10;&lt;/h4&gt;&#10;&lt;p&gt;Если в конфигурации v3.6 используются какие-либо из следующих флагов, при переходе на v3.5 обязательно удалите или переименуйте их либо измените значение по умолчанию.&lt;/p&gt;</description></item><item><title>Обновление etcd с 3.3 до 3.4</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;В общем случае переход с etcd 3.3 на 3.4 можно выполнить как скользящее обновление без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.3 и заменять их процессами etcd v3.4&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.4 кластеру становятся доступны новые возможности v3.4&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#upgrade-procedure"&gt;начала обновления&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3 (например, если файл &lt;code&gt;db&lt;/code&gt; перемещён). etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.&lt;/p&gt;</description></item><item><title>Обновление etcd с v3.6 до v3.7</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_7/</guid><description>&lt;p&gt;В общем случае переход с etcd v3.6 на v3.7 можно выполнить как скользящее обновление без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.6 и заменять их процессами etcd v3.7&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.7 кластеру становятся доступны новые возможности v3.7&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#upgrade-procedure"&gt;начала обновления&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;h4 id="update-36"&gt;Обновление 3.6&#10;&lt;/h4&gt;&#10;&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Важно&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Перед обновлением до 3.7 убедитесь, что все участники 3.6 обновлены до 3.6.11 или более поздней версии. Предыдущие корректирующие выпуски 3.6 могут быть несовместимы со скользящим обновлением до 3.7.&lt;/p&gt;</description></item><item><title>Обновление etcd с 3.2 до 3.3</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;В общем случае переход с etcd 3.2 на 3.3 можно выполнить как скользящее обновление без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;поочерёдно останавливать процессы etcd v3.2 и заменять их процессами etcd v3.3&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.3 кластеру становятся доступны новые возможности v3.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;До &lt;a href="#upgrade-procedure"&gt;начала обновления&lt;/a&gt;&#10; прочитайте оставшуюся часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например если файл &lt;code&gt;db&lt;/code&gt; перемещён. etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.&lt;/p&gt;</description></item><item><title>Обновление etcd от 3.1 до 3.2</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;В общем случае, обновление от etcd 3.1 до 3.2 может быть обновлением с нулевым временем простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;по одному, останавливайте процессы etcd v3.1 и заменяйте их процессами etcd v3.2&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.2, новые функции в v3.2 становятся доступны для кластера&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Перед &lt;a href="#upgrade-procedure"&gt;обновлением&lt;/a&gt;&#10; внимательно прочитайте оставшуюся часть этого руководства для подготовки.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Обновление списков проверки&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается при восстановлении из снимка без файла v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt;. Это происходит после миграции с v2 без прежних данных v3 и предотвращает случайную потерю v3, например при перемещении &lt;code&gt;db&lt;/code&gt;. После миграции на v3 etcd требует данные v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.&lt;/p&gt;</description></item><item><title>Обновление etcd с 3.0 до 3.1</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;В общем случае обновление etcd с 3.0 до 3.1 можно выполнить поэтапно без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;по очереди останавливать процессы etcd v3.0 и заменять их процессами etcd v3.1;&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.1 кластеру станут доступны новые возможности v3.1.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Перед &lt;a href="#upgrade-procedure"&gt;началом обновления&lt;/a&gt;&#10; прочитайте остальную часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается при восстановлении из существующих снимков, если отсутствует файл v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt;. Это происходит, когда сервер мигрировал с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например при перемещении файла &lt;code&gt;db&lt;/code&gt;. После миграции на v3 etcd может работать только с данными v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данных v3.&lt;/p&gt;</description></item><item><title>Обновление etcd с 2.3 до 3.0</title><link>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;В общем случае обновление etcd с 2.3 до 3.0 можно выполнить поэтапно без простоя:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;по очереди останавливать процессы etcd v2.3 и заменять их процессами etcd v3.0;&lt;/li&gt;&#10;&lt;li&gt;после запуска всех процессов v3.0 кластеру станут доступны новые возможности v3.0.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Перед &lt;a href="#upgrade-procedure"&gt;началом обновления&lt;/a&gt;&#10; прочитайте остальную часть руководства и подготовьтесь.&lt;/p&gt;&#10;&lt;h3 id="upgrade-checklists"&gt;Контрольные списки обновления&#10;&lt;/h3&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;При &lt;a href="https://github.com/etcd-io/etcd/issues/9480"&gt;миграции с v2 без данных v3&lt;/a&gt;&#10; сервер etcd v3.2+ аварийно завершается при восстановлении из существующих снимков, если отсутствует файл v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt;. Это происходит, когда сервер мигрировал с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например при перемещении файла &lt;code&gt;db&lt;/code&gt;. После миграции на v3 etcd может работать только с данными v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данных v3.&lt;/p&gt;</description></item><item><title>Рекомендации по триажу issue</title><link>https://pig.center/ru/docs/etcd/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;Назначение&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ускорить управление issue.&lt;/p&gt;&#10;&lt;p&gt;Issue проекта &lt;code&gt;etcd&lt;/code&gt; перечислены на странице &lt;a href="https://github.com/etcd-io/etcd/issues"&gt;https://github.com/etcd-io/etcd/issues&lt;/a&gt;&#10;&#10;и классифицируются с помощью меток. Например, issue, признанный ошибкой,&#10;в итоге получает метку &lt;code&gt;area/bug &lt;/code&gt;. Новые issue сначала не имеют меток, но обычно&#10;сопровождающие и активные участники &lt;code&gt;etcd&lt;/code&gt; добавляют их по результатам анализа.&#10;Подробный список меток находится на странице&#10;&lt;a href="https://github.com/kubernetes/kubernetes/labels"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Для удобства ниже приведено несколько готовых поисковых запросов:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/area%2Fbug"&gt;Ошибки&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Help%20Wanted"&gt;Требуется помощь&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aopen&amp;#43;sort%3Aupdated-asc&amp;#43;"&gt;Дольше всего ожидающие триажа issue&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://etcd.io/community/#community-meetings"&gt;Встреча по триажу issue&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="scope"&gt;Область применения&#10;&lt;/h2&gt;&#10;&lt;p&gt;Эти рекомендации служат основным документом по триажу поступающих issue в &lt;code&gt;etcd&lt;/code&gt;. Помогать с issue и PR могут все желающие, однако описанные здесь работа и обязанности рассчитаны прежде всего на сопровождающих и активных участников &lt;code&gt;etcd&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Управление PR</title><link>https://pig.center/ru/docs/etcd/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/triage/prs/</guid><description>&lt;h2 id="purpose"&gt;Назначение&#10;&lt;/h2&gt;&#10;&lt;p&gt;Ускорить управление PR.&lt;/p&gt;&#10;&lt;p&gt;PR проекта &lt;code&gt;etcd&lt;/code&gt; перечислены на странице &lt;a href="https://github.com/etcd-io/etcd/pulls"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;&#10;&#10;У PR могут быть различные метки, этап, рецензент и другие атрибуты. Подробный список меток находится на странице&#10;&lt;a href="https://github.com/kubernetes/kubernetes/labels"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Для удобства ниже приведено несколько примеров поиска PR:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&amp;#43;milestone%3Aetcd-v3.4"&gt;Открытые PR этапа etcd-v3.4&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Investigating"&gt;PR, находящиеся на рассмотрении&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="scope"&gt;Область применения&#10;&lt;/h2&gt;&#10;&lt;p&gt;Эти рекомендации служат основным документом по управлению PR в &lt;code&gt;etcd&lt;/code&gt;. Помогать с PR могут все желающие, однако описанные здесь работа и обязанности рассчитаны прежде всего на сопровождающих и активных участников &lt;code&gt;etcd&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Атрибуция и лицензирование</title><link>https://pig.center/ru/attribution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/attribution/</guid><description>&lt;p&gt;pig.center повторно публикует документацию, написанную шестью исходными проектами. В конце каждой&#10;страницы документации приведена строка атрибуции: из какой работы она получена, кому принадлежат&#10;авторские права, по какой лицензии распространяется и в каком разделе этой страницы приведены&#10;соответствующие сведения.&lt;/p&gt;&#10;&lt;p&gt;Эта страница служит единым реестром. Здесь указано, какие материалы были импортированы, когда и из&#10;какой зафиксированной версии, по какой лицензии они распространяются и где хранится полное&#10;уведомление исходного проекта.&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Русская версия полностью охватывает Patroni, PgBouncer, pgBadger и etcd. Для pgBackRest,&#10;HAProxy и отдельных ещё не переведённых маршрутов ссылки открывают соответствующую английскую&#10;страницу.&lt;/p&gt;</description></item><item><title>Поиск</title><link>https://pig.center/ru/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/search/</guid><description/></item></channel></rss>