<?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/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE/</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/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE/index.xml" rel="self" type="application/rss+xml"/><item><title>Установка</title><link>https://pig.center/ru/docs/patroni/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/patroni/installation/</guid><description>&lt;p&gt;&lt;a id="installation"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="pre-requirements-for-mac-os"&gt;Предварительные требования для Mac OS&#10;&lt;/h2&gt;&#10;&lt;p&gt;Чтобы установить необходимые компоненты на Mac, выполните:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-ca25e05e-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-ca25e05e-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install postgresql etcd haproxy libyaml python&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&lt;a id="psycopg2_install_options"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="psycopg"&gt;Psycopg&#10;&lt;/h2&gt;&#10;&lt;p&gt;Начиная с &lt;a href="https://www.psycopg.org/articles/2019/04/04/psycopg-28-released/"&gt;psycopg2-2.8&lt;/a&gt;&#10; двоичная версия psycopg2 больше не устанавливается по умолчанию. Для установки из исходного кода необходим компилятор C и пакеты разработки postgres и python. Поскольку в экосистеме Python нельзя указать зависимость как &lt;code&gt;psycopg2 OR psycopg2-binary&lt;/code&gt;, способ установки нужно выбрать самостоятельно.&lt;/p&gt;</description></item><item><title>Компиляция и установка PgBouncer</title><link>https://pig.center/ru/docs/pgbouncer/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/pgbouncer/install/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="building"&gt;Сборка&#10;&lt;/h2&gt;&#10;&lt;p&gt;Для компиляции PgBouncer требуется несколько компонентов:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.gnu.org/software/make/"&gt;GNU Make&lt;/a&gt;&#10; 3.81+&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://libevent.org/"&gt;Libevent&lt;/a&gt;&#10; 2.0+&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.freedesktop.org/wiki/Software/pkg-config/"&gt;pkg-config&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt;&#10; 1.0.1+ для поддержки TLS&lt;/li&gt;&#10;&lt;li&gt;(необязательно) &lt;a href="http://c-ares.haxx.se/"&gt;c-ares&lt;/a&gt;&#10; как альтернатива evdns из Libevent&lt;/li&gt;&#10;&lt;li&gt;(необязательно) библиотеки LDAP&lt;/li&gt;&#10;&lt;li&gt;(необязательно) библиотеки PAM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;После установки зависимостей выполните:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;$ ./configure --prefix=/usr/local&#10;$ make&#10;$ make install&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Для сборки из Git или под Windows используйте отдельные инструкции ниже.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="dns-lookup-support"&gt;Поддержка поиска DNS&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer разрешает имена узлов при установке соединения, а не только один раз&#10;при загрузке конфигурации. Для этого нужна асинхронная реализация DNS. В таблице&#10;перечислены поддерживаемые бэкенды в порядке их проверки:&lt;/p&gt;</description></item><item><title>Быстрый старт</title><link>https://pig.center/ru/docs/etcd/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/quickstart/</guid><description>&lt;p&gt;Следуйте этим инструкциям, чтобы локально установить, запустить и проверить кластер etcd&#10;из одного участника:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Установите etcd из готовых бинарных файлов или исходного кода. Подробности см. в разделе&#10;[Установка][].&lt;/p&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Предупреждение&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;Важно&lt;/strong&gt;: обязательно выполните последний&#10;шаг инструкции по установке и убедитесь, что &lt;code&gt;etcd&lt;/code&gt; доступен в пути поиска.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Запустите &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-3b677297-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="console" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-3b677297-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; etcd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-17T09:19:32.783-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:72&amp;#34;,&amp;#34;msg&amp;#34;:... }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;⋮&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Примечание&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;Примечание&lt;/strong&gt;: вывод &lt;code&gt;etcd&lt;/code&gt; представляет собой&#10;&lt;a href="https://pig.center/ru/docs/etcd/op-guide/configuration/#logging"&gt;журналы&lt;/a&gt;&#10; — сообщения уровня info можно&#10;игнорировать.&lt;/p&gt;</description></item><item><title>Демонстрация</title><link>https://pig.center/ru/docs/etcd/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/demo/</guid><description>&lt;p&gt;В этом ряду примеров показаны базовые процедуры работы с кластером etcd.&lt;/p&gt;&#10;&lt;h2 id="auth"&gt;Аутентификация&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; для аутентификации:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-c9c56904-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="shell" data-td-line-count="24"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c9c56904-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ETCDCTL_API&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:2379&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role root root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user get root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role add role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user add user0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; user grant-role user0 role0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; auth &lt;span class="nb"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# now all client requests go through auth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 put foo bar&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# user0 can read the key foo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENDPOINTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;user0:123 get foo1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Настройка локального кластера</title><link>https://pig.center/ru/docs/etcd/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/ru/docs/etcd/dev-guide/local_cluster/</guid><description>&lt;p&gt;Для тестирования и разработки быстрее и проще всего настроить локальный кластер. Промышленное развёртывание описано в разделе &lt;a href="https://pig.center/ru/docs/etcd/op-guide/clustering/"&gt;кластеризации&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;h2 id="local-standalone-cluster"&gt;Локальный автономный кластер&#10;&lt;/h2&gt;&#10;&lt;h3 id="starting-a-cluster"&gt;Запуск кластера&#10;&lt;/h3&gt;&#10;&lt;p&gt;Чтобы развернуть автономный кластер etcd, выполните:&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-10811d29-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-10811d29-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd&#10;...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Если бинарный файл &lt;code&gt;etcd&lt;/code&gt; отсутствует в текущем рабочем каталоге, он может находиться в &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; или &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Укажите правильный путь при запуске.&lt;/p&gt;&#10;&lt;p&gt;Работающий участник etcd принимает клиентские запросы на &lt;code&gt;localhost:2379&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>