<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Задача on PIG.CENTER</title><link>https://pig.center/ru/categories/%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0/</link><description>Recent content in Задача 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/categories/%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0/index.xml" rel="self" type="application/rss+xml"/><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/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/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/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/etcd/tasks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/</guid><description/></item><item><title>Задачи оператора</title><link>https://pig.center/ru/docs/etcd/tasks/operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/operator/</guid><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>Использование 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>Преобразование отдельного экземпляра в кластер 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/etcd/tasks/developer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/tasks/developer/</guid><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>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>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>Как проводить выборы лидера в кластере 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/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/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/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/</guid><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/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/op-guide/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/authentication/</guid><description/></item><item><title>Руководство по операциям</title><link>https://pig.center/ru/docs/etcd/op-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/</guid><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/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/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/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/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/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/upgrades/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/upgrades/</guid><description/></item><item><title>Снижение версии</title><link>https://pig.center/ru/docs/etcd/downgrades/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/downgrades/</guid><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>Триаж</title><link>https://pig.center/ru/docs/etcd/triage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/triage/</guid><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></channel></rss>