<?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%BA%D0%BE%D0%BD%D1%86%D0%B5%D0%BF%D1%86%D0%B8%D1%8F/</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%BA%D0%BE%D0%BD%D1%86%D0%B5%D0%BF%D1%86%D0%B8%D1%8F/index.xml" rel="self" type="application/rss+xml"/><item><title>Документация Patroni 4.1.5</title><link>https://pig.center/ru/docs/patroni/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/</guid><description>&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;Работа Patroni на &lt;strong&gt;системах с ограниченной памятью и Python 3.11+&lt;/strong&gt;&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Если Patroni работает в системе со строгими ограничениями памяти, например с &lt;code&gt;vm.overcommit_memory=2&lt;/code&gt; (рекомендуется для PostgreSQL), и используется Python 3.11 или новее, может наблюдаться неожиданное поведение:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Patroni выглядит исправным&lt;/li&gt;&#10;&lt;li&gt;PostgreSQL продолжает работать&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;REST API Patroni перестаёт отвечать&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Операционная система сообщает, что Patroni прослушивает порт REST API&lt;/li&gt;&#10;&lt;li&gt;Журналы Patroni выглядят нормально, однако однократно могут появиться сообщения &lt;code&gt;Exception ignored in thread started by: &amp;lt;object repr() failed&amp;gt;&lt;/code&gt;, &lt;code&gt;MemoryError&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Журналы ядра могут содержать сообщения наподобие &lt;code&gt;not enough memory for the allocation&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Это поведение вызвано &lt;a href="https://github.com/python/cpython/issues/140746"&gt;ошибкой в Python 3.11+&lt;/a&gt;&#10;. При строгих ограничениях памяти запуск нового потока может зависнуть на неопределённое время, если свободной памяти недостаточно.&lt;/p&gt;</description></item><item><title>Введение</title><link>https://pig.center/ru/docs/patroni/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/readme/</guid><description>&lt;p&gt;&lt;a id="readme"&gt;&lt;/a&gt;&#10;Patroni — шаблон решений высокой доступности (HA) PostgreSQL на Python. Patroni возник как ответвление проекта &lt;a href="https://github.com/compose/governor"&gt;Governor&lt;/a&gt;&#10; от Compose и содержит множество новых возможностей.&lt;/p&gt;&#10;&lt;p&gt;Дополнительные вводные материалы:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iruaCgeG7qs"&gt;PostgreSQL HA with Kubernetes and Patroni&lt;/a&gt;&#10; — доклад Джоша Беркуса на KubeCon 2016 (видео)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://engineering.zalando.com/posts/2016/02/zalandos-patroni-a-template-for-high-availability-postgresql.html"&gt;Публикация в техническом блоге Zalando за февраль 2016 года&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="development-status"&gt;Состояние разработки&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni активно разрабатывается и принимает вклады сообщества. Подробнее см. раздел &lt;a href="https://pig.center/ru/docs/patroni/contributing_guidelines/#contributing_guidelines"&gt;Участие в разработке&lt;/a&gt;&#10; ниже.&lt;/p&gt;&#10;&lt;p&gt;Сведения о новых выпусках публикуются &lt;a href="https://pig.center/ru/docs/patroni/releases/#releases"&gt;здесь&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Возможности</title><link>https://pig.center/ru/docs/pgbouncer/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/features/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Несколько уровней строгости при перераспределении соединений:&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&lt;strong&gt;Сеансовый режим пула&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Этот режим поддерживает все возможности PostgreSQL.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;Транзакционный режим пула&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул. Этот режим нарушает работу некоторых сеансовых возможностей PostgreSQL. Его можно использовать, только если приложение не применяет несовместимые возможности. Они перечислены в таблице ниже.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;Режим пула на уровне операторов&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Наиболее строгий метод. Это транзакционный режим пула с дополнительным ограничением: транзакции из нескольких операторов запрещены. Такой режим принудительно обеспечивает клиентский режим «autocommit» и в основном предназначен для PL/Proxy.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Низкое потребление памяти (по умолчанию 2 kB на соединение), поскольку PgBouncer не требуется получать пакеты целиком.&lt;/p&gt;</description></item><item><title>pgBackRest 2.59.1 Документация</title><link>https://pig.center/ru/docs/pgbackrest/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbackrest/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="introduction"&gt;Введение&#10;&lt;/h2&gt;&#10;&lt;p&gt;pgBackRest — надёжное решение для резервного копирования и восстановления PostgreSQL, которое бесшовно масштабируется до самых больших баз данных и рабочих нагрузок.&lt;/p&gt;&#10;&lt;p&gt;pgBackRest &lt;a href="https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.59.1"&gt;v2.59.1&lt;/a&gt;&#10; — текущий стабильный выпуск. Примечания к выпуску находятся на странице &lt;a href="https://pig.center/docs/pgbackrest/release/" hreflang="en" data-fallback-language="en"&gt;Releases&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;Поставьте нам звезду на &lt;a href="https://github.com/pgbackrest/pgbackrest"&gt;GitHub&lt;/a&gt;&#10;, если вам нравится pgBackRest!&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="news"&gt;Новости&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Август 17, 2026&lt;/strong&gt; — &lt;a href="https://pig.center/docs/pgbackrest/news/#release-2-59-1" hreflang="en" data-fallback-language="en"&gt;pgBackRest 2.59.1Выпуск&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Июль 20, 2026&lt;/strong&gt; - &lt;a href="https://pig.center/docs/pgbackrest/news/#distribution-tarball" hreflang="en" data-fallback-language="en"&gt;Новый архив с дистрибутивом&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Июль 20, 2026&lt;/strong&gt; — &lt;a href="https://pig.center/docs/pgbackrest/news/#release-2-59-0" hreflang="en" data-fallback-language="en"&gt;pgBackRest 2.59.0Выпуск&lt;/a&gt;&#10;&lt;/p&gt;</description></item><item><title>Основы балансировки нагрузки</title><link>https://pig.center/ru/docs/haproxy/load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/load-balancing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Этот документ знакомит с HAProxy тех, кто ещё не знает продукт, а также тех, кто знаком с его старыми версиями и хочет открыть его заново. Главная цель — предоставить все сведения, необходимые для решения, подходит ли HAProxy пользователю. Опытные пользователи могут найти здесь решения ранее возникших задач, о которых они не знали из-за незнакомства с новой функцией. Также приведены сведения для расчёта ресурсов, описан жизненный цикл продукта и даны сравнения с продуктами, чьи возможности частично пересекаются с HAProxy.&lt;/p&gt;</description></item><item><title>Документация PgBouncer 1.25.2</title><link>https://pig.center/ru/docs/pgbouncer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/</guid><description>&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;&#10;&lt;p&gt;Цель &lt;strong&gt;PgBouncer&lt;/strong&gt; — уменьшить влияние открытия новых соединений с PostgreSQL&#10;на производительность.&lt;/p&gt;&#10;&lt;p&gt;Чтобы объединение соединений в пул не нарушало семантику транзакций,&#10;&lt;strong&gt;PgBouncer&lt;/strong&gt; поддерживает несколько режимов пула при перераспределении соединений:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Сеансовый режим пула&lt;/strong&gt;: наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Это режим по умолчанию.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Транзакционный режим пула&lt;/strong&gt;: серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Режим пула на уровне операторов&lt;/strong&gt;: наиболее строгий метод. Серверное соединение возвращается в пул сразу после завершения запроса. В этом режиме запрещены транзакции из нескольких операторов.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Что такое HAProxy и как он работает</title><link>https://pig.center/ru/docs/haproxy/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Название «HAProxy» обозначает продукт, а «haproxy» —&#10;исполняемую программу, программный пакет или процесс. Однако оба варианта часто используются в обоих&#10;значениях и произносятся как H-A-Proxy. На раннем этапе «haproxy» расшифровывалось как «прокси высокой&#10;доступности», а название писалось в два отдельных слова, хотя сейчас оно означает только&#10;«HAProxy».&lt;/p&gt;&#10;&lt;h2 id="section-3-1"&gt;3.1. Чем является и чем не является HAProxy&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy — это:&lt;/p&gt;</description></item><item><title>Базовые возможности</title><link>https://pig.center/ru/docs/haproxy/basic-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/basic-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;В этом разделе перечислены возможности HAProxy: одни обычно ожидаются от любого современного балансировщика нагрузки, другие непосредственно вытекают из архитектуры HAProxy. Более сложные возможности подробно рассматриваются в следующем разделе.&lt;/p&gt;&#10;&lt;h2 id="section-3-3-1"&gt;3.3.1. Базовые возможности: проксирование&#10;&lt;/h2&gt;&#10;&lt;p&gt;Проксирование — передача данных между клиентом и сервером по двум независимым соединениям. HAProxy поддерживает следующие базовые возможности проксирования и управления соединениями:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Предоставление серверу корректного соединения для защиты от любых ошибок или атак со стороны клиента.&lt;/p&gt;</description></item><item><title>Стандартные возможности</title><link>https://pig.center/ru/docs/haproxy/standard-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/standard-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;В этом разделе перечислены возможности, широко используемые в HAProxy, но не обязательно присутствующие в других балансировщиках нагрузки.&lt;/p&gt;&#10;&lt;h2 id="section-3-4-1"&gt;3.4.1. Стандартные возможности: извлечение и преобразование сведений&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy поддерживает получение сведений с помощью широкого набора функций извлечения образцов. Они извлекают отдельные сведения, называемые образцами, для немедленного использования. Это применяется для привязки сеансов, построения условий, вывода сведений в журналы или дополнения заголовков HTTP.&lt;/p&gt;</description></item><item><title>etcd 3.7 Документация</title><link>https://pig.center/ru/docs/etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/</guid><description>&lt;p&gt;etcd — это строго согласованное распределённое хранилище ключей и значений. Эти руководства охватывают установку и эксплуатацию etcd, разработку приложений с использованием его API, понимание архитектуры, измерение производительности, а также обновление или понижение версии кластеров в линейке выпусков 3.7.&lt;/p&gt;&#10;&lt;p&gt;Начните с &lt;a href="https://pig.center/ru/docs/etcd/quickstart/"&gt;Краткого руководства&lt;/a&gt;&#10; для локального кластера из одного участника, &lt;a href="https://pig.center/ru/docs/etcd/install/"&gt;Установка&lt;/a&gt;&#10; для поддерживаемых путей установки или &lt;a href="https://pig.center/ru/docs/etcd/op-guide/"&gt;Руководства по эксплуатации&lt;/a&gt;&#10; для промышленных развёртываний.&lt;/p&gt;</description></item><item><title>Расширенные возможности</title><link>https://pig.center/ru/docs/haproxy/advanced-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/advanced-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-3-5-1"&gt;3.5.1. Расширенные возможности: управление&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy спроектирован для исключительно стабильной работы и безопасного управления в обычной рабочей среде. Он поставляется одним исполняемым файлом и не требует процедуры установки. Несколько версий легко могут сосуществовать: экземпляры можно и рекомендуется обновлять постепенно, в порядке важности, вместо одновременного переноса всех экземпляров. Файлы конфигурации удобно хранить под контролем версий. Проверка конфигурации выполняется отдельно от работающей службы, поэтому не нужно перезапускать службу, рискуя получить сбой. При проверке могут обнаруживаться сложные ошибки (например, правило, скрывающее другое правило, или неработоспособная привязка сеансов); для их устранения выдаются подробные предупреждения и рекомендации. Обратная совместимость конфигурации охватывает очень давние версии: версия 1.5 полностью поддерживала конфигурации версии 1.1, написанные 13 лет назад, а в 1.6 прекращена поддержка лишь почти неиспользуемых устаревших директив, которые можно заменить другими средствами. Обновление конфигурации и программы происходит плавно и без прерывания обслуживания: старые и новые процессы могут сосуществовать в системе, каждый обрабатывая свои соединения. При запуске выводятся состояние системы, параметры сборки и сведения о совместимости библиотек.&lt;/p&gt;</description></item><item><title>Режимы репликации</title><link>https://pig.center/ru/docs/patroni/replication_modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/replication_modes/</guid><description>&lt;p&gt;&lt;a id="replication_modes"&gt;&lt;/a&gt;&#10;Patroni использует потоковую репликацию PostgreSQL. Подробнее см. &lt;a href="http://www.postgresql.org/docs/current/static/warm-standby.html#STREAMING-REPLICATION"&gt;документацию Postgres&lt;/a&gt;&#10;. По умолчанию Patroni настраивает PostgreSQL на асинхронную репликацию. Выбор схемы репликации зависит от требований бизнеса. Изучите асинхронную и синхронную репликацию, а также другие решения HA, чтобы выбрать подходящий вариант.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="asynchronous-mode-durability"&gt;Долговечность в асинхронном режиме&#10;&lt;/h2&gt;&#10;&lt;p&gt;В асинхронном режиме ради доступности кластер может потерять часть зафиксированных транзакций. При отказе или недоступности первичного сервера Patroni автоматически повышает достаточно исправный резервный сервер до первичного. Транзакции, не реплицированные на этот резервный сервер, остаются в «ответвившейся временной шкале» первичного и фактически невосстановимы&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description></item><item><title>Сообщество</title><link>https://pig.center/ru/docs/pgbouncer/community/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/community/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="tutorials"&gt;Учебные материалы&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://get.enterprisedb.com/docs/Tutorial_All_PPSS_pgBouncer.pdf"&gt;Настройка PgBouncer для Postgres Plus Standard Server&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Хороший обзор основных понятий PgBouncer.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="http://www.depesz.com/2012/12/02/what-is-the-point-of-bouncing/"&gt;Зачем нужен PgBouncer?&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Рассматривает различия между режимами пула.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="support"&gt;Поддержка&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer"&gt;Страница проекта&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer/issues"&gt;Трекер задач&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/tagged/pgbouncer"&gt;Раздел PgBouncer&lt;/a&gt;&#10; на Stack Overflow&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pgbouncer/pgbouncer/discussions"&gt;Обсуждения сообщества&lt;/a&gt;&#10; на GitHub&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Поддержка сторожевого таймера</title><link>https://pig.center/ru/docs/patroni/watchdog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/watchdog/</guid><description>&lt;p&gt;&lt;a id="watchdog"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Запуск нескольких серверов PostgreSQL в качестве первичных может привести к потере транзакций из-за расхождения временных шкал. Такая ситуация также называется проблемой расщепленного мозга. Чтобы избежать проблемы расщепленного мозга, Patroni должен обеспечить, чтобы PostgreSQL не принимал никаких подтверждений транзакций после истечения срока действия ключа лидера в DCS. В нормальных условиях Patroni пытается достичь этого, останавливая PostgreSQL при неудаче обновления блокировки лидера по любой причине. Однако это может не произойти по различным причинам:&lt;/p&gt;</description></item><item><title>Сопутствующие продукты и альтернативы</title><link>https://pig.center/ru/docs/haproxy/ecosystem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/ecosystem/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy хорошо сочетается с некоторыми перечисленными ниже продуктами. Поэтому они упомянуты здесь, хотя и не связаны непосредственно с HAProxy.&lt;/p&gt;&#10;&lt;h2 id="section-4-1"&gt;4.1. HTTP-сервер Apache&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache — фактический стандарт среди серверов HTTP. Это очень функциональный модульный проект, поддерживающий как выдачу файлов, так и динамическое содержимое. Он может служить фронтендом для серверов приложений, а также проксировать запросы и кешировать ответы. Во всех этих сценариях перед ним обычно требуется балансировщик нагрузки. Apache может работать в разных режимах, одни из которых требуют больше ресурсов, чем другие. Некоторые модули до сих пор требуют более тяжёлой модели с заранее созданными процессами, что мешает Apache эффективно работать с большим числом соединений. В таком случае HAProxy может значительно помочь: он ограничивает число соединений с каждым сервером безопасным значением, заметно ускоряя сервер и сохраняя его ресурсы для приложения.&lt;/p&gt;</description></item><item><title>DCS Отказоустойчивый режим</title><link>https://pig.center/ru/docs/patroni/dcs_failsafe_mode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/dcs_failsafe_mode/</guid><description>&lt;p&gt;&lt;a id="dcs_failsafe_mode"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="the-problem"&gt;Проблема&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni активно использует распределённое хранилище конфигурации (DCS) для решения задачи выбора лидера и обнаружения сетевых разделений. Узел может запускать PostgreSQL как первичный сервер только в том случае, если ему удаётся обновить блокировку лидера в DCS. В случае неудачи обновления блокировки лидера PostgreSQL немедленно понижается до режима только для чтения. Вероятность возникновения «проблемы» зависит от используемого DCS. Например, при использовании etcd, который применяется исключительно для Patroni, вероятность близка к нулю, тогда как при использовании K8s API (основанного на etcd) такая ситуация может возникать чаще.&lt;/p&gt;</description></item><item><title>1. Краткое напоминание об HTTP</title><link>https://pig.center/ru/docs/haproxy/http-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/http-fundamentals/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;Этот документ описывает язык конфигурации в реализации указанной выше версии. Он не содержит подсказок, примеров или рекомендаций. За такими сведениями обращайтесь к справочному руководству или руководству по архитектуре. Пронумерованные главы расположены в плоской боковой панели HAProxy для прямого перехода.&lt;/p&gt;&#10;&lt;p&gt;Когда HAProxy работает в режиме HTTP, и запрос, и ответ полностью анализируются и индексируются. Это позволяет строить критерии сопоставления практически по любым элементам содержимого.&lt;/p&gt;</description></item><item><title>Поддержка Citus</title><link>https://pig.center/ru/docs/patroni/citus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/citus/</guid><description>&lt;p&gt;&lt;a id="citus"&gt;&lt;/a&gt;&#10;Patroni делает развертывание кластеров &lt;a href="https://docs.citusdata.com/en/stable/installation/multi_node.html"&gt;Multi-Node Citus&lt;/a&gt;&#10; чрезвычайно простым.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tldr"&gt;TL;DR&#10;&lt;/h2&gt;&#10;&lt;p&gt;Существует лишь несколько простых правил, которым необходимо следовать:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Расширение базы данных &lt;a href="https://github.com/citusdata/citus"&gt;Citus&lt;/a&gt;&#10; для PostgreSQL должно быть доступно на всех узлах. Абсолютно минимальная поддерживаемая версия Citus — 10.0, но для использования всех преимуществ прозрачных плановых переключений и перезапусков рабочих узлов рекомендуется как минимум Citus 11.2.&lt;/li&gt;&#10;&lt;li&gt;Имя кластера (&lt;code&gt;scope&lt;/code&gt;) должно быть одинаковым для всех узлов Citus!&lt;/li&gt;&#10;&lt;li&gt;Учётные данные суперпользователя должны быть одинаковыми на координаторе и всех рабочих узлах, а &lt;code&gt;pg_hba.conf&lt;/code&gt; должен разрешать доступ суперпользователя между всеми узлами.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#restapi_settings"&gt;REST API&lt;/a&gt;&#10; доступ должен быть разрешён с узлов-работников к координатору. E.g, учётные данные должны быть одинаковыми, и, если настроены, клиентские сертификаты с узлов-работников должны быть приняты координатором.&lt;/li&gt;&#10;&lt;li&gt;Добавьте следующий раздел в &lt;code&gt;patroni.yaml&lt;/code&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-49f24e01-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-49f24e01-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;citus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;X &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 0 for coordinator and 1, 2, 3, etc for workers&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# must be the same on all nodes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;После этого вам нужно просто запустить Patroni, и он сам займётся остальным:&lt;/p&gt;</description></item><item><title>Интеграция с другими инструментами</title><link>https://pig.center/ru/docs/patroni/tools_integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/tools_integration/</guid><description>&lt;p&gt;&lt;a id="tools_integration"&gt;&lt;/a&gt;&#10;Patroni способен интегрироваться с другими инструментами в вашем стеке. В этом разделе вы найдете список примеров, которые, хотя и не являются исчерпывающими, могут дать вам идеи о том, как Patroni может интегрироваться с другими инструментами.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="barman"&gt;Barman&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni предоставляет приложение с именем &lt;code&gt;patroni_barman&lt;/code&gt;, в котором реализована логика взаимодействия с &lt;code&gt;pg-backup-api&lt;/code&gt;, что позволяет выполнять операции Barman удалённо.&lt;/p&gt;&#10;&lt;p&gt;У данного приложения в настоящее время имеется несколько подкоманд: &lt;code&gt;recover&lt;/code&gt; и &lt;code&gt;config-switch&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Аспекты безопасности</title><link>https://pig.center/ru/docs/patroni/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/security/</guid><description>&lt;p&gt;&lt;a id="security"&gt;&lt;/a&gt;&#10;Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: хранилище распределённой конфигурации (DCS) и REST API Patroni (REST) (API).&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="protecting-dcs"&gt;Защита DCS&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni и &lt;a href="https://pig.center/ru/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; хранят и извлекают данные из DCS.&lt;/p&gt;&#10;&lt;p&gt;Несмотря на то что DCS не содержит никакой конфиденциальной информации, он позволяет изменять часть конфигурации Patroni/Postgres. Поэтому первым делом необходимо защитить DCS.&lt;/p&gt;&#10;&lt;p&gt;Детали защиты зависят от типа DCS, используемого в системе. Параметры аутентификации и шифрования (токены/базовая аутентификация/сертификаты клиента) для поддерживаемых типов DCS описаны в &lt;a href="https://pig.center/ru/docs/patroni/config/yaml/#yaml"&gt;настройки&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>HA-кластер с несколькими центрами обработки данных</title><link>https://pig.center/ru/docs/patroni/ha_multi_dc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/ha_multi_dc/</guid><description>&lt;p&gt;&lt;a id="ha_multi_dc"&gt;&lt;/a&gt;&#10;Высокая доступность кластера PostgreSQL, развернутого в нескольких центрах обработки данных, основана на репликации, которая может быть синхронной или асинхронной (см. &lt;a href="https://pig.center/ru/docs/patroni/replication_modes/#replication_modes"&gt;режимы репликации&lt;/a&gt;&#10;).&lt;/p&gt;&#10;&lt;p&gt;В обоих случаях важно четко понимать следующие понятия:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PostgreSQL может работать в качестве первичного сервера или резервного сервера-лидера только тогда, когда он владеет ключом лидера и может обновлять этот ключ.&lt;/li&gt;&#10;&lt;li&gt;Рекомендуется запускать нечётное количество узлов etcd, ZooKeeper или Consul: 3 или 5!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="synchronous-replication"&gt;Синхронная репликация&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для создания кластера с несколькими ЦО, способного автоматически переживать отказ зоны, требуется как минимум 3.&lt;/p&gt;</description></item><item><title>2. Архитектура HAProxy</title><link>https://pig.center/ru/docs/haproxy/management-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/haproxy/management-architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy — многопоточный неблокирующий демон с событийной архитектурой. Это означает, что для планирования&#10;всех своих действий он использует мультиплексирование событий, вместо того чтобы полагаться на системный планировщик&#10;при переключении между ними. Чаще всего он работает как один процесс, поэтому вывод &amp;ldquo;ps aux&amp;rdquo; в&#10;системе показывает только один процесс &amp;ldquo;haproxy&amp;rdquo;, кроме случаев, когда идёт плавная перезагрузка конфигурации и старый&#10;процесс завершает работу параллельно с новым. Поэтому его работу всегда легко отслеживать&#10;с помощью утилиты strace. Чтобы масштабироваться с ростом числа доступных процессоров, по&#10;умолчанию haproxy запускает по одному рабочему потоку на каждый процессор, на котором ему разрешено выполняться. Если явно&#10;не задана иная конфигурация, входящий трафик распределяется между всеми этими потоками, каждый из которых&#10;выполняет один и тот же цикл событий. Особое внимание уделяется сведению зависимостей между потоками к строгому&#10;минимуму, чтобы добиться масштабируемости, близкой к линейной. Это имеет ряд следствий, в частности&#10;каждое соединение обслуживается одним потоком. Поэтому для использования всей доступной вычислительной&#10;мощности необходимо как минимум столько же соединений, сколько потоков, что почти&#10;всегда обеспечивается.&lt;/p&gt;</description></item><item><title>Внутренности</title><link>https://pig.center/ru/docs/etcd/dev-internal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-internal/</guid><description>&lt;!-- Local OINK section index for the upstream dev-internal document group. --&gt;</description></item><item><title>Учеба</title><link>https://pig.center/ru/docs/etcd/learning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/</guid><description/></item><item><title>Модель данных</title><link>https://pig.center/ru/docs/etcd/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/data_model/</guid><description>&lt;p&gt;etcd предназначен для надёжного хранения редко обновляемых данных и выполнения надёжных запросов наблюдения. etcd предоставляет предыдущие версии пар «ключ — значение», поддерживая недорогие снимки и историю событий наблюдения («запросы с перемещением во времени»). Для этих сценариев хорошо подходит постоянная многоверсионная модель данных с управлением параллелизмом.&lt;/p&gt;&#10;&lt;p&gt;etcd хранит данные в многоверсионном &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure"&gt;постоянном&lt;/a&gt;&#10; хранилище ключей и значений. Когда значение пары заменяется новыми данными, постоянное хранилище сохраняет её предыдущую версию. Фактически хранилище неизменяемо: операции не обновляют структуру на месте, а всегда создают новую обновлённую структуру. После изменения все прежние версии ключей остаются доступными для чтения и наблюдения. Чтобы хранилище не росло бесконечно и не сохраняло старые версии, его можно компактизировать, удалив самые старые версии замещённых данных.&lt;/p&gt;</description></item><item><title>Конструкция клиента etcd</title><link>https://pig.center/ru/docs/etcd/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;Конструкция клиента etcd&#10;&lt;/h1&gt;&#10;&lt;p&gt;&lt;em&gt;Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h1 id="introduction"&gt;Введение&#10;&lt;/h1&gt;&#10;&lt;p&gt;Сервер etcd доказал свою надёжность многолетним тестированием с внедрением отказов. Большая часть сложной логики приложений уже обрабатывается сервером etcd и его хранилищами данных (например, состав кластера прозрачен для клиентов, а уровень Raft пересылает предложения лидеру). Хотя серверные компоненты корректны, их взаимодействие с клиентом требует иного набора сложных протоколов, обеспечивающих корректность и высокую доступность в условиях отказов. В идеале сервер etcd представляет множество физических машин как единый логический кластер, а клиент реализует автоматическое переключение между репликами при отказе. В этом документе описаны архитектурные решения клиента и подробности их реализации.&lt;/p&gt;</description></item><item><title>Конструкция обучающегося участника etcd</title><link>https://pig.center/ru/docs/etcd/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;Обучающийся участник etcd&#10;&lt;/h1&gt;&#10;&lt;p&gt;&lt;em&gt;Gyuho Lee (github.com/gyuho, Amazon Web Services, Inc.), Joe Betz (github.com/jpbetz, Google Inc.)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h1 id="background"&gt;Предпосылки&#10;&lt;/h1&gt;&#10;&lt;p&gt;Изменение состава кластера остаётся одной из крупнейших эксплуатационных сложностей. Рассмотрим типичные проблемы.&lt;/p&gt;&#10;&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. Новый участник кластера перегружает лидера&#10;&lt;/h3&gt;&#10;&lt;p&gt;Только что присоединившийся участник etcd начинает без данных и потому требует больше обновлений от лидера, пока не догонит его журнал. Из-за этого сеть лидера с большей вероятностью окажется перегружена, а его сигналы активности последователям будут заблокированы или отброшены. Тогда у последователя может истечь тайм-аут выборов, и он начнёт новые выборы лидера. Таким образом, кластер с новым участником более подвержен выборам лидера. И сами выборы, и последующее распространение обновлений новому участнику могут вызывать периоды недоступности кластера (см. &lt;em&gt;рисунок 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Конструкция аутентификации etcd v3</title><link>https://pig.center/ru/docs/etcd/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Почему не используется система аутентификации v2?&#10;&lt;/h2&gt;&#10;&lt;p&gt;Вместо RESTful-интерфейса, как в v2, протокол v3 использует gRPC в качестве транспорта. Новый протокол даёт возможность развить и улучшить конструкцию v2. Например, аутентификация v3 выполняется для соединения, а не для каждого запроса, как более медленная аутентификация v2. Кроме того, на практике семантика аутентификации v2 неудобна для рассуждений о согласованности, что будет описано в следующих разделах. Для v3 существует чёткое описание и реализация механизма аутентификации, устраняющие недостатки системы v2.&lt;/p&gt;</description></item><item><title>API etcd</title><link>https://pig.center/ru/docs/etcd/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/api/</guid><description>&lt;p&gt;Этот документ содержит обзор основной конструкции API etcd v3.&#10;Не следует путать его с API etcd v2, объявленным устаревшим в etcd v3.5.&#10;Документ не претендует на полноту, а сосредоточен на основных идеях, необходимых для понимания etcd, без отвлечения на менее распространённые вызовы API.&#10;Все API etcd определены в &lt;a href="https://github.com/etcd-io/etcd/blob/main/api/etcdserverpb/rpc.proto"&gt;службах gRPC&lt;/a&gt;&#10;, которые группируют удалённые вызовы процедур (RPC), распознаваемые сервером etcd.&#10;Полный перечень RPC etcd приведён в формате Markdown в &lt;a href="https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/"&gt;справочнике API gRPC&lt;/a&gt;&#10;.&lt;/p&gt;</description></item><item><title>Файлы постоянного хранилища etcd</title><link>https://pig.center/ru/docs/etcd/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/persistent-storage-files/</guid><description>&lt;p&gt;В этом документе описан формат постоянного хранилища etcd: именование, содержимое и инструменты, позволяющие разработчикам исследовать файлы. В дальнейшем документ следует дополнять по мере изменений модели хранения. Он предназначен для разработчиков etcd и помогает при восстановлении данных.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Предварительные сведения&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для понимания документа полезны следующие вводные материалы:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/data_model/"&gt;обзор модели данных etcd&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://raft.github.io/raft.pdf"&gt;обзор Raft&lt;/a&gt;&#10; (особенно раздел &amp;ldquo;5.3 Log replication&amp;rdquo;).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="overview"&gt;Обзор&#10;&lt;/h2&gt;&#10;&lt;h3 id="long-leaving-files"&gt;Долгоживущие файлы&#10;&lt;/h3&gt;&#10;&lt;table&gt;&#10; &lt;tr&gt;&#10; &lt;th&gt;Имя файла&lt;/th&gt;&#10; &lt;th&gt;Высокоуровневое назначение&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;pre&gt;./member/snap/db&lt;/pre&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/B%2B_tree"&gt;b+tree&lt;/a&gt; bbolt&lt;/strong&gt;, хранящее все применённые данные, сведения об авторизации состава кластера и метаданные. Оно знает последний применённый индекс журнала WAL (&lt;a href="https://github.com/etcd-io/etcd/blob/a1ff0d5373335665b3e5f4cb22a538ac63757cb6/server/etcdserver/cindex/cindex.go#L92"&gt;"consistent_index"&lt;/a&gt;).&#10; &lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;pre&gt;./member/snap/0000000000000002-0000000000049425.snap&#10;./member/snap/0000000000000002-0000000000061ace.snap&lt;/pre&gt;&#10; &lt;/td&gt;&#10; &lt;td&gt;&#10; &lt;p&gt;&#10; Периодические &lt;strong&gt;снимки устаревшего хранилища v2&lt;/strong&gt;, содержащие:&#10; &lt;ul&gt;&#10; &lt;li&gt;основные сведения о составе кластера&lt;/li&gt;&#10; &lt;li&gt;версию etcd&lt;/li&gt;&#10; &lt;/ul&gt;&#10; &lt;/p&gt;</description></item><item><title>Гарантии API etcd</title><link>https://pig.center/ru/docs/etcd/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/api_guarantees/</guid><description>&lt;p&gt;etcd — согласованное и долговечное хранилище ключей и значений.&#10;Доступ к нему предоставляют &lt;a href="https://pig.center/ru/docs/etcd/learning/api/#grpc-services"&gt;службы gRPC&lt;/a&gt;&#10;.&#10;etcd обеспечивает наиболее строгие гарантии согласованности и долговечности&#10;для распределённой системы. В этой спецификации перечислены гарантии API etcd.&lt;/p&gt;&#10;&lt;h3 id="apis-to-consider"&gt;Рассматриваемые API&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;KV APIs&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#range"&gt;Range&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#rangestream"&gt;RangeStream&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#put"&gt;Put&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#delete-range"&gt;Delete&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#transaction"&gt;Transaction&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;API наблюдения&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#watch-api"&gt;Watch&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;API аренды&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#obtaining-leases"&gt;Grant&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;[Отзыв][Revoke]&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/ru/docs/etcd/learning/api/#keep-alives"&gt;Keep alive&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;API KV позволяет напрямую читать и изменять хранилище ключей и значений.&#10;API наблюдения позволяет подписываться на изменения хранилища.&#10;API аренды позволяет назначать ключу время существования.&lt;/p&gt;</description></item><item><title>etcd в сравнении с другими хранилищами ключей и значений</title><link>https://pig.center/ru/docs/etcd/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/learning/why/</guid><description>&lt;p&gt;Название «etcd» образовано из двух идей: каталога Unix «/etc» и распределённых&#10;(«d»istributed) систем. В «/etc» хранятся данные конфигурации одной системы,&#10;тогда как etcd хранит конфигурацию крупных распределённых систем. Поэтому&#10;распределённый («d»istributed) «/etc» называется «etcd».&lt;/p&gt;&#10;&lt;p&gt;etcd задуман как универсальная основа крупных распределённых систем. Такие&#10;системы не допускают split-brain и готовы ради этого пожертвовать доступностью.&#10;etcd хранит метаданные согласованно и отказоустойчиво. Кластер etcd предоставляет&#10;хранилище ключей и значений с высокой стабильностью, надёжностью, масштабируемостью&#10;и производительностью.&lt;/p&gt;</description></item><item><title>Зачем нужен шлюз gRPC</title><link>https://pig.center/ru/docs/etcd/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 использует &lt;a href="https://www.grpc.io/"&gt;gRPC&lt;/a&gt;&#10; как протокол обмена сообщениями. Проект etcd&#10;включает основанный на gRPC &lt;a href="https://github.com/etcd-io/etcd/tree/main/client/v3"&gt;клиент Go&lt;/a&gt;&#10; и утилиту командной строки&#10;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl"&gt;etcdctl&lt;/a&gt;&#10; для взаимодействия с кластером etcd через gRPC. Для языков&#10;без поддержки gRPC etcd предоставляет JSON-&lt;a href="https://github.com/grpc-ecosystem/grpc-gateway"&gt;шлюз gRPC&lt;/a&gt;&#10;. Он служит&#10;RESTful-прокси, преобразующим запросы HTTP/JSON в сообщения gRPC.&lt;/p&gt;&#10;&lt;h2 id="using-grpc-gateway"&gt;Использование шлюза gRPC&#10;&lt;/h2&gt;&#10;&lt;p&gt;Шлюз принимает &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json"&gt;JSON-сопоставление&lt;/a&gt;&#10; определений сообщений&#10;&lt;a href="https://pig.center/ru/docs/etcd/dev-guide/api_reference_v3/"&gt;protocol buffer&lt;/a&gt;&#10; etcd. Поля &lt;code&gt;key&lt;/code&gt; и &lt;code&gt;value&lt;/code&gt; определены как массивы&#10;байтов, поэтому в JSON их обязательно кодировать в base64. В следующих примерах&#10;используется &lt;code&gt;curl&lt;/code&gt;, но подойдёт любой клиент HTTP/JSON.&lt;/p&gt;</description></item><item><title>Режимы отказа</title><link>https://pig.center/ru/docs/etcd/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/failures/</guid><description>&lt;p&gt;В крупных развёртываниях машин отказы неизбежны. Машина выходит из строя при неисправности оборудования или программного обеспечения. Несколько машин могут отказать одновременно из-за перебоя питания или проблем с сетью. Разные виды отказов также могут происходить одновременно; перечислить все возможные случаи практически невозможно.&lt;/p&gt;&#10;&lt;p&gt;В этом разделе описаны виды отказов и механизмы, позволяющие etcd сохранять работоспособность. Почти любой конкретный отказ можно отнести к одной из этих категорий. Чтобы подготовиться к редким или &lt;a href="https://pig.center/ru/docs/etcd/op-guide/recovery/"&gt;невосстановимым отказам&lt;/a&gt;&#10;, всегда создавайте &lt;a href="https://pig.center/ru/docs/etcd/op-guide/maintenance/#snapshot-backup"&gt;резервные копии&lt;/a&gt;&#10; кластера etcd.&lt;/p&gt;</description></item><item><title>Производительность</title><link>https://pig.center/ru/docs/etcd/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Понимание производительности&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd обеспечивает стабильную и устойчиво высокую производительность. Её определяют два фактора: задержка и пропускная способность. Задержка — время выполнения одной операции. Пропускная способность — общее число операций, завершённых за определённый период. Обычно средняя задержка растёт вместе с общей пропускной способностью, когда etcd принимает параллельные клиентские запросы. В типичной облачной среде, например на стандартной машине &lt;code&gt;n-4&lt;/code&gt; в Google Compute Engine (GCE) или сопоставимой машине AWS, кластер etcd из трёх участников при небольшой нагрузке завершает запрос менее чем за одну миллисекунду, а при высокой выполняет более 30,000 запросов в секунду.&lt;/p&gt;</description></item><item><title>Устройство реконфигурации во время выполнения</title><link>https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Реконфигурация во время выполнения — одна из самых сложных и подверженных ошибкам возможностей распределённой системы, особенно основанной на консенсусе системы вроде etcd.&lt;/p&gt;&#10;&lt;p&gt;Ниже описано устройство команд реконфигурации etcd и способы решения связанных проблем.&lt;/p&gt;&#10;&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Двухфазное изменение конфигурации сохраняет безопасность кластера&#10;&lt;/h2&gt;&#10;&lt;p&gt;В etcd каждая реконфигурация во время выполнения в целях безопасности проходит &lt;a href="https://pig.center/ru/docs/etcd/op-guide/runtime-configuration/#add-a-new-member"&gt;две фазы&lt;/a&gt;&#10;. Например, чтобы добавить участника, сначала сообщите кластеру новую конфигурацию, а затем запустите участника.&lt;/p&gt;</description></item><item><title>Версионирование</title><link>https://pig.center/ru/docs/etcd/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/op-guide/versioning/</guid><description>&lt;p&gt;Данный документ описывает версии, поддерживаемые проектом etcd.&lt;/p&gt;&#10;&lt;h2 id="service-versioning-and-supported-versions"&gt;Версионирование сервиса и поддерживаемые версии&#10;&lt;/h2&gt;&#10;&lt;p&gt;Версии etcd выражаются как &lt;strong&gt;x.y.z&lt;/strong&gt;, где &lt;strong&gt;x&lt;/strong&gt; — мажорная версия, &lt;strong&gt;y&lt;/strong&gt; — минорная версия, а &lt;strong&gt;z&lt;/strong&gt; — версия исправления, в соответствии с терминологией &lt;a href="https://semver.org/"&gt;Semantic Versioning&lt;/a&gt;&#10;.&lt;br&gt;&#10;Новые минорные версии могут добавлять дополнительные функции в API.&lt;/p&gt;&#10;&lt;p&gt;Проект etcd поддерживает ветки релизов для текущей версии и предыдущего выпуска. Например, когда v3.5 является текущей версией, поддерживается v3.4. Когда выпускается v3.6, v3.4 прекращает поддержку.&lt;/p&gt;</description></item></channel></rss>