<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PostgreSQL 社区组件 on PIG.CENTER</title><link>https://pig.center/zh/</link><description>Recent content in PostgreSQL 社区组件 on PIG.CENTER</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 08 Sep 2026 21:29:01 +0800</lastBuildDate><atom:link href="https://pig.center/zh/index.xml" rel="self" type="application/rss+xml"/><item><title>pgBadger 13.x 版本记录</title><link>https://pig.center/zh/docs/pgbadger/releases/13/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/releases/13/</guid><description>&lt;p&gt;本页按从新到旧的顺序保留 pgBadger 13.x 的完整上游变更记录。为确保版本、参数、提交者致谢和兼容性描述不被转述改变，正文保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="v13-2"&gt;v13.2 · 2025-12-29&#10;&lt;/h2&gt;&#10;&lt;p&gt;This is a maintenance release of pgBadger that fixes issues and applied patches&#10;reported by users since last release.&lt;/p&gt;</description></item><item><title>注解命令（annotate）</title><link>https://pig.center/zh/docs/pgbackrest/command/annotate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/annotate/</guid><description>&lt;p&gt;&lt;code&gt;backup&lt;/code&gt; 命令执行时附加的注解，可在事后通过 &lt;code&gt;annotate&lt;/code&gt; 命令进行添加、修改或删除。&lt;/p&gt;&#10;&lt;h2 id="命令选项"&gt;命令选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="备份注解选项--annotation"&gt;备份注解选项（&lt;code&gt;--annotation&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;为备份添加用户自定义键值对注解。&lt;/p&gt;</description></item><item><title>动态配置</title><link>https://pig.center/zh/docs/patroni/config/dynamic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/config/dynamic/</guid><description>&lt;p&gt;&lt;a id="dynamic"&gt;&lt;/a&gt;&#10;动态配置存储在 DCS（分布式配置存储）中，并应用于集群的所有节点。&lt;/p&gt;&#10;&lt;p&gt;如需修改动态配置，可使用 &lt;a href="https://pig.center/zh/docs/patroni/patronictl/#patronictl_edit_config"&gt;&lt;code&gt;patronictl edit-config&lt;/code&gt;&lt;/a&gt;&#10; 工具或 Patroni &lt;a href="https://pig.center/zh/docs/patroni/rest_api/#rest_api"&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/a&gt;&#10;。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;loop_wait&lt;/code&gt;&lt;/strong&gt;：主循环每轮的休眠秒数。默认值：10，最小值：1。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/strong&gt;：获取领导者锁的 TTL（秒）。可以理解为触发自动故障转移前的等待时长。默认值：30，最小值：20。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;retry_timeout&lt;/code&gt;&lt;/strong&gt;：DCS 和 PostgreSQL 操作的重试超时时间（秒）。若 DCS 或网络故障时长短于此值，Patroni 不会对主库执行降级。默认值：10，最小值：3。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;警告&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;修改 &lt;strong&gt;&lt;code&gt;loop_wait&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;retry_timeout&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/strong&gt; 时，必须遵守以下约束：&lt;/p&gt;</description></item><item><title>简介</title><link>https://pig.center/zh/docs/patroni/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/readme/</guid><description>&lt;p&gt;&lt;a id="readme"&gt;&lt;/a&gt;&#10;Patroni 是一个基于 Python 构建的高可用 PostgreSQL 解决方案模板框架。它最初 fork 自 Compose 公司的 &lt;a href="https://github.com/compose/governor"&gt;Governor&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://www.youtube.com/watch?v=iruaCgeG7qs"&gt;PostgreSQL HA with Kubernetes and Patroni&lt;/a&gt;&#10;——Josh Berkus 在 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;2016 年 2 月 Zalando 技术博客文章&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="开发状态"&gt;开发状态&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni 正处于活跃开发阶段，欢迎社区贡献。详情请参阅下方的 &lt;a href="https://pig.center/zh/docs/patroni/contributing_guidelines/#contributing_guidelines"&gt;&lt;strong&gt;贡献指南&lt;/strong&gt;&lt;/a&gt;&#10; 章节。&lt;/p&gt;</description></item><item><title>入门指南</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>特性</title><link>https://pig.center/zh/docs/pgbouncer/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/features/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;连接轮换时，按激进程度分为以下几种策略：&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&lt;strong&gt;会话池化&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;最温和的方式。当客户端连接时，将为其分配一个服务端连接，并在客户端保持连接期间始终持有。当客户端断开时，服务端连接将放回连接池。此模式支持所有 PostgreSQL 特性。&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;事务池化&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;仅在事务期间为客户端分配服务端连接。当 PgBouncer 检测到事务结束时，服务端连接将放回连接池。此模式会破坏 PostgreSQL 的部分会话级特性，只有在应用程序配合、不使用不兼容特性的情况下才可使用。不兼容特性详见下表。&lt;/dd&gt;&#10;&lt;dt&gt;&lt;strong&gt;语句池化&lt;/strong&gt;&lt;/dt&gt;&#10;&lt;dd&gt;最激进的方式。这是事务池化的变体：禁止多语句事务。这是为了在客户端强制执行“自动提交”（autocommit）模式，主要面向 PL/Proxy。&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;内存占用极低（默认每连接仅需 2 kB）。这是因为 PgBouncer 无需一次性看到完整的数据包。&lt;/p&gt;</description></item><item><title>新闻</title><link>https://pig.center/zh/docs/pgbackrest/news/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/news/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="release-2-59-1"&gt;pgBackRest 2.59.1 正式发布&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;2026 年 8 月 17 日&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;pgBackRest 社区很高兴地宣布 &lt;a href="https://pgbackrest.org"&gt;pgBackRest&lt;/a&gt;&#10; 2.59.1 正式发布。pgBackRest 是一款可靠、易用的备份与恢复解决方案，可无缝扩展以应对超大规模数据库和工作负载。&lt;/p&gt;</description></item><item><title>pgBadger 12.x 版本记录</title><link>https://pig.center/zh/docs/pgbadger/releases/12/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/releases/12/</guid><description>&lt;p&gt;本页按从新到旧的顺序保留 pgBadger 12.x 的完整上游变更记录。为确保版本、参数、提交者致谢和兼容性描述不被转述改变，正文保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="v12-4"&gt;v12.4 · 2023-12-25&#10;&lt;/h2&gt;&#10;&lt;p&gt;This is a maintenance release of pgBadger that fixes issues reported by&#10;users since last release.&lt;/p&gt;</description></item><item><title>归档获取命令（archive-get）</title><link>https://pig.center/zh/docs/pgbackrest/command/archive-get/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/archive-get/</guid><description>&lt;p&gt;PostgreSQL 通过此命令执行备份恢复、PITR，或将其作为流复制的替代方式来维持副本同步。WAL 段是 PostgreSQL 执行恢复或维护副本的必要条件。&lt;/p&gt;&#10;&lt;p&gt;配置多个仓库时，pgBackRest 按优先级顺序（如 &lt;code&gt;repo1&lt;/code&gt;、&lt;code&gt;repo2&lt;/code&gt; 等）依次从各仓库获取 WAL。速度更快或成本更低的存储应配置更高的优先级。若通过 &lt;code&gt;--repo&lt;/code&gt; 选项指定了某个仓库，则仅从该仓库中查找。&lt;/p&gt;</description></item><item><title>YAML 配置参数</title><link>https://pig.center/zh/docs/patroni/config/yaml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/config/yaml/</guid><description>&lt;p&gt;&lt;a id="yaml"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="全局通用"&gt;全局/通用&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;name&lt;/code&gt;&lt;/strong&gt;：主机名称，在集群中必须唯一。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;namespace&lt;/code&gt;&lt;/strong&gt;：Patroni 在配置存储中保存集群信息的路径，默认值为 &lt;strong&gt;&lt;code&gt;/service&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;scope&lt;/code&gt;&lt;/strong&gt;：集群名称。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a id="log_settings"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>安装</title><link>https://pig.center/zh/docs/patroni/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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="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-496211c2-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-496211c2-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;strong&gt;&lt;code&gt;psycopg2 OR psycopg2-binary&lt;/code&gt;&lt;/strong&gt;，您需要自行选择安装方式。&lt;/p&gt;</description></item><item><title>负载均衡基础</title><link>https://pig.center/zh/docs/haproxy/load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 是否符合其需求。高级用户可能在此发现某些解决方案的片段，仅因此前未意识到某项新功能的存在。此外，本文还提供了部分容量规划信息，说明了产品的生命周期，并对部分功能重叠的产品进行了对比。&lt;/p&gt;</description></item><item><title>配置：pgbouncer.ini</title><link>https://pig.center/zh/docs/pgbouncer/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/config/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="描述"&gt;描述&#10;&lt;/h2&gt;&#10;&lt;p&gt;配置文件采用 &amp;ldquo;ini&amp;rdquo; 格式。节名称位于 &lt;code&gt;[&lt;/code&gt; 和 &lt;code&gt;]&lt;/code&gt; 之间。以 &lt;code&gt;;&lt;/code&gt; 或 &lt;code&gt;#&lt;/code&gt; 开头的行被视为注释并忽略。当 &lt;code&gt;;&lt;/code&gt; 和 &lt;code&gt;#&lt;/code&gt; 出现在行中间时，不会被识别为特殊字符。&lt;/p&gt;</description></item><item><title>下载与安装</title><link>https://pig.center/zh/docs/pgbadger/download/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/download/</guid><description>&lt;h2 id="distribution-channels"&gt;选择分发渠道&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;渠道&lt;/th&gt;&#10; &lt;th scope="col"&gt;适用场景&lt;/th&gt;&#10; &lt;th scope="col"&gt;地址&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;官方发布&lt;/td&gt;&#10; &lt;td&gt;源码归档与版本说明&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://github.com/darold/pgbadger/releases"&gt;GitHub Releases&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RPM 软件包&lt;/td&gt;&#10; &lt;td&gt;基于 RPM 的 Linux 发行版&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://yum.postgresql.org/packages/"&gt;PostgreSQL Yum 仓库&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Debian/Ubuntu 软件包&lt;/td&gt;&#10; &lt;td&gt;基于 APT 的 Linux 发行版&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://wiki.postgresql.org/wiki/Apt"&gt;PostgreSQL Apt 仓库&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;开发源码&lt;/td&gt;&#10; &lt;td&gt;尚未正式发布的最新代码&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://github.com/darold/pgbadger"&gt;darold/pgbadger&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;本站文档快照基于 13.2 源码树。下载前始终应查看发布页面：本地快照为了可复现而固定，上游版本仍会继续更新。&lt;/p&gt;</description></item><item><title>用户指南（Debian/Ubuntu）</title><link>https://pig.center/zh/docs/pgbackrest/user-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/user-guide/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="简介"&gt;简介&#10;&lt;/h2&gt;&#10;&lt;p&gt;本用户指南适合从头到尾顺序阅读——每章内容均依赖前一章的配置基础。例如， &lt;a href="#%e6%81%a2%e5%a4%8d-1"&gt;&lt;strong&gt;恢复&lt;/strong&gt;&lt;/a&gt;&#10; 章节依赖 &lt;a href="#%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"&gt;&lt;strong&gt;快速开始&lt;/strong&gt;&lt;/a&gt;&#10; 章节中已完成的配置。pgBackRest 运行起来之后，跳章阅读也无妨，但建议初次阅读时按顺序跟随本指南。&lt;/p&gt;</description></item><item><title>pgBadger 11.x 版本记录</title><link>https://pig.center/zh/docs/pgbadger/releases/11/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/releases/11/</guid><description>&lt;p&gt;本页按从新到旧的顺序保留 pgBadger 11.x 的完整上游变更记录。为确保版本、参数、提交者致谢和兼容性描述不被转述改变，正文保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="v11-8"&gt;v11.8 · 2022-04-08&#10;&lt;/h2&gt;&#10;&lt;p&gt;This release of pgBadger fix some issues reported by users since past&#10;three months and especially two fixes on new log entries detection in&#10;incremental mode.&lt;/p&gt;</description></item><item><title>归档推送命令（archive-push）</title><link>https://pig.center/zh/docs/pgbackrest/command/archive-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/archive-push/</guid><description>&lt;p&gt;接收来自 PostgreSQL 的 WAL 段，并将其归档到各个仓库中（仓库路径由带索引的 &lt;code&gt;repo-path&lt;/code&gt; 选项定义，详见 &lt;a href="https://pig.center/zh/docs/pgbackrest/configuration/#%e4%bb%93%e5%ba%93%e9%80%89%e9%a1%b9"&gt;&lt;strong&gt;仓库选项&lt;/strong&gt;&lt;/a&gt;&#10; 章节）。WAL 段可以立即推送到归档，也可以根据 &lt;code&gt;archive-async&lt;/code&gt; 的值先暂存在本地。配置了多个仓库时，&lt;code&gt;archive-push&lt;/code&gt; 会尽量向所有仓库推送。&lt;/p&gt;</description></item><item><title>环境变量</title><link>https://pig.center/zh/docs/patroni/config/env/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/config/env/</guid><description>&lt;p&gt;&lt;a id="env"&gt;&lt;/a&gt;&#10;可以使用系统环境变量覆盖 Patroni 配置文件中定义的部分配置参数。本文档列出了 Patroni 处理的所有环境变量。通过环境变量设置的值始终优先于配置文件中的值。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="全局通用"&gt;全局/通用&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_CONFIGURATION&lt;/code&gt;&lt;/strong&gt;：可通过 &lt;a href="https://pig.center/zh/docs/patroni/config/#config"&gt;&lt;code&gt;PATRONI_CONFIGURATION&lt;/code&gt;&lt;/a&gt;&#10; 环境变量为 Patroni 提供完整配置。设置此变量后，其他所有环境变量将被忽略！&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_NAME&lt;/code&gt;&lt;/strong&gt;：运行当前 Patroni 实例的节点名称，在集群内必须唯一。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_NAMESPACE&lt;/code&gt;&lt;/strong&gt;：Patroni 在配置存储中保存集群信息的路径。默认值：&amp;quot;/service&amp;quot;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_SCOPE&lt;/code&gt;&lt;/strong&gt;：集群名称。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="日志"&gt;日志&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_TYPE&lt;/code&gt;&lt;/strong&gt;：日志格式，可为 &lt;strong&gt;&lt;code&gt;plain&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;&lt;code&gt;json&lt;/code&gt;&lt;/strong&gt;。使用 &lt;strong&gt;&lt;code&gt;json&lt;/code&gt;&lt;/strong&gt; 格式需要安装 &lt;a href="https://pig.center/zh/docs/patroni/installation/#extras"&gt;&lt;code&gt;jsonlogger&lt;/code&gt;&lt;/a&gt;&#10;。默认值为 &lt;strong&gt;&lt;code&gt;plain&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_LEVEL&lt;/code&gt;&lt;/strong&gt;：全局日志级别。默认值为 &lt;strong&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/strong&gt;（参见 &lt;a href="https://docs.python.org/3.6/library/logging.html#levels"&gt;Python logging 文档&lt;/a&gt;&#10;）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_TRACEBACK_LEVEL&lt;/code&gt;&lt;/strong&gt;：显示 traceback 的日志级别。默认值为 &lt;strong&gt;&lt;code&gt;ERROR&lt;/code&gt;&lt;/strong&gt;。若希望仅在 &lt;strong&gt;&lt;code&gt;PATRONI_LOG_LEVEL=DEBUG&lt;/code&gt;&lt;/strong&gt; 时才显示 traceback，可将其设置为 &lt;strong&gt;&lt;code&gt;DEBUG&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_FORMAT&lt;/code&gt;&lt;/strong&gt;：日志格式化字符串。若日志类型为 &lt;strong&gt;&lt;code&gt;plain&lt;/code&gt;&lt;/strong&gt;，格式应为字符串，可用属性参见 &lt;a href="https://docs.python.org/3.6/library/logging.html#logrecord-attributes"&gt;LogRecord 属性文档&lt;/a&gt;&#10;。若日志类型为 &lt;strong&gt;&lt;code&gt;json&lt;/code&gt;&lt;/strong&gt;，格式除字符串外还可以是列表，每个列表项对应一个 LogRecord 属性，只需填写字段名，省略 &lt;strong&gt;&lt;code&gt;%(&lt;/code&gt;&lt;/strong&gt; 和 &lt;strong&gt;&lt;code&gt;)&lt;/code&gt;&lt;/strong&gt;。若希望以不同键名输出某个字段，可使用字典，键为日志字段名，值为希望在日志中显示的字段名。默认值为 &lt;strong&gt;%(asctime)s %(levelname)s: %(message)s&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_DATEFORMAT&lt;/code&gt;&lt;/strong&gt;：日期时间格式化字符串（参见 &lt;a href="https://docs.python.org/3.6/library/logging.html#logging.Formatter.formatTime"&gt;formatTime() 文档&lt;/a&gt;&#10;）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_STATIC_FIELDS&lt;/code&gt;&lt;/strong&gt;：为日志添加额外字段，仅在日志类型为 &lt;strong&gt;&lt;code&gt;json&lt;/code&gt;&lt;/strong&gt; 时可用。示例：&lt;strong&gt;&lt;code&gt;PATRONI_LOG_STATIC_FIELDS=&amp;quot;{app: patroni}&amp;quot;&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_MAX_QUEUE_SIZE&lt;/code&gt;&lt;/strong&gt;：Patroni 采用两步日志记录机制。日志记录先写入内存队列，由独立线程从队列中取出后写入 stderr 或文件。内存队列容量默认限制为 &lt;strong&gt;&lt;code&gt;1000&lt;/code&gt;&lt;/strong&gt; 条，足以保留过去约 1 小时 20 分钟的日志。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_DIR&lt;/code&gt;&lt;/strong&gt;：应用程序日志的写入目录。该目录必须已存在且对运行 Patroni 的用户可写。设置此变量后，默认保留 4 个 25MB 的日志文件，可通过 &lt;strong&gt;&lt;code&gt;PATRONI_LOG_FILE_NUM&lt;/code&gt;&lt;/strong&gt; 和 &lt;strong&gt;&lt;code&gt;PATRONI_LOG_FILE_SIZE&lt;/code&gt;&lt;/strong&gt; 调整（见下文）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_MODE&lt;/code&gt;&lt;/strong&gt;：日志文件权限（例如 &lt;strong&gt;&lt;code&gt;0644&lt;/code&gt;&lt;/strong&gt;）。若未指定，将基于当前 umask 值设置。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_FILE_NUM&lt;/code&gt;&lt;/strong&gt;：保留的应用程序日志文件数量。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_FILE_SIZE&lt;/code&gt;&lt;/strong&gt;：触发日志滚动的 patroni.log 文件大小（字节）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_LOGGERS&lt;/code&gt;&lt;/strong&gt;：按 Python 模块重新定义日志级别。示例：&lt;strong&gt;&lt;code&gt;PATRONI_LOG_LOGGERS=&amp;quot;{patroni.postmaster: WARNING, urllib3: DEBUG}&amp;quot;&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS&lt;/code&gt;&lt;/strong&gt;：设置为 &lt;strong&gt;&lt;code&gt;true&lt;/code&gt;&lt;/strong&gt; 时，连续且内容相同的心跳日志不再重复输出。默认值为 &lt;strong&gt;&lt;code&gt;false&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;警告&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;HA 循环的执行时间是诊断资源耗尽等问题所致故障转移的重要信息。将 &lt;strong&gt;&lt;code&gt;PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS&lt;/code&gt;&lt;/strong&gt; 设置为 &lt;strong&gt;&lt;code&gt;true&lt;/code&gt;&lt;/strong&gt; 后，HA 循环执行将不产生日志（除非领导者发生变化），导致这些潜在有用的信息无法从日志中获取。&lt;/p&gt;</description></item><item><title>HAProxy 是什么及其实现原理</title><link>https://pig.center/zh/docs/haproxy/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 用于指代产品，而 HAProxy 用于指代可执行程序、软件包或进程。然而，两者常被互换使用，且均发音为 H-A-Proxy。早期，“HAProxy”曾代表“高可用性代理”，名称以两个独立单词书写，但如今其含义已仅限于“HAProxy”。&lt;/p&gt;</description></item><item><title>命令行参考</title><link>https://pig.center/zh/docs/pgbadger/command-line/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/command-line/</guid><description>&lt;p&gt;本页保留固定上游源码生成的完整命令参考。为了能与 &lt;code&gt;pgbadger --help&lt;/code&gt; 逐项核对，参数名、帮助文字和命令示例均保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="usage-and-options"&gt;用法与选项&#10;&lt;/h2&gt;&#10;&lt;p&gt;Usage: pgbadger [options] logfile [&amp;hellip;]&lt;/p&gt;</description></item><item><title>pgbouncer 命令用法</title><link>https://pig.center/zh/docs/pgbouncer/usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/usage/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="语法"&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="描述"&gt;描述&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;pgbouncer&lt;/strong&gt; 是一个 PostgreSQL 连接池。任何目标应用程序都可以像连接 PostgreSQL 服务器一样连接到 &lt;strong&gt;pgbouncer&lt;/strong&gt;，&lt;strong&gt;pgbouncer&lt;/strong&gt; 会创建一个到实际服务器的连接，或者复用已有连接。&lt;/p&gt;</description></item><item><title>用户指南（RHEL/Rocky/CentOS）</title><link>https://pig.center/zh/docs/pgbackrest/user-guide-rhel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/user-guide-rhel/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="简介"&gt;简介&#10;&lt;/h2&gt;&#10;&lt;p&gt;本用户指南设计为从头到尾顺序阅读——每个章节都依赖前一章节的内容。例如， &lt;a href="#%e6%81%a2%e5%a4%8d-1"&gt;&lt;strong&gt;恢复&lt;/strong&gt;&lt;/a&gt;&#10; 章节依赖 &lt;a href="#%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"&gt;&lt;strong&gt;快速开始&lt;/strong&gt;&lt;/a&gt;&#10; 章节中完成的配置。熟悉 pgBackRest 之后可以跳章查阅，但初次阅读建议按顺序跟随。&lt;/p&gt;</description></item><item><title>pgBadger 10.x 版本记录</title><link>https://pig.center/zh/docs/pgbadger/releases/10/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/releases/10/</guid><description>&lt;p&gt;本页按从新到旧的顺序保留 pgBadger 10.x 的完整上游变更记录。为确保版本、参数、提交者致谢和兼容性描述不被转述改变，正文保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="v10-3"&gt;v10.3 · 2019-02-14&#10;&lt;/h2&gt;&#10;&lt;p&gt;This release of pgBadger is a maintenance release that fixes some&#10;log format autodetection issues another pgBouncer log parsing issue&#10;reported by users. There is also a new feature:&lt;/p&gt;</description></item><item><title>备份命令（backup）</title><link>https://pig.center/zh/docs/pgbackrest/command/backup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/backup/</guid><description>&lt;p&gt;配置多个仓库时，pgBackRest 默认备份到优先级最高的仓库（如 &lt;code&gt;repo1&lt;/code&gt;），除非通过 &lt;code&gt;--repo&lt;/code&gt; 选项明确指定目标仓库。&lt;/p&gt;&#10;&lt;p&gt;pgBackRest 本身不内置调度器，建议通过 cron 或其他调度机制触发备份。&lt;/p&gt;</description></item><item><title>Patroni REST API</title><link>https://pig.center/zh/docs/patroni/rest_api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/rest_api/</guid><description>&lt;p&gt;&lt;a id="rest_api"&gt;&lt;/a&gt;&#10;Patroni 提供了丰富的 REST API，供 Patroni 自身在主库竞选期间调用，也供 &lt;a href="https://pig.center/zh/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; 工具执行故障转移、主从切换、重新初始化、重启和重载等操作，还可供 HAProxy 或其他负载均衡器执行 HTTP 健康检查，以及用于监控目的。以下是 Patroni REST API 端点的完整列表。&lt;/p&gt;</description></item><item><title>PostgreSQL 日志配置</title><link>https://pig.center/zh/docs/pgbadger/postgresql-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/postgresql-logging/</guid><description>&lt;p&gt;pgBadger 只能报告 PostgreSQL 实际写入日志的信息。应先确定可解析的日志前缀与清晰的语句记录策略，再按需要加入检查点、锁、临时文件和自动清理等运行事件。&lt;/p&gt;&#10;&lt;h2 id="minimum-query-logging"&gt;最小查询日志配置&#10;&lt;/h2&gt;&#10;&lt;p&gt;若报告需要查询文本与执行耗时，请启用按时长记录语句：&lt;/p&gt;</description></item><item><title>PgBouncer 编译与安装</title><link>https://pig.center/zh/docs/pgbouncer/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/install/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="编译"&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;，作为 Libevent 内置 evdns 的替代方案&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;</description></item><item><title>基本功能</title><link>https://pig.center/zh/docs/haproxy/basic-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>pgBadger 9.x 版本记录</title><link>https://pig.center/zh/docs/pgbadger/releases/9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/releases/9/</guid><description>&lt;p&gt;本页按从新到旧的顺序保留 pgBadger 9.x 的完整上游变更记录。为确保版本、参数、提交者致谢和兼容性描述不被转述改变，正文保留英文原文。&lt;/p&gt;&#10;&lt;h2 id="v9-2"&gt;v9.2 · 2017-07-27&#10;&lt;/h2&gt;&#10;&lt;p&gt;This release of pgBadger is a maintenance release that adds some new&#10;features.&lt;/p&gt;</description></item><item><title>检查命令（check）</title><link>https://pig.center/zh/docs/pgbackrest/command/check/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/check/</guid><description>&lt;p&gt;&lt;code&gt;check&lt;/code&gt; 命令用于验证 pgBackRest 及 &lt;code&gt;archive_command&lt;/code&gt; 的配置是否正确，确保指定 stanza（stanza 是 pgBackRest 中用于标识 PostgreSQL 集群备份配置的逻辑名称）的归档与备份能够正常运作。该命令会对当前主机上为该 stanza 配置的所有仓库和数据库逐一检查，可检测出配置错误——尤其是归档配置问题，此类问题会导致所需的 WAL 段无法进入归档，从而造成备份不完整。此命令可在 PostgreSQL 主机或仓库主机上运行；也可在备库主机上运行，但由于备库无法执行 &lt;code&gt;pg_switch_xlog()&lt;/code&gt;/&lt;code&gt;pg_switch_wal()&lt;/code&gt;，命令仅会测试仓库配置。&lt;/p&gt;</description></item><item><title>patronictl 命令行</title><link>https://pig.center/zh/docs/patroni/patronictl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/patronictl/</guid><description>&lt;p&gt;&lt;a id="patronictl_version_description"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl_version_parameters"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl_version_examples"&gt;&lt;/a&gt;&#10;&lt;a id="patronictl"&gt;&lt;/a&gt;&#10;Patroni 提供了 &lt;a href="https://pig.center/zh/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; 命令行工具，用于与 Patroni 的 REST API 和 DCS 交互，旨在简化集群操作，适合人工操作或脚本调用。&lt;/p&gt;&#10;&lt;p&gt;&lt;a id="patronictl_configuration"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="配置"&gt;配置&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://pig.center/zh/docs/patroni/patronictl/#patronictl"&gt;patronictl&lt;/a&gt;&#10; 使用以下 3 个配置节：&lt;/p&gt;</description></item><item><title>标准功能</title><link>https://pig.center/zh/docs/haproxy/standard-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/standard-features/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;在本段中，列举了一些在 HAProxy 中非常常见但未必存在于其他负载均衡器上的功能。&lt;/p&gt;&#10;&lt;h2 id="section-3-4-1"&gt;3.4.1. 标准功能：采样与信息转换&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy 支持使用多种“样本提取函数”进行信息采样。其原理是提取称为样本的信息片段，以供即时使用。该机制用于实现会话粘性、构建条件判断、生成日志信息或丰富 HTTP 头。&lt;/p&gt;</description></item><item><title>并行处理</title><link>https://pig.center/zh/docs/pgbadger/parallel-processing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/parallel-processing/</guid><description>&lt;p&gt;pgBadger 提供两种互补的多进程模式。选择时应关注输入日志的形态，而不只是 CPU 数量。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;选项&lt;/th&gt;&#10; &lt;th scope="col"&gt;并行单位&lt;/th&gt;&#10; &lt;th scope="col"&gt;最适合&lt;/th&gt;&#10; &lt;th scope="col"&gt;主要限制&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-j N&lt;/code&gt; / &lt;code&gt;--jobs N&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;一个日志文件的多个分块&lt;/td&gt;&#10; &lt;td&gt;单个可定位的大日志&lt;/td&gt;&#10; &lt;td&gt;分块边界可能重复或漏掉少量查询&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;-J N&lt;/code&gt; / &lt;code&gt;--Jobs N&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;完整日志文件&lt;/td&gt;&#10; &lt;td&gt;大量相互独立的日志&lt;/td&gt;&#10; &lt;td&gt;只有文件数量足以填满工作进程时才有明显收益&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="single-file-jobs"&gt;使用 &lt;code&gt;-j&lt;/code&gt; 拆分单个大文件&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-d7dd9c7b-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="console" data-td-line-count="1"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-d7dd9c7b-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; pgbadger -j &lt;span class="m"&gt;8&lt;/span&gt; /var/log/postgresql/postgresql.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;上游算法把每个文件分成 &lt;code&gt;N&lt;/code&gt; 个字节区间，为每个区间 fork 一个解析进程，把统计结果写入临时二进制文件，最后合并生成报告。&lt;/p&gt;</description></item><item><title>配置参考</title><link>https://pig.center/zh/docs/pgbackrest/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/configuration/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="简介"&gt;简介&#10;&lt;/h2&gt;&#10;&lt;p&gt;pgBackRest 可以完全通过命令行参数使用，但当配置较为复杂或需要设置大量选项时，使用配置文件更为实用。配置文件的默认路径为 &lt;code&gt;/etc/pgbackrest/pgbackrest.conf&lt;/code&gt;。若该路径下不存在配置文件，则会检查旧的默认路径 &lt;code&gt;/etc/pgbackrest.conf&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>源码发布版下载</title><link>https://pig.center/zh/docs/pgbouncer/download/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/download/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-125"&gt;PgBouncer 1.25&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.2/pgbouncer-1.25.2.tar.gz"&gt;pgbouncer-1.25.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2026-05-08&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;865371 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.2/pgbouncer-1.25.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.1/pgbouncer-1.25.1.tar.gz"&gt;pgbouncer-1.25.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-12-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;864801 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.1/pgbouncer-1.25.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.0/pgbouncer-1.25.0.tar.gz"&gt;pgbouncer-1.25.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-11-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;863322 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.25.0/pgbouncer-1.25.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-124"&gt;PgBouncer 1.24&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.1/pgbouncer-1.24.1.tar.gz"&gt;pgbouncer-1.24.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-04-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;717796 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.1/pgbouncer-1.24.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.0/pgbouncer-1.24.0.tar.gz"&gt;pgbouncer-1.24.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2025-01-10&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;706573 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.24.0/pgbouncer-1.24.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-123"&gt;PgBouncer 1.23&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.1/pgbouncer-1.23.1.tar.gz"&gt;pgbouncer-1.23.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-08-02&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;700025 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.1/pgbouncer-1.23.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.0/pgbouncer-1.23.0.tar.gz"&gt;pgbouncer-1.23.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-07-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;694845 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.23.0/pgbouncer-1.23.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-122"&gt;PgBouncer 1.22&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.1/pgbouncer-1.22.1.tar.gz"&gt;pgbouncer-1.22.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-03-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;677351 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.1/pgbouncer-1.22.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.0/pgbouncer-1.22.0.tar.gz"&gt;pgbouncer-1.22.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2024-01-31&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;670589 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.22.0/pgbouncer-1.22.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-121"&gt;PgBouncer 1.21&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.21.0/pgbouncer-1.21.0.tar.gz"&gt;pgbouncer-1.21.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-10-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;668211 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.21.0/pgbouncer-1.21.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-120"&gt;PgBouncer 1.20&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz"&gt;pgbouncer-1.20.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-08-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;638844 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.0/pgbouncer-1.20.0.tar.gz"&gt;pgbouncer-1.20.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-07-20&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;638020 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.20.0/pgbouncer-1.20.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-119"&gt;PgBouncer 1.19&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.1/pgbouncer-1.19.1.tar.gz"&gt;pgbouncer-1.19.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-05-31&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;623569 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.1/pgbouncer-1.19.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.0/pgbouncer-1.19.0.tar.gz"&gt;pgbouncer-1.19.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2023-05-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;616947 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.19.0/pgbouncer-1.19.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-118"&gt;PgBouncer 1.18&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.18.0/pgbouncer-1.18.0.tar.gz"&gt;pgbouncer-1.18.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2022-12-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;600825 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.18.0/pgbouncer-1.18.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-117"&gt;PgBouncer 1.17&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.17.0/pgbouncer-1.17.0.tar.gz"&gt;pgbouncer-1.17.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2022-03-23&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;598294 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.17.0/pgbouncer-1.17.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-116"&gt;PgBouncer 1.16&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.1/pgbouncer-1.16.1.tar.gz"&gt;pgbouncer-1.16.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2021-11-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;591450 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.1/pgbouncer-1.16.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.0/pgbouncer-1.16.0.tar.gz"&gt;pgbouncer-1.16.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2021-08-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;592136 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.16.0/pgbouncer-1.16.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-115"&gt;PgBouncer 1.15&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.15.0/pgbouncer-1.15.0.tar.gz"&gt;pgbouncer-1.15.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-11-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;588042 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.15.0/pgbouncer-1.15.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-114"&gt;PgBouncer 1.14&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.14.0/pgbouncer-1.14.0.tar.gz"&gt;pgbouncer-1.14.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-06-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;578955 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.14.0/pgbouncer-1.14.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-113"&gt;PgBouncer 1.13&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.13.0/pgbouncer-1.13.0.tar.gz"&gt;pgbouncer-1.13.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2020-04-27&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;574955 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.13.0/pgbouncer-1.13.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-112"&gt;PgBouncer 1.12&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.12.0/pgbouncer-1.12.0.tar.gz"&gt;pgbouncer-1.12.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-10-17&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;567465 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.12.0/pgbouncer-1.12.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-111"&gt;PgBouncer 1.11&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.11.0/pgbouncer-1.11.0.tar.gz"&gt;pgbouncer-1.11.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-08-27&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;571414 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.11.0/pgbouncer-1.11.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-110"&gt;PgBouncer 1.10&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.10.0/pgbouncer-1.10.0.tar.gz"&gt;pgbouncer-1.10.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2019-07-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;480571 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.10.0/pgbouncer-1.10.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-19"&gt;PgBouncer 1.9&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.9.0/pgbouncer-1.9.0.tar.gz"&gt;pgbouncer-1.9.0.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2018-08-13&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;469300 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.9.0/pgbouncer-1.9.0.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-18"&gt;PgBouncer 1.8&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8.1/pgbouncer-1.8.1.tar.gz"&gt;pgbouncer-1.8.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2017-12-20&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;465930 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8.1/pgbouncer-1.8.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8/pgbouncer-1.8.tar.gz"&gt;pgbouncer-1.8.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2017-12-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;465612 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.8/pgbouncer-1.8.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-17"&gt;PgBouncer 1.7&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.2/pgbouncer-1.7.2.tar.gz"&gt;pgbouncer-1.7.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2016-02-26&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;462374 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.2/pgbouncer-1.7.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.1/pgbouncer-1.7.1.tar.gz"&gt;pgbouncer-1.7.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2016-02-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;461903 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7.1/pgbouncer-1.7.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7/pgbouncer-1.7.tar.gz"&gt;pgbouncer-1.7.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-12-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;459080 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.7/pgbouncer-1.7.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-16"&gt;PgBouncer 1.6&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6.1/pgbouncer-1.6.1.tar.gz"&gt;pgbouncer-1.6.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-09-03&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;431076 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6.1/pgbouncer-1.6.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6/pgbouncer-1.6.tar.gz"&gt;pgbouncer-1.6.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-08-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;412700 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.6/pgbouncer-1.6.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-15"&gt;PgBouncer 1.5&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.5/pgbouncer-1.5.5.tar.gz"&gt;pgbouncer-1.5.5.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2015-04-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;336145 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.5/pgbouncer-1.5.5.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.4/pgbouncer-1.5.4.tar.gz"&gt;pgbouncer-1.5.4.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-11-28&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;339610 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.4/pgbouncer-1.5.4.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.3/pgbouncer-1.5.3.tar.gz"&gt;pgbouncer-1.5.3.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-09-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;339013 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.3/pgbouncer-1.5.3.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.2/pgbouncer-1.5.2.tar.gz"&gt;pgbouncer-1.5.2.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-05-29&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;335338 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.2/pgbouncer-1.5.2.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.1/pgbouncer-1.5.1.tar.gz"&gt;pgbouncer-1.5.1.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-04-17&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;334413 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5.1/pgbouncer-1.5.1.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5/pgbouncer-1.5.tar.gz"&gt;pgbouncer-1.5.tar.gz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2012-01-05&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;411488 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.5/pgbouncer-1.5.tar.gz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-14"&gt;PgBouncer 1.4&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.2/pgbouncer-1.4.2.tgz"&gt;pgbouncer-1.4.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-06-16&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;283204 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.2/pgbouncer-1.4.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.1/pgbouncer-1.4.1.tgz"&gt;pgbouncer-1.4.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-04-01&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;282728 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4.1/pgbouncer-1.4.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4/pgbouncer-1.4.tgz"&gt;pgbouncer-1.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2011-01-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;231691 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.4/pgbouncer-1.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-13"&gt;PgBouncer 1.3&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.4/pgbouncer-1.3.4.tgz"&gt;pgbouncer-1.3.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-09-09&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;167957 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.4/pgbouncer-1.3.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.3/pgbouncer-1.3.3.tgz"&gt;pgbouncer-1.3.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-05-10&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;167476 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.3/pgbouncer-1.3.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.2/pgbouncer-1.3.2.tgz"&gt;pgbouncer-1.3.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2010-03-15&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;166756 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.2/pgbouncer-1.3.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.1/pgbouncer-1.3.1.tgz"&gt;pgbouncer-1.3.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2009-07-06&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;161518 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3.1/pgbouncer-1.3.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3/pgbouncer-1.3.tgz"&gt;pgbouncer-1.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2009-02-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;160154 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.3/pgbouncer-1.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-12"&gt;PgBouncer 1.2&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.3/pgbouncer-1.2.3.tgz"&gt;pgbouncer-1.2.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-08&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;145372 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.3/pgbouncer-1.2.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.2/pgbouncer-1.2.2.tgz"&gt;pgbouncer-1.2.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-06&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;145017 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.2/pgbouncer-1.2.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.1/pgbouncer-1.2.1.tgz"&gt;pgbouncer-1.2.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-08-04&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;144903 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2.1/pgbouncer-1.2.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2/pgbouncer-1.2.tgz"&gt;pgbouncer-1.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2008-07-29&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;143915 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.2/pgbouncer-1.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-11"&gt;PgBouncer 1.1&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: right"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.2/pgbouncer-1.1.2.tgz"&gt;pgbouncer-1.1.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-12-10&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;122054 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.2/pgbouncer-1.1.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.1/pgbouncer-1.1.1.tgz"&gt;pgbouncer-1.1.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-10-26&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;121042 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1.1/pgbouncer-1.1.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1/pgbouncer-1.1.tgz"&gt;pgbouncer-1.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td&gt;2007-10-09&lt;/td&gt;&#10; &lt;td style="text-align: right"&gt;120462 bytes&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.1/pgbouncer-1.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-10"&gt;PgBouncer 1.0&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;File&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Date&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;Size&lt;/th&gt;&#10; &lt;th scope="col" style="text-align: center"&gt;SHA256&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.8/pgbouncer-1.0.8.tgz"&gt;pgbouncer-1.0.8.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-06-18&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;93636 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.8/pgbouncer-1.0.8.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.7/pgbouncer-1.0.7.tgz"&gt;pgbouncer-1.0.7.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-19&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;93086 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.7/pgbouncer-1.0.7.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.6/pgbouncer-1.0.6.tgz"&gt;pgbouncer-1.0.6.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-12&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;92244 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.6/pgbouncer-1.0.6.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.5/pgbouncer-1.0.5.tgz"&gt;pgbouncer-1.0.5.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91934 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.5/pgbouncer-1.0.5.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.4/pgbouncer-1.0.4.tgz"&gt;pgbouncer-1.0.4.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91889 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.4/pgbouncer-1.0.4.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.3/pgbouncer-1.0.3.tgz"&gt;pgbouncer-1.0.3.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-04-11&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;91489 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.3/pgbouncer-1.0.3.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.2/pgbouncer-1.0.2.tgz"&gt;pgbouncer-1.0.2.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-28&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;90555 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.2/pgbouncer-1.0.2.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.1/pgbouncer-1.0.1.tgz"&gt;pgbouncer-1.0.1.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-15&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;89609 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0.1/pgbouncer-1.0.1.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0/pgbouncer-1.0.tgz"&gt;pgbouncer-1.0.tgz&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;2007-03-13&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;88587 bytes&lt;/td&gt;&#10; &lt;td style="text-align: center"&gt;&lt;a href="https://www.pgbouncer.org/downloads/files/1.0/pgbouncer-1.0.tgz.sha256"&gt;sha256&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="二进制软件包"&gt;二进制软件包&#10;&lt;/h2&gt;&#10;&lt;p&gt;许多操作系统发行版提供了 PgBouncer 的原生软件包/移植版本，建议首先检查您的系统中是否已有可用的版本。&lt;/p&gt;</description></item><item><title>过期命令（expire）</title><link>https://pig.center/zh/docs/pgbackrest/command/expire/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/expire/</guid><description>&lt;p&gt;pgBackRest 基于保留策略对全量备份进行轮换，策略可按数量或时间段定义。按数量保留时，过期操作只关注需要保留的备份数量，不考虑备份的创建时间。差异备份按数量进行保留，但当其依赖的全量备份过期时，差异备份也会随之过期。增量备份没有独立的保留策略——它们始终随关联的全量备份或差异备份一同过期。详情及示例请参见 &lt;a href="https://pig.center/zh/docs/pgbackrest/user-guide/#%e5%85%a8%e9%87%8f%e5%a4%87%e4%bb%bd%e4%bf%9d%e7%95%99%e7%ad%96%e7%95%a5"&gt;&lt;strong&gt;全量备份保留策略&lt;/strong&gt;&lt;/a&gt;&#10; 和 &lt;a href="https://pig.center/zh/docs/pgbackrest/user-guide/#%e5%b7%ae%e5%bc%82%e5%a4%87%e4%bb%bd%e4%bf%9d%e7%95%99%e7%ad%96%e7%95%a5"&gt;&lt;strong&gt;差异备份保留策略&lt;/strong&gt;&lt;/a&gt;&#10; 章节。&lt;/p&gt;</description></item><item><title>版本发布说明</title><link>https://pig.center/zh/docs/pgbackrest/release/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/release/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="简介"&gt;简介&#10;&lt;/h2&gt;&#10;&lt;p&gt;pgBackRest 的版本号由主版本号和次版本号两部分组成。主版本升级 &lt;strong&gt;可能&lt;/strong&gt; 破坏与上一主版本的兼容性，但 v2 版本与 v1 仓库完全兼容，且接受所有 v1 选项。次版本可包含漏洞修复和新功能，但不会更改仓库格式，并尽量避免修改选项和命名约定。v1 版本的文档可在 &lt;strong&gt;&lt;a href="https://pgbackrest.org/1"&gt;此处&lt;/a&gt;&#10;&lt;/strong&gt; 查阅。版本说明中还可能包含&amp;quot;附加说明&amp;quot;，此部分变更仅涉及文档或测试套件，不直接影响 pgBackRest 代码库。&lt;/p&gt;</description></item><item><title>高级功能</title><link>https://pig.center/zh/docs/haproxy/advanced-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 仍完全支持 13 年前为版本 1.1 编写的配置，而 1.6 仅移除了几乎不再使用、已过时的关键词，这些功能可通过其他方式实现。配置与软件升级机制平滑且无中断，允许旧版与新版进程在系统中共存，各自处理自身的连接。启动时会报告系统状态、构建选项及库兼容性信息。&lt;/p&gt;</description></item><item><title>从库镜像与引导</title><link>https://pig.center/zh/docs/patroni/replica_bootstrap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/replica_bootstrap/</guid><description>&lt;p&gt;&lt;a id="replica_imaging_and_bootstrap"&gt;&lt;/a&gt;&#10;Patroni 支持自定义新从库的创建方式，也支持定义全新空集群在引导时的行为。两者有明确区别：只有当 DCS 中存在 &lt;strong&gt;&lt;code&gt;initialize&lt;/code&gt;&lt;/strong&gt; 键时，Patroni 才会创建从库。若不存在该键，Patroni 将在第一个抢到初始化锁的节点上独占执行引导流程。&lt;/p&gt;</description></item><item><title>增量报告</title><link>https://pig.center/zh/docs/pgbadger/incremental-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/incremental-reports/</guid><description>&lt;p&gt;增量模式先以二进制形式保存解析统计，再生成每日 HTML 报告、每周累计报告，以及把它们组织起来的日历式索引。它适合反复处理轮转日志，同时避免重复统计相同记录。&lt;/p&gt;</description></item><item><title>帮助命令（help）</title><link>https://pig.center/zh/docs/pgbackrest/command/help/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/help/</guid><description>&lt;p&gt;&lt;code&gt;help&lt;/code&gt; 命令提供三个层级的帮助信息：未指定命令时显示通用帮助；指定命令（例如 &lt;code&gt;pgbackrest help backup&lt;/code&gt;）时显示该命令的完整说明及有效选项列表；在命令之外还指定了某个选项（例如 &lt;code&gt;pgbackrest help backup type&lt;/code&gt;）时显示该选项在此命令下的完整说明。&lt;/p&gt;</description></item><item><title>版本变更日志</title><link>https://pig.center/zh/docs/pgbouncer/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/changelog/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="pgbouncer-125x"&gt;PgBouncer 1.25.x&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;2026-05-08 - PgBouncer 1.25.2 - &amp;ldquo;Human touch with fresh twist in title race full of uncertainties（充满不确定性的冠军争夺战中，人情味带来新意）&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>常见问题解答</title><link>https://pig.center/zh/docs/pgbackrest/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/faq/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="简介"&gt;简介&#10;&lt;/h2&gt;&#10;&lt;p&gt;常见问题解答旨在针对一些具体问题提供详细说明，这些问题可能未在用户指南、配置参考或命令参考中涵盖。如果在此处找不到您的问题，pgBackRest 在 GitHub 上的 &lt;a href="https://github.com/pgbackrest/pgbackrest/issues"&gt;&lt;strong&gt;Issues List&lt;/strong&gt;&lt;/a&gt;&#10; 也是一个宝贵的资源。&lt;/p&gt;</description></item><item><title>复制模式</title><link>https://pig.center/zh/docs/patroni/replication_modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 配置为异步复制。选择哪种复制方案取决于你的业务需求。建议同时研究异步和同步复制，以及其他高可用方案，以确定最适合自己的解决方案。&lt;/p&gt;</description></item><item><title>性能与容量规划</title><link>https://pig.center/zh/docs/haproxy/sizing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/sizing/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;典型 CPU 使用率数据显示，在 TCP 或 HTTP 关闭模式下，HAProxy 占用约 15% 的处理时间，内核占用约 85%；在 HTTP 持久连接模式下，HAProxy 占用约 30%，内核占用约 70%。这表明操作系统及其调优对整体性能有显著影响。&lt;/p&gt;</description></item><item><title>输出格式</title><link>https://pig.center/zh/docs/pgbadger/output-formats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/output-formats/</guid><description>&lt;p&gt;pgBadger 会根据输出文件扩展名，或 &lt;code&gt;-x&lt;/code&gt; / &lt;code&gt;--extension&lt;/code&gt; 选项选择格式。同一次解析可多次使用 &lt;code&gt;-o&lt;/code&gt; / &lt;code&gt;--outfile&lt;/code&gt;，同时生成多种格式。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;格式&lt;/th&gt;&#10; &lt;th scope="col"&gt;常用扩展名&lt;/th&gt;&#10; &lt;th scope="col"&gt;最适合&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;HTML&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.html&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;带图表的交互式人类可读报告&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;文本&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.txt&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;终端查看与纯文本归档&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;二进制&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.bin&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;可合并的中间统计数据与报告重建&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;JSON&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;.json&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;与其他软件集成；需要 &lt;code&gt;JSON::XS&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;原始 CSV&lt;/td&gt;&#10; &lt;td&gt;自选输出文件&lt;/td&gt;&#10; &lt;td&gt;使用 &lt;code&gt;--dump-raw-csv&lt;/code&gt; 导出逐行数据&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="html-and-text"&gt;HTML 与文本&#10;&lt;/h2&gt;&#10;&lt;p&gt;默认输出为 &lt;code&gt;out.html&lt;/code&gt;：&lt;/p&gt;</description></item><item><title>Info 命令（info）</title><link>https://pig.center/zh/docs/pgbackrest/command/info/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/info/</guid><description>&lt;p&gt;&lt;code&gt;info&lt;/code&gt; 命令可查询单个 stanza（stanza 是 pgBackRest 中用于标识一个 PostgreSQL 集群备份配置的逻辑名称）或所有 stanza 的信息。默认输出为文本格式，以人类可读的摘要展示所请求 stanza 的备份信息。该格式可能随版本更新而变化。&lt;/p&gt;</description></item><item><title>报告示例</title><link>https://pig.center/zh/docs/pgbadger/sample-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/sample-reports/</guid><description>&lt;p&gt;示例内容由 pgBadger 11.8 于 2022 年 5 月生成。原始示例已与本站一起保存，因此即使无法访问上游服务器，也能继续使用报告导航、图表、样式与脚本。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;示例&lt;/th&gt;&#10; &lt;th scope="col"&gt;展示内容&lt;/th&gt;&#10; &lt;th scope="col"&gt;本地副本&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;完整报告&lt;/td&gt;&#10; &lt;td&gt;PostgreSQL 活动与 PgBouncer 统计&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/sample.html"&gt;打开完整报告&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;增量报告&lt;/td&gt;&#10; &lt;td&gt;日历索引、每周累计与每日页面&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/report/index.html"&gt;打开增量索引&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;错误与事件&lt;/td&gt;&#10; &lt;td&gt;仅包含错误和运行事件的报告&lt;/td&gt;&#10; &lt;td&gt;&lt;a href="https://pig.center/third_party/pgbadger/examples/errors.html"&gt;打开错误报告&lt;/a&gt;&#10;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="complete-report"&gt;完整报告&#10;&lt;/h2&gt;&#10;&lt;p&gt;完整报告是一份自包含 HTML 文档。可通过顶部导航查看全局统计、查询、会话、连接、临时文件、检查点、自动清理、锁，以及 PgBouncer 专用图表。&lt;/p&gt;</description></item><item><title>备用集群</title><link>https://pig.center/zh/docs/patroni/standby_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/standby_cluster/</guid><description>&lt;p&gt;&lt;a id="standby_cluster"&gt;&lt;/a&gt;&#10;Patroni 还支持通过&amp;quot;备用集群&amp;quot;功能向远程数据中心（Region）运行级联复制。这类集群具有以下特点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;备用领导者&lt;/strong&gt;（standby leader）：行为与普通集群领导者基本相同，区别在于它从远程节点进行复制。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;级联从库&lt;/strong&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/zh/docs/haproxy/releases-and-upgrades/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/docs/pgbouncer/community/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/community/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="教程"&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;&lt;strong&gt;为 Postgres Plus Standard Server 配置 PgBouncer&lt;/strong&gt;&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;&lt;strong&gt;连接池究竟有什么意义？&lt;/strong&gt;&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="支持"&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;strong&gt;项目主页&lt;/strong&gt;&lt;/a&gt;&#10;（GitHub）&lt;/p&gt;</description></item><item><title>项目指标</title><link>https://pig.center/zh/docs/pgbackrest/metric/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/metric/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="代码覆盖率"&gt;代码覆盖率&#10;&lt;/h2&gt;&#10;&lt;p&gt;pgBackRest 致力于对 &lt;code&gt;/src&lt;/code&gt; 目录下的核心 C 代码实现完整的函数、分支和行覆盖。&lt;/p&gt;&#10;&lt;p&gt;函数覆盖率和行覆盖率均已达到 100%，无任何例外。&lt;/p&gt;</description></item><item><title>常见问题解答</title><link>https://pig.center/zh/docs/pgbouncer/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbouncer/faq/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="如何连接到-pgbouncer"&gt;如何连接到 PgBouncer？&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer 扮演 PostgreSQL 服务器的角色，只需将客户端指向 PgBouncer 端口即可。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="如何在多个服务器之间实现查询负载均衡"&gt;如何在多个服务器之间实现查询负载均衡？&#10;&lt;/h2&gt;&#10;&lt;p&gt;PgBouncer 没有内置的多主机配置功能，但可以通过外部工具实现：&lt;/p&gt;</description></item><item><title>仓库获取命令（repo-get）</title><link>https://pig.center/zh/docs/pgbackrest/command/repo-get/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/repo-get/</guid><description>&lt;p&gt;&lt;code&gt;repo-get&lt;/code&gt; 命令类似于 Unix 的 &lt;code&gt;cat&lt;/code&gt; 命令，但支持所有仓库类型。使用此命令需要提供完整的文件名，主要用于管理、排查和测试目的，不是常规 pgBackRest 使用流程中的必需命令。&lt;/p&gt;&#10;&lt;p&gt;若仓库已加密，&lt;code&gt;repo-get&lt;/code&gt; 将自动解密文件。文件不会自动解压，但可将输出通过管道传递给相应的解压命令，例如 &lt;code&gt;gzip -d&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Watchdog 支持</title><link>https://pig.center/zh/docs/patroni/watchdog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/watchdog/</guid><description>&lt;p&gt;&lt;a id="watchdog"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;同时存在多个以主库身份运行的 PostgreSQL 实例，可能因时间线分叉而导致事务丢失，这种情况也称为脑裂（split-brain）问题。为了避免脑裂，Patroni 需要确保在 DCS 中的领导者键过期后，PostgreSQL 不再接受任何事务提交。正常情况下，Patroni 会在领导者锁更新失败时尝试停止 PostgreSQL 来实现这一目标。然而，以下各种原因可能导致该机制失效：&lt;/p&gt;</description></item><item><title>相关产品与替代方案</title><link>https://pig.center/zh/docs/haproxy/ecosystem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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. Apache HTTP 服务器&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache 是事实上的标准 HTTP 服务器。它是一个功能完整且模块化的项目，支持静态文件服务和动态内容处理。Apache 可以作为某些应用服务器的前端。它甚至可以代理请求并缓存响应。在所有这些使用场景中，通常需要一个前端负载均衡器。Apache 可以在多种模式下运行，其中某些模式的开销较大。某些模块仍需依赖开销较大的预派生模型，这将导致 Apache 在连接数较高时难以良好扩展。在此情况下，HAProxy 可通过将每台服务器的连接数限制强制设定为安全值，显著提升服务器性能，并有效保护服务器资源，使这些资源能更高效地被应用程序利用。&lt;/p&gt;</description></item><item><title>仓库列表命令（repo-ls）</title><link>https://pig.center/zh/docs/pgbackrest/command/repo-ls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/repo-ls/</guid><description>&lt;p&gt;&lt;code&gt;repo-ls&lt;/code&gt; 类似于 Unix 的 &lt;code&gt;ls&lt;/code&gt; 命令，但支持所有 pgBackRest 仓库类型。该命令接受一个路径参数，可以是绝对路径，也可以是相对于 &lt;code&gt;--repo-path&lt;/code&gt; 所定义的仓库根路径的相对路径。此命令主要用于管理、排查和测试场景，并非常规部署的必要命令。&lt;/p&gt;</description></item><item><title>如何搭建演示集群</title><link>https://pig.center/zh/docs/etcd/tasks/operator/how-to-setup-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-c62951bd-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-c62951bd-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-c62951bd-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-c62951bd-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/zh/docs/patroni/pause/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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="目标"&gt;目标&#10;&lt;/h2&gt;&#10;&lt;p&gt;在某些特殊情况下，Patroni 需要临时退出对集群的管理，同时仍在 DCS 中保留集群状态。典型使用场景包括对集群执行一些不常见的操作，例如大版本升级或数据损坏恢复。在此类操作期间，节点往往会因 Patroni 未知的原因频繁启停，某些节点甚至可能被临时提升为主库，从而打破&amp;quot;同一时间只能有一个主库&amp;quot;的假设。为此，Patroni 需要具备从运行中的集群&amp;quot;脱离&amp;quot;的能力，实现类似 Pacemaker 维护模式的效果。&lt;/p&gt;</description></item><item><title>支持与贡献</title><link>https://pig.center/zh/docs/pgbadger/support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/support/</guid><description>&lt;p&gt;pgBadger 是一个开放维护的项目。缺陷报告、功能建议、文档修复与代码补丁都通过上游 GitHub 仓库处理。&lt;/p&gt;&#10;&lt;h2 id="bugs-and-features"&gt;缺陷与功能需求&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;升级到最新正式版本，确认问题仍然存在。&lt;/li&gt;&#10;&lt;li&gt;搜索&lt;a href="https://github.com/darold/pgbadger/issues"&gt;开放问题&lt;/a&gt;&#10;与&lt;a href="https://github.com/darold/pgbadger/issues?q=is%3Aissue&amp;#43;is%3Aclosed"&gt;已关闭问题&lt;/a&gt;&#10;，查看是否已有答案。&lt;/li&gt;&#10;&lt;li&gt;把问题缩减为仍能复现的最小安全日志样本与命令行。&lt;/li&gt;&#10;&lt;li&gt;删除凭据、敏感 SQL、绑定值、主机名、地址与业务数据。&lt;/li&gt;&#10;&lt;li&gt;创建&lt;a href="https://github.com/darold/pgbadger/issues/new"&gt;新问题&lt;/a&gt;&#10;，写明 pgBadger 版本、操作系统、输入格式、完整选项、实际结果与预期结果。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;对于崩溃或解析错误，只应附上复现边界所需的最少脱敏日志。完整生产日志或生成报告通常不适合放在公开问题中。&lt;/p&gt;</description></item><item><title>文档与社区</title><link>https://pig.center/zh/docs/haproxy/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/resources/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-1"&gt;1. 可用文档&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy 的完整文档由以下文件组成。请先查阅与问题相关的文档，以节省时间并获得最准确的答案。如果这些文档已经给出答案，请勿再向邮件列表重复提问。&lt;/p&gt;</description></item><item><title>DCS 故障安全模式</title><link>https://pig.center/zh/docs/patroni/dcs_failsafe_mode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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="问题背景"&gt;问题背景&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni 高度依赖分布式配置存储（DCS）来完成领导者选举和检测网络分区。具体而言，节点只有在能够成功更新 DCS 中的领导者锁时，才被允许以主库身份运行 PostgreSQL。一旦领导者锁更新失败，PostgreSQL 将立即被降级并以只读模式启动。触发该&amp;quot;问题&amp;quot;的概率因所使用的 DCS 而异——例如，当 Etcd 专用于 Patroni 时，发生概率接近于零；而当使用以 Etcd 为后端的 Kubernetes API 时，则可能更为频繁。&lt;/p&gt;</description></item><item><title>恢复命令（restore）</title><link>https://pig.center/zh/docs/pgbackrest/command/restore/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/restore/</guid><description>&lt;p&gt;&lt;code&gt;restore&lt;/code&gt; 命令默认从第一个存有备份的仓库中自动选取最新备份（参见 &lt;a href="https://pig.center/zh/docs/pgbackrest/user-guide/#%e6%81%a2%e5%a4%8d%e5%a4%87%e4%bb%bd"&gt;&lt;strong&gt;快速开始 - 恢复备份&lt;/strong&gt;&lt;/a&gt;&#10;）。仓库的检查顺序由 &lt;code&gt;pgbackrest.conf&lt;/code&gt; 决定（例如先检查 repo1，再检查 repo2）。若要从特定仓库恢复，可使用 &lt;code&gt;--repo&lt;/code&gt; 选项（例如 &lt;code&gt;--repo=1&lt;/code&gt;）。若需恢复非最新的备份，可传入 &lt;code&gt;--set&lt;/code&gt; 选项。&lt;/p&gt;</description></item><item><title>配置手册</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>许可证与致谢</title><link>https://pig.center/zh/docs/pgbadger/license/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbadger/license/</guid><description>&lt;p&gt;pgBadger 是以 PostgreSQL License 发布的自由开源软件。只要保留版权与许可证声明，就可以免费使用、复制、修改与分发。&lt;/p&gt;&#10;&lt;h2 id="postgresql-license"&gt;PostgreSQL License 原文&#10;&lt;/h2&gt;&#10;&lt;p&gt;Copyright (c) 2012-2026, Gilles Darold&lt;/p&gt;</description></item><item><title>1. 快速 HTTP 提示</title><link>https://pig.center/zh/docs/haproxy/http-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/http-fundamentals/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;本文涵盖上述指定版本中实现的配置语言。&#10;本文不提供任何提示、示例或建议。&#10;如需此类文档，请参阅参考手册或架构手册。&#10;编号章节在 HAProxy 扁平侧边栏中按顺序排列，支持直接导航。&lt;/p&gt;</description></item><item><title>服务器命令（server）</title><link>https://pig.center/zh/docs/pgbackrest/command/server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/server/</guid><description>&lt;p&gt;pgBackRest 服务器允许在不使用 SSH 协议的情况下访问远程主机。&lt;/p&gt;&#10;&lt;h2 id="命令选项"&gt;命令选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="tls-服务器地址选项--tls-server-address"&gt;TLS 服务器地址选项（&lt;code&gt;--tls-server-address&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;TLS 服务器地址。&lt;/p&gt;</description></item><item><title>在 Kubernetes 中使用 Patroni</title><link>https://pig.center/zh/docs/patroni/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/kubernetes/</guid><description>&lt;p&gt;&lt;a id="kubernetes"&gt;&lt;/a&gt;&#10;Patroni 可以利用 Kubernetes 对象来存储集群状态并管理领导者键，从而无需任何额外的一致性存储即可在 Kubernetes 环境中运行 PostgreSQL——也就是说，不需要单独部署 Etcd。Patroni 支持两种不同类型的 Kubernetes 对象来存储领导者键和配置键，通过 &lt;strong&gt;&lt;code&gt;kubernetes.use_endpoints&lt;/code&gt;&lt;/strong&gt; 配置项或 &lt;strong&gt;&lt;code&gt;PATRONI_KUBERNETES_USE_ENDPOINTS&lt;/code&gt;&lt;/strong&gt; 环境变量进行选择。&lt;/p&gt;</description></item><item><title>2. 配置 HAProxy</title><link>https://pig.center/zh/docs/haproxy/configuration-basics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/configuration-basics/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;h2 id="section-2-1"&gt;2.1. 配置文件格式&#10;&lt;/h2&gt;&#10;&lt;p&gt;HAProxy 的配置过程涉及三个主要参数来源：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;命令行参数，始终具有最高优先级&lt;/li&gt;&#10;&lt;li&gt;配置文件，其格式在此处描述&lt;/li&gt;&#10;&lt;li&gt;运行进程的环境，若显式引用了某些环境变量&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;配置文件采用一种相对简单的分层格式，遵循若干基本规则：&lt;/p&gt;</description></item><item><title>Citus 支持</title><link>https://pig.center/zh/docs/patroni/citus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;多节点 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; 数据库扩展。最低支持的 Citus 版本为 10.0，但为了充分利用工作节点透明主从切换和重启的特性，建议使用至少 Citus 11.2。&lt;/li&gt;&#10;&lt;li&gt;集群名称（&lt;strong&gt;&lt;code&gt;scope&lt;/code&gt;&lt;/strong&gt;）在所有 Citus 节点上必须相同！&lt;/li&gt;&#10;&lt;li&gt;超级用户凭据在协调节点和所有工作节点上必须相同，且 &lt;strong&gt;&lt;code&gt;pg_hba.conf&lt;/code&gt;&lt;/strong&gt; 应允许所有节点之间的超级用户访问。&lt;/li&gt;&#10;&lt;li&gt;工作节点到协调节点的 &lt;a href="https://pig.center/zh/docs/patroni/config/yaml/#restapi_settings"&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/a&gt;&#10; 访问必须被允许。例如，凭据应相同，如果配置了客户端证书，工作节点的客户端证书必须被协调节点接受。&lt;/li&gt;&#10;&lt;li&gt;在 &lt;strong&gt;&lt;code&gt;patroni.yaml&lt;/code&gt;&lt;/strong&gt; 中添加以下配置节：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-f70e9d02-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-f70e9d02-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 表示协调节点，工作节点使用 1、2、3 等&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;# 所有节点上必须相同&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>服务器心跳命令（server-ping）</title><link>https://pig.center/zh/docs/pgbackrest/command/server-ping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/server-ping/</guid><description>&lt;p&gt;向 pgBackRest TLS 服务器发送 ping，确认其正在接受连接。此命令仅作为存活性检查，不进行身份验证。&lt;/p&gt;&#10;&lt;p&gt;若命令行中未指定主机，则使用 &lt;code&gt;tls-server-host&lt;/code&gt; 选项的值。&lt;/p&gt;&#10;&lt;h2 id="命令选项"&gt;命令选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="tls-服务器地址选项--tls-server-address"&gt;TLS 服务器地址选项（&lt;code&gt;--tls-server-address&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;TLS 服务器地址。&lt;/p&gt;</description></item><item><title>3. 全局段</title><link>https://pig.center/zh/docs/haproxy/global/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/global/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;“global” 段中的参数为进程级配置，通常与操作系统相关。这些参数通常只需一次性设置，一旦配置正确便无需再修改。部分参数在命令行中也有对应选项。&lt;/p&gt;</description></item><item><title>Stanza 创建命令（stanza-create）</title><link>https://pig.center/zh/docs/pgbackrest/command/stanza-create/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/stanza-create/</guid><description>&lt;p&gt;&lt;code&gt;stanza-create&lt;/code&gt; 命令须在 &lt;code&gt;pgbackrest.conf&lt;/code&gt; 中完成 stanza 配置后再执行（stanza 是 pgBackRest 中用于标识一个 PostgreSQL 集群备份配置的逻辑名称）。若配置了多个仓库，&lt;code&gt;stanza-create&lt;/code&gt; 会在每个仓库上分别建立 stanza。已创建的 stanza 会被跳过，因此即便新增了仓库，也可以随时安全地重复执行 &lt;code&gt;stanza-create&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>将独立实例转换为 Patroni 集群</title><link>https://pig.center/zh/docs/patroni/existing_data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/docs/patroni/readme/#running_configuring"&gt;&lt;strong&gt;运行与配置&lt;/strong&gt;&lt;/a&gt;&#10;。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="操作步骤"&gt;操作步骤&#10;&lt;/h2&gt;&#10;&lt;p&gt;以下是将现有 PostgreSQL 集群转换为 Patroni 托管集群的步骤概览。本步骤假设现有集群的所有节点当前均在运行，并且您 &lt;strong&gt;不打算&lt;/strong&gt; 在迁移过程中修改 PostgreSQL 配置。具体步骤如下：&lt;/p&gt;</description></item><item><title>4. 代理</title><link>https://pig.center/zh/docs/haproxy/proxies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/proxies/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;代理配置可位于一组段中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;defaults [&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;] [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;frontend &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;backend &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;li&gt;listen &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; [ from &lt;code&gt;&amp;lt;defaults_name&amp;gt;&lt;/code&gt; ]&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;前端段描述了一组用于接收客户端连接的监听套接字。&lt;/p&gt;&#10;&lt;p&gt;后端段描述了一组代理将连接以转发传入连接的服务器。&lt;/p&gt;</description></item><item><title>Stanza 删除命令（stanza-delete）</title><link>https://pig.center/zh/docs/pgbackrest/command/stanza-delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/stanza-delete/</guid><description>&lt;p&gt;&lt;code&gt;stanza-delete&lt;/code&gt; 命令用于删除仓库中与指定 stanza 关联的所有数据。stanza 是 pgBackRest 中用于标识一个 PostgreSQL 集群备份配置的逻辑名称。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;此命令会永久删除指定 stanza 在 pgBackRest 仓库中的所有备份和归档数据，请谨慎使用。&lt;/p&gt;</description></item><item><title>与其他工具的集成</title><link>https://pig.center/zh/docs/patroni/tools_integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/tools_integration/</guid><description>&lt;p&gt;&lt;a id="tools_integration"&gt;&lt;/a&gt;&#10;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;strong&gt;&lt;code&gt;patroni_barman&lt;/code&gt;&lt;/strong&gt; 的应用程序，内含与 &lt;strong&gt;&lt;code&gt;pg-backup-api&lt;/code&gt;&lt;/strong&gt; 通信的逻辑，可用于远程执行 Barman 操作。&lt;/p&gt;</description></item><item><title>5. 绑定与服务器选项</title><link>https://pig.center/zh/docs/haproxy/bind-and-server-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/bind-and-server-options/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;“bind”、“server” 和 “default-server” 关键字支持多种设置，具体取决于构建选项以及 HAProxy 所基于的系统。这些设置通常由一个单词组成，有时后接一个值，与 “bind” 或 “server” 语句位于同一行。所有这些选项均在本节中描述。&lt;/p&gt;</description></item><item><title>Stanza 升级命令（stanza-upgrade）</title><link>https://pig.center/zh/docs/pgbackrest/command/stanza-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/stanza-upgrade/</guid><description>&lt;p&gt;将 PostgreSQL 升级到新的主版本后，必须立即将所有 pgBackRest 配置中的 &lt;code&gt;pg-path&lt;/code&gt; 更新为新的数据库位置，然后运行 &lt;code&gt;stanza-upgrade&lt;/code&gt; 命令。若主机上配置了多个仓库，每个仓库都会执行 stanza 升级。若数据库处于离线状态，请使用 &lt;code&gt;--no-online&lt;/code&gt; 选项。&lt;/p&gt;</description></item><item><title>安全注意事项</title><link>https://pig.center/zh/docs/patroni/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/security/</guid><description>&lt;p&gt;&lt;a id="security"&gt;&lt;/a&gt;&#10;Patroni 集群有两个需要防范未授权访问的接口：分布式配置存储（DCS）和 Patroni REST API。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="保护-dcs"&gt;保护 DCS&#10;&lt;/h2&gt;&#10;&lt;p&gt;Patroni 和 &lt;a href="https://pig.center/zh/docs/patroni/patronictl/#patronictl"&gt;&lt;strong&gt;patronictl&lt;/strong&gt;&lt;/a&gt;&#10; 都会向 DCS 读写数据。&lt;/p&gt;&#10;&lt;p&gt;尽管 DCS 本身不包含任何敏感信息，但它允许修改部分 Patroni/PostgreSQL 配置，因此首要保护对象就是 DCS 本身。&lt;/p&gt;</description></item><item><title>6. 缓存</title><link>https://pig.center/zh/docs/haproxy/cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/cache/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 提供一个缓存，专为小型对象（如 favicon、CSS 等）的缓存而设计。&#10;这是一个极简且低维护成本的缓存，运行于内存中。&lt;/p&gt;&#10;&lt;p&gt;缓存基于所有线程共享的内存区域，并划分为 1kB 的块。&lt;/p&gt;</description></item><item><title>启动命令（start）</title><link>https://pig.center/zh/docs/pgbackrest/command/start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/start/</guid><description>&lt;p&gt;如果 pgBackRest 进程之前已通过 &lt;code&gt;stop&lt;/code&gt; 命令停止，可使用 &lt;code&gt;start&lt;/code&gt; 命令重新允许它们运行。注意，此命令不会立即启动任何 pgBackRest 进程，只是解除运行限制。详情与示例请参见 &lt;a href="https://pig.center/zh/docs/pgbackrest/user-guide/#%e5%90%af%e5%8a%a8%e4%b8%8e%e5%81%9c%e6%ad%a2"&gt;&lt;strong&gt;启动与停止&lt;/strong&gt;&lt;/a&gt;&#10;。&lt;/p&gt;&#10;&lt;h2 id="通用选项"&gt;通用选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="允许以-root-用户运行选项--allow-root"&gt;允许以 root 用户运行选项（&lt;code&gt;--allow-root&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;允许命令以 root 用户运行。&lt;/p&gt;</description></item><item><title>多数据中心高可用</title><link>https://pig.center/zh/docs/patroni/ha_multi_dc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/docs/patroni/replication_modes/#replication_modes"&gt;&lt;strong&gt;复制模式&lt;/strong&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="同步复制"&gt;同步复制&#10;&lt;/h2&gt;&#10;&lt;p&gt;要构建能够自动容忍单区域故障的多数据中心集群，至少需要 3 个数据中心。&lt;/p&gt;</description></item><item><title>7. ACL 与样本提取</title><link>https://pig.center/zh/docs/haproxy/acls-and-samples/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/acls-and-samples/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 可从请求或响应流、客户端或服务器信息、表格、环境信息等来源提取数据。提取此类数据的动作称为获取样本。获取后，这些样本可用于多种用途，例如作为粘性表的键，但最常见的用法是将其与称为模式的预定义常量数据进行匹配。&lt;/p&gt;</description></item><item><title>停止命令（stop）</title><link>https://pig.center/zh/docs/pgbackrest/command/stop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/stop/</guid><description>&lt;p&gt;禁止任何新的 pgBackRest 进程运行。默认情况下，正在运行的进程将被允许正常完成。使用 &lt;code&gt;--force&lt;/code&gt; 选项可强制终止正在运行的进程。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;stop&lt;/code&gt; 命令执行完成后，此后尝试运行的 pgBackRest 进程将返回错误。详情与示例请参见 &lt;a href="https://pig.center/zh/docs/pgbackrest/user-guide/#%e5%90%af%e5%8a%a8%e4%b8%8e%e5%81%9c%e6%ad%a2"&gt;&lt;strong&gt;启动与停止&lt;/strong&gt;&lt;/a&gt;&#10;。&lt;/p&gt;</description></item><item><title>常见问题</title><link>https://pig.center/zh/docs/patroni/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/faq/</guid><description>&lt;p&gt;&lt;a id="faq"&gt;&lt;/a&gt;&#10;本节收录了关于 Patroni 最常见问题的解答，各子节聚焦于不同类别的问题。&lt;/p&gt;&#10;&lt;p&gt;希望这些内容能帮你解答大多数疑问。如果仍有疑问或遇到意外问题，请参阅 &lt;a href="https://pig.center/zh/docs/patroni/contributing_guidelines/#chatting"&gt;&lt;code&gt;chatting&lt;/code&gt;&lt;/a&gt;&#10; 和 &lt;a href="https://pig.center/zh/docs/patroni/contributing_guidelines/#reporting_bugs"&gt;&lt;code&gt;reporting_bugs&lt;/code&gt;&lt;/a&gt;&#10;，了解如何获取帮助或提交问题报告。&lt;/p&gt;</description></item><item><title>8. 日志记录</title><link>https://pig.center/zh/docs/haproxy/configuration-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/configuration-logging/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;本文的强项之一无疑是其精确的日志记录。它可能为这类产品提供了最详尽的信息级别，这对排查复杂环境中的问题至关重要。日志中提供的标准信息包括客户端端口、TCP/HTTP 状态定时器、流在终止时的精确状态以及精确的终止原因，关于将流量导向服务器的决策信息，当然还包括捕获任意头字段的能力。&lt;/p&gt;</description></item><item><title>验证命令（verify）</title><link>https://pig.center/zh/docs/pgbackrest/command/verify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/verify/</guid><description>&lt;p&gt;&lt;code&gt;verify&lt;/code&gt; 用于验证仓库中的备份和归档是否有效。&lt;/p&gt;&#10;&lt;h2 id="命令选项"&gt;命令选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="输出格式选项--output"&gt;输出格式选项（&lt;code&gt;--output&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;输出类型。&lt;/p&gt;&#10;&lt;p&gt;支持以下输出类型：&lt;/p&gt;</description></item><item><title>版本历史</title><link>https://pig.center/zh/docs/patroni/releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/patroni/releases/</guid><description>&lt;p&gt;&lt;a id="releases"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="version-415"&gt;Version 4.1.5&#10;&lt;/h2&gt;&#10;&lt;p&gt;发布于 2026-08-12&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;兼容性改进&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;兼容 PostgreSQL 14.24、15.19、16.15、17.11 与 18.6（Alexander Kukushkin）&lt;/p&gt;</description></item><item><title>9. 支持的过滤器</title><link>https://pig.center/zh/docs/haproxy/filters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/filters/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;以下是官方支持的过滤器及其所接受的参数列表。根据编译选项的不同，部分过滤器可能不可用。可用过滤器的列表将在 HAProxy -vv. 中报告。&lt;/p&gt;&#10;&lt;p&gt;另请参见：&amp;ldquo;过滤器&amp;rdquo;&lt;/p&gt;</description></item><item><title>版本命令（version）</title><link>https://pig.center/zh/docs/pgbackrest/command/version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/pgbackrest/command/version/</guid><description>&lt;p&gt;显示已安装的 pgBackRest 版本。&lt;/p&gt;&#10;&lt;h2 id="命令选项"&gt;命令选项&#10;&lt;/h2&gt;&#10;&lt;h3 id="输出格式选项--output"&gt;输出格式选项（&lt;code&gt;--output&lt;/code&gt;）&#10;&lt;/h3&gt;&#10;&lt;p&gt;输出类型。&lt;/p&gt;&#10;&lt;p&gt;支持以下输出类型：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;text&lt;/code&gt; — 以文本形式显示已安装的 pgBackRest 版本。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;num&lt;/code&gt; — 以整数形式显示已安装的 pgBackRest 版本。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-0bf04ba9-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="2"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-0bf04ba9-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;text&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="l"&gt;output=num&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>从 etcd 中读取</title><link>https://pig.center/zh/docs/etcd/tasks/developer/reading-from-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-4eaa1d9d-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-4eaa1d9d-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;</description></item><item><title>贡献指南</title><link>https://pig.center/zh/docs/patroni/contributing_guidelines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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="在线交流"&gt;在线交流&#10;&lt;/h2&gt;&#10;&lt;p&gt;如有疑问、需要互动式故障排查帮助，或希望与其他 Patroni 用户交流，欢迎加入 &lt;a href="https://pgtreats.info/slack-invite"&gt;PostgreSQL Slack&lt;/a&gt;&#10; 的 &lt;a href="https://postgresteam.slack.com/archives/C9XPYG92A"&gt;#patroni&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="报告缺陷"&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;Issues Tracker&lt;/a&gt;&#10; 中是否已存在相同问题。&lt;/p&gt;</description></item><item><title>10. FastCGI 应用程序</title><link>https://pig.center/zh/docs/haproxy/fastcgi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/fastcgi/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 可以向 Responder FastCGI 应用发送 HTTP 请求。此功能自 HAProxy 2.1 版本起引入。为此，必须将服务器配置为使用 FastCGI 协议（在服务器行中使用关键字 &amp;ldquo;proto fcgi&amp;rdquo;），且后端管理这些服务器时，必须配置并使用一个 FastCGI 应用（在代理段中使用关键字 &amp;ldquo;use-fcgi-app&amp;rdquo;）。可以定义多个 FastCGI 应用，但每个后端在同一时间只能使用其中一个。&lt;/p&gt;</description></item><item><title>11. 粘性表与对等节点</title><link>https://pig.center/zh/docs/haproxy/stick-tables-and-peers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/stick-tables-and-peers/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;在 HAProxy 中，stick-table 是一种机制，允许将一定数量的信息和指标与特定类型的键关联，并在最后一次更新后持续一定时间。这可视为表格中的一行多列数据，其中行号由键值决定，各列代表不同的衡量标准。&lt;/p&gt;</description></item><item><title>12. 其他配置段</title><link>https://pig.center/zh/docs/haproxy/other-sections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/other-sections/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;以下所述段落使用频率较低，通常仅支持少量参数。它们之间不存在隐式关联。所有段均通过单一关键字启动。在 &amp;ldquo;global&amp;rdquo; 段之前禁止出现任何此类段。部分段的支持可能受构建选项限制（例如与 SSL 相关的任何功能）。&lt;/p&gt;</description></item><item><title>管理指南</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description/></item><item><title>1. 先决条件</title><link>https://pig.center/zh/docs/haproxy/prerequisites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/prerequisites/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;本文介绍如何启动、停止、管理 HAProxy 及排查其故障，也会说明一些已知限制和应避免的陷阱。本文不涉及 HAProxy 的配置方法；相关内容请参阅 &lt;a href="https://pig.center/zh/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 操作系统的管理能力，日常使用 shell，并熟悉 strace、tcpdump 等故障排查工具。&lt;/p&gt;</description></item><item><title>向 etcd 写入</title><link>https://pig.center/zh/docs/etcd/tasks/developer/writing-to-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-72b41e12-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-72b41e12-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;etcdctl --endpoints&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ENDPOINTS&lt;/span&gt; put foo &lt;span class="s2"&gt;&amp;#34;Hello World!&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; 为键名称&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;quot;Hello World!&amp;quot;&lt;/code&gt; 为用引号括起的值&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>2. HAProxy 架构</title><link>https://pig.center/zh/docs/haproxy/management-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/management-architecture/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 是一个多线程、事件驱动、非阻塞的守护进程。它使用事件多路复用机制调度所有活动，而不依赖系统在多项活动之间切换调度。大多数情况下，HAProxy 只运行一个进程，因此在系统上执行 &amp;ldquo;ps aux&amp;rdquo; 时通常只会看到一个 &amp;ldquo;haproxy&amp;rdquo; 进程；平滑重载期间是例外，此时旧进程会与新进程并行完成剩余工作。因此，使用 strace 始终可以轻松跟踪其活动。为利用多个处理器，HAProxy 默认会为每个允许使用的处理器启动一个工作线程。除非另有明确配置，传入流量会均匀分配给所有线程，每个线程运行相同的事件循环。HAProxy 将线程间依赖严格控制在最低水平，以实现近乎线性的扩展能力。这也意味着每条连接只由一个线程处理。因此，要充分利用全部处理能力，连接数至少应与线程数相当；实际环境几乎总能满足这一条件。&lt;/p&gt;</description></item><item><title>3. 启动 HAProxy</title><link>https://pig.center/zh/docs/haproxy/starting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-c293d7f4-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-c293d7f4-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/zh/docs/haproxy/stopping-and-restarting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 信号时，进程立即退出，所有已建立的连接将被关闭。优雅停止通过向 HAProxy 进程发送 SIGUSR1 信号触发，其操作仅包括解除对监听端口的绑定，但会继续处理现有连接，直至所有连接关闭。当最后一个连接关闭后，进程退出。&lt;/p&gt;</description></item><item><title>5. 文件描述符限制</title><link>https://pig.center/zh/docs/haproxy/file-descriptors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/file-descriptors/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;为确保所有传入连接均能成功处理，HAProxy 在加载时会计算进程生命周期内所需的文件描述符总数。常规 Unix 进程默认被授予 1024 个文件描述符，特权进程可自行提升该限制。这是以 root 身份启动 HAProxy 并由其自行调整限制的原因之一。默认的 1024 个文件描述符大致可支持约 500 个并发连接的处理。该计算基于全局 maxconn 参数，该参数限制每个进程的总连接数，同时考虑监听器数量、启用健康检查的服务器数量、代理检查、对等节点、日志记录器以及可能的其他技术需求。对该数值的粗略估算方法为：将 maxconn 值翻倍，并额外增加数十个，即可得到所需的文件描述符近似数量。&lt;/p&gt;</description></item><item><title>6. 内存管理</title><link>https://pig.center/zh/docs/haproxy/memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/memory/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 采用简单、快速的池式内存管理。由于 HAProxy 只使用少量不同的对象类型，从已经包含适当大小对象的内存池中获取新对象，远比针对每种大小分别调用 malloc() 高效。内存池按栈或 LIFO 方式组织，新分配的对象会优先取自刚刚释放、仍在 CPU 缓存中的对象。大小相近的内存池会合并，以减少内存碎片。&lt;/p&gt;</description></item><item><title>如何根据前缀获取键</title><link>https://pig.center/zh/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/zh/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/zh/docs/etcd/install/"&gt;安装 etcdctl&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/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-e155b000-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-e155b000-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-e155b000-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-e155b000-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-e155b000-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-e155b000-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-e155b000-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-e155b000-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/zh/docs/haproxy/cpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/cpu/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 通常大部分时间运行在系统空间，仅小部分时间运行在用户空间。经过精细调优的 3.5 GHz CPU 在单核满载 100% 时，每秒可维持约 80000 次端到端连接的建立与关闭。当单核达到饱和时，典型数值为：&lt;/p&gt;</description></item><item><title>8. 日志记录</title><link>https://pig.center/zh/docs/haproxy/management-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 守护进程运行的位置，但也常通过网络将日志发送至集中式服务器。在主动-主动场景中，集中式服务器尤其具有优势，可确保日志按到达顺序合并。HAProxy 也可使用 Unix 套接字将日志发送至本地 syslog 守护进程，但强烈不建议使用，因为当 syslog 服务器重启而 haproxy 仍在运行时，套接字将被替换，新日志将丢失。由于 HAProxy 将被隔离在 chroot 环境中，它将无法重新连接至新的套接字。现场观察表明，Unix 套接字使用的日志缓冲区非常小，即使在极轻负载下也可能导致消息丢失。不过，这在测试环境中可以接受。&lt;/p&gt;</description></item><item><title>9. 统计信息与监控</title><link>https://pig.center/zh/docs/haproxy/statistics-and-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/statistics-and-monitoring/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;可以查询 HAProxy 的运行状态。最常用的机制是 HTTP 统计信息页面。该页面还提供了一种用于监控工具的替代 CSV 输出格式。相同的格式也通过 Unix 套接字提供。&lt;/p&gt;</description></item><item><title>10. 简化配置管理</title><link>https://pig.center/zh/docs/haproxy/configuration-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 shell 相同：变量以美元符号（&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/zh/docs/haproxy/traps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/traps/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;有时会有人报告：系统重启后 HAProxy 服务没有启动，但手动启动又能正常工作。这通常出现在使用 keepalived 等集群 IP 地址机制、只把服务 IP 分配给主节点的环境中。HAProxy 绑定 0.0.0.0 时一切正常，改为绑定虚拟 IP 后却无法启动。原因是服务启动时，本地节点尚未持有该虚拟 IP；HAProxy 尝试绑定时，系统会因其不是本地 IP 地址而拒绝操作。正确的解决办法不是推迟 HAProxy 服务启动——这无法应对服务重启——而是把系统配置为允许绑定非本地地址。在 Linux 上，将 net.ipv4.ip_nonlocal_bind sysctl 设为 1 即可。如果需要透明截获经 HAProxy 转发到特定目标地址的 IP 流量，也必须启用此设置。&lt;/p&gt;</description></item><item><title>12. 调试与性能问题</title><link>https://pig.center/zh/docs/haproxy/debugging-and-performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 以 &amp;ldquo;-d&amp;rdquo; 选项启动时，它将以前台模式运行，并为每个事件打印一行输出，例如接收到的连接、连接结束，以及每个请求或响应头行。此调试输出在内容被处理前发出，因此不会考虑本地修改。主要用途是无需运行网络嗅探器即可查看请求和响应。当多个连接并行处理时，输出可读性会降低，但位于 examples/ 目录中的 &amp;ldquo;debug2ansi&amp;rdquo; 和 &amp;ldquo;debug2html&amp;rdquo; 脚本可显著改善此问题，通过为输出着色提升可读性。&lt;/p&gt;</description></item><item><title>13. 安全注意事项</title><link>https://pig.center/zh/docs/haproxy/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/haproxy/security/</guid><description>&lt;!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. --&gt;&#10;&lt;p&gt;HAProxy 旨在以极低的权限运行。使用它的标准方式是将其隔离到 chroot 环境中，并将其权限降级为非 root 用户，且该用户在该环境内没有任何权限，从而确保未来若发现任何漏洞，其被攻破也不会影响系统其余部分。&lt;/p&gt;</description></item><item><title>如何删除键</title><link>https://pig.center/zh/docs/etcd/tasks/developer/how-to-delete-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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-239e3db9-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-239e3db9-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-239e3db9-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-239e3db9-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-239e3db9-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-239e3db9-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-239e3db9-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-239e3db9-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/zh/docs/etcd/tasks/developer/how-to-transactional-write/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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;Example&lt;/a&gt;&#10; 示例中出现。&lt;/p&gt;</description></item><item><title>如何监听键值变化</title><link>https://pig.center/zh/docs/etcd/tasks/developer/how-to-watch-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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-e5c1b68d-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/zh/docs/etcd/tasks/developer/how-to-create-lease/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-f22c981a-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-f22c981a-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/zh/docs/etcd/tasks/developer/how-to-create-locks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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;</description></item><item><title>快速入门</title><link>https://pig.center/zh/docs/etcd/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/quickstart/</guid><description>&lt;p&gt;按照以下步骤本地安装、运行并测试单成员 etcd 集群：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;从预构建的二进制文件或源码安装 etcd。详情请参见 [安装][]。&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;：务必完成安装说明的最后一步，确认可执行文件搜索路径中包含 &lt;code&gt;etcd&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>如何在 etcd 集群中进行领导者选举</title><link>https://pig.center/zh/docs/etcd/tasks/operator/how-to-conduct-elections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/docs/etcd/install/"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/a&gt;&#10; 和 &lt;a href="https://pig.center/zh/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;</description></item><item><title>如何检查集群状态</title><link>https://pig.center/zh/docs/etcd/tasks/operator/how-to-check-cluster-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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-415d307a-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-415d307a-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-415d307a-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-415d307a-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/zh/docs/etcd/tasks/operator/how-to-save-database/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/docs/etcd/install/"&gt;安装 etcdctl 和 etcdutl&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/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-41ae415b-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-41ae415b-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-41ae415b-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-41ae415b-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/zh/docs/etcd/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-e4418d17-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-e4418d17-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/zh/docs/etcd/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;/li&gt;&#10;&lt;li&gt;[硬件建议][]&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;</description></item><item><title>功能门控</title><link>https://pig.center/zh/docs/etcd/feature-gates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/feature-gates/</guid><description>&lt;!-- overview --&gt;&#10;&lt;p&gt;本文概述了管理员可在 etcd 中指定的各种功能门控。&lt;/p&gt;&#10;&lt;p&gt;请参阅 &lt;a href="#feature-stages"&gt;feature stages&lt;/a&gt;&#10; 了解功能各阶段的说明。&lt;/p&gt;&#10;&lt;!-- body --&gt;&#10;&lt;h2 id="overview"&gt;概述&#10;&lt;/h2&gt;&#10;&lt;p&gt;功能门控是一组描述 etcd 特性的 key=value 键值对。&#10;可使用 etcd 的 &lt;code&gt;--feature-gates&lt;/code&gt; 命令行标志来开启或关闭这些特性。&lt;/p&gt;</description></item><item><title>常见问题</title><link>https://pig.center/zh/docs/etcd/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd，通用&#10;&lt;/h2&gt;&#10;&lt;h3 id="what-is-etcd"&gt;etcd 是什么？&#10;&lt;/h3&gt;&#10;&lt;p&gt;etcd 是一个一致性的分布式键值存储。主要用于分布式系统中的独立协调服务，专为存储可完全容纳在内存中的少量数据而设计。&lt;/p&gt;</description></item><item><title>库和工具</title><link>https://pig.center/zh/docs/etcd/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/integrations/</guid><description>&lt;p&gt;请注意，以下第三方库和工具未托管在 &lt;a href="https://github.com/etcd-io"&gt;https://github.com/etcd-io&lt;/a&gt;&#10; 下，也未经 etcd 团队测试或维护。使用前应自行阅读相关资料并评估其可靠性。&lt;/p&gt;&#10;&lt;h2 id="tools"&gt;工具&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl"&gt;etcdctl&lt;/a&gt;&#10; - etcd 的命令行客户端&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump"&gt;etcd-dump&lt;/a&gt;&#10; - 用于导出/恢复 etcd 的命令行工具&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs"&gt;etcd-fs&lt;/a&gt;&#10; - etcd 的 FUSE 文件系统&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir"&gt;etcddir&lt;/a&gt;&#10; - 实时同步 etcd 与本地目录的工具，支持 Windows 和 Linux&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser"&gt;etcd-browser&lt;/a&gt;&#10; - 基于 AngularJS 的 Web 端键值编辑器，用于 etcd&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock"&gt;etcd-lock&lt;/a&gt;&#10; - 基于 etcd 实现的领导者选举与分布式读写锁，支持 v2 版本&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console"&gt;etcd-console&lt;/a&gt;&#10; - 基于 PHP 的 Web 端键值编辑器，用于 etcd&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer"&gt;etcd-viewer&lt;/a&gt;&#10; - 使用 Java 编写的 etcd 键值存储编辑器/查看器&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool"&gt;etcdtool&lt;/a&gt;&#10; - 将 etcd 目录导出/导入/编辑为 JSON/YAML/TOML 格式，并使用 JSON Schema 验证目录&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest"&gt;etcdloadtest&lt;/a&gt;&#10; - 用于 etcd 3.0 及以上版本的命令行负载测试客户端&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/olamilekan000/etcd-tui"&gt;etcd-tui&lt;/a&gt;&#10; - 用于与 etcd 数据库交互的现代终端用户界面（TUI），可在终端中导航键、查看值、过滤数据，并直接管理 etcd 集群&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://etcdfinder.github.io"&gt;etcdfinder&lt;/a&gt;&#10; - 一款快速、现代的 Web UI，支持 etcd v2 和 v3，具备即时搜索功能&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas"&gt;lucas&lt;/a&gt;&#10; - 用于 Kubernetes etcd 3.0+ 集群的 Web 端键值查看器&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://etcdmanager.io"&gt;etcd-manager&lt;/a&gt;&#10; - 一款现代、高效、跨平台且免费的 etcd 3.x 图形界面与客户端工具，支持 Windows、Linux 和 Mac&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore"&gt;etcd-backup-restore&lt;/a&gt;&#10; - 用于定期且增量备份与恢复 etcd 的工具&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid"&gt;etcd-druid&lt;/a&gt;&#10; - 用于部署 etcd 集群并管理日常运维操作的 Kubernetes Operator&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm"&gt;etcdadm&lt;/a&gt;&#10; - 用于操作 etcd 集群的命令行工具&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/ahrtr/etcd-defrag"&gt;etcd-defrag&lt;/a&gt;&#10; - 更易用且智能的 etcd 碎片整理工具&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper"&gt;etcdhelper&lt;/a&gt;&#10; - 适用于 IntelliJ 平台的 etcd 插件&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="libraries"&gt;库&#10;&lt;/h2&gt;&#10;&lt;p&gt;以下各节按语言列出了 etcd 客户端库。&lt;/p&gt;</description></item><item><title>如何添加和删除成员</title><link>https://pig.center/zh/docs/etcd/tasks/operator/how-to-deal-with-membership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-a3ddeb46-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-a3ddeb46-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/zh/docs/etcd/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/reporting_bugs/</guid><description>&lt;p&gt;如果 etcd 项目任何部分存在缺陷或文档错误，请通过 &lt;a href="https://github.com/etcd-io/etcd/issues/new"&gt;打开问题&lt;/a&gt;&#10;告知我们。我们高度重视缺陷和错误，认为任何问题都不算太小。创建缺陷报告前，请确认尚未存在报告相同问题的议题。&lt;/p&gt;</description></item><item><title>调优</title><link>https://pig.center/zh/docs/etcd/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/tuning/</guid><description>&lt;p&gt;默认情况下，etcd 的配置在平均网络延迟较低的本地网络环境中应能良好运行。然而，当在多个数据中心之间或高延迟网络上使用 etcd 时，可能需要调整心跳间隔和选举超时设置。&lt;/p&gt;</description></item><item><title>发现服务协议</title><link>https://pig.center/zh/docs/etcd/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;发现服务协议有助于新 etcd 成员在集群引导阶段通过共享的发现 URL 发现集群中的所有其他成员。&lt;/p&gt;&#10;&lt;p&gt;发现服务协议仅在集群引导阶段使用，不可用于运行时重配置或集群监控。&lt;/p&gt;</description></item><item><title>发现服务协议</title><link>https://pig.center/zh/docs/etcd/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;发现服务协议有助于新 etcd 成员在集群引导阶段，通过共享的发现令牌和端点列表，发现集群中的所有其他成员。&lt;/p&gt;&#10;&lt;p&gt;发现服务协议仅在集群引导阶段使用，不可用于运行时重配置或集群监控。&lt;/p&gt;</description></item><item><title>日志记录约定</title><link>https://pig.center/zh/docs/etcd/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-internal/logging/</guid><description>&lt;p&gt;etcd 使用 &lt;a href="https://github.com/uber-go/zap"&gt;zap&lt;/a&gt;&#10; 库记录应用程序输出，输出按 &lt;em&gt;级别&lt;/em&gt; 进行分类。日志消息的级别依据以下约定确定：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;DebugLevel 日志通常非常庞大，通常在生产环境中禁用。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;示例：&#10;&lt;ul&gt;&#10;&lt;li&gt;向远程对等成员发送一条普通消息&lt;/li&gt;&#10;&lt;li&gt;将日志条目写入磁盘&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;InfoLevel 为默认的日志优先级。&lt;/p&gt;</description></item><item><title>Go 模块</title><link>https://pig.center/zh/docs/etcd/dev-internal/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-internal/modules/</guid><description>&lt;p&gt;etcd 项目（自版本 3.5 起）采用多个 &lt;a href="https://golang.org/ref/mod"&gt;golang 模块&lt;/a&gt;&#10;，托管于 &lt;a href="https://golang.org/ref/mod#vcs-dir"&gt;单个仓库&lt;/a&gt;&#10; 中。&lt;/p&gt;&#10;&lt;img class="td-image" src="https://pig.center/docs/etcd/dev-internal/img/modules.svg" alt="模块图" loading="lazy" decoding="async"&gt;&lt;p&gt;以下是各个模块：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/api/v3&lt;/strong&gt; - 包含 API 定义&#10;（如 protos 与 proto 生成的库），定义了 etcd 客户端与服务器之间的通信协议。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/pkg/v3&lt;/strong&gt; - etcd 使用的通用工具包集合，不针对 etcd 本身。仅当某个包未来可能被移出至独立仓库时，才应归入此处。请避免在此处添加依赖关系复杂的代码，因为这些依赖会自动成为客户端库的依赖（我们希望客户端库保持轻量）。&lt;/p&gt;</description></item><item><title>数据模型</title><link>https://pig.center/zh/docs/etcd/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/data_model/</guid><description>&lt;p&gt;etcd 旨在可靠地存储更新频率较低的数据，并提供可靠的监听查询。etcd 通过暴露键值对的旧版本，支持低成本的快照和监听历史事件（“时间旅行查询”）。持久化、多版本、并发控制的数据模型非常适合这些应用场景。&lt;/p&gt;</description></item><item><title>etcd 客户端设计</title><link>https://pig.center/zh/docs/etcd/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/design-client/</guid><description>&lt;p&gt;etcd 客户端设计&lt;/p&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="简介"&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/zh/docs/etcd/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/design-learner/</guid><description>&lt;h1 id="etcd-学习者成员"&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="背景"&gt;背景&#10;&lt;/h1&gt;&#10;&lt;p&gt;成员变更配置一直是运维中最大的挑战之一。回顾常见问题。&lt;/p&gt;</description></item><item><title>etcd v3 身份认证设计</title><link>https://pig.center/zh/docs/etcd/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;v3 协议使用 gRPC 作为传输机制，而非 v2 所采用的 RESTful 接口。这一新协议为迭代和改进 v2 设计提供了机会。例如，v3 身份认证采用基于连接的身份认证，而非 v2 每请求身份认证的较慢方式。此外，v2 身份认证在实际应用中关于一致性推理的语义往往难以处理，这一点将在后续章节中详述。对于 v3，身份认证机制具有明确定义的描述和实现，解决了 v2 身份认证系统中的缺陷。&lt;/p&gt;</description></item><item><title>etcd API</title><link>https://pig.center/zh/docs/etcd/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/api/</guid><description>&lt;p&gt;本文旨在概述 v3 版 etcd API 的核心设计。&#10;切勿将本指南与已弃用的 etcd v2 API 混淆，后者已于 etcd v3.5 中弃用。&#10;本文并非全面涵盖所有内容，而是聚焦于理解 etcd 所需的基本概念，避免被较少使用的 API 调用分散注意力。&#10;所有 etcd API 均定义在 [gRPC services][grpc-service] 中，这些服务对 etcd 服务器所理解的远程过程调用（RPC）进行了分类。&#10;所有 etcd RPC 的完整列表已在 [gRPC API listing][grpc-api] 的 Markdown 文档中记录。&lt;/p&gt;</description></item><item><title>etcd 持久化存储文件</title><link>https://pig.center/zh/docs/etcd/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/persistent-storage-files/</guid><description>&lt;p&gt;本文介绍了 etcd 持久化存储格式：命名规则、内容结构以及可供开发者用于检查存储内容的工具。后续应随着存储模型的变更持续扩展本文内容。本文面向 etcd 开发者，旨在帮助其满足数据恢复需求。&lt;/p&gt;</description></item><item><title>etcd API 保证</title><link>https://pig.center/zh/docs/etcd/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/api_guarantees/</guid><description>&lt;p&gt;etcd 是一个一致且持久的键值存储系统。&#10;键值存储通过 &lt;a href="https://pig.center/zh/docs/etcd/learning/api/#grpc-services"&gt;gRPC Services&lt;/a&gt;&#10; 暴露。etcd 为分布式系统提供最强的一致性和持久性保证。&#10;本文规范列出了 etcd 所提供的 API 保证。&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 API&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#range"&gt;范围&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#rangestream"&gt;范围流&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#put"&gt;写入&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#delete-range"&gt;删除&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#transaction"&gt;事务&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/zh/docs/etcd/learning/api/#watch-api"&gt;监听&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/zh/docs/etcd/learning/api/#obtaining-leases"&gt;授予&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;[撤销]&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://pig.center/zh/docs/etcd/learning/api/#keep-alives"&gt;保活&lt;/a&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;KV API 支持对键值存储进行直接读取和操作。&#10;监听 API 支持订阅键值存储的变更。&#10;租约 API 支持为键指定生存时间（TTL）。&lt;/p&gt;</description></item><item><title>etcd 与其它键值存储系统比较</title><link>https://pig.center/zh/docs/etcd/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/why/</guid><description>&lt;p&gt;etcd 这个名称源自两个理念：Unix 系统中的“/etc”目录和“d”istributed（分布式）系统。其中，“/etc”目录是用于存储单个系统配置数据的路径，而 etcd 则用于存储大规模分布式系统的配置信息。因此，“d”istributed “/etc”即为 etcd。&lt;/p&gt;</description></item><item><title>术语表</title><link>https://pig.center/zh/docs/etcd/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/learning/glossary/</guid><description>&lt;p&gt;本文定义了 etcd 文档、命令行和源代码中使用的各种术语。&lt;/p&gt;&#10;&lt;h2 id="alarm"&gt;告警&#10;&lt;/h2&gt;&#10;&lt;p&gt;当集群需要操作员干预以保持可靠性时，etcd 服务器会触发告警。&lt;/p&gt;</description></item><item><title>配置本地集群</title><link>https://pig.center/zh/docs/etcd/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/local_cluster/</guid><description>&lt;p&gt;对于测试和开发部署，最快捷简便的方式是配置本地集群。对于生产部署，请参考 &lt;a href="https://pig.center/zh/docs/etcd/op-guide/clustering/"&gt;clustering&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;</description></item><item><title>与 etcd 交互</title><link>https://pig.center/zh/docs/etcd/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/interacting_v3/</guid><description>&lt;p&gt;用户通常通过设置或获取键的值来与 etcd 交互。本节介绍如何使用 etcdctl（用于与 etcd 服务器交互的命令行工具）实现这一操作。此处描述的概念同样适用于 gRPC API 或客户端库 API。&lt;/p&gt;</description></item><item><title>为什么使用 gRPC 网关</title><link>https://pig.center/zh/docs/etcd/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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 项目包含一个基于 gRPC 的 &lt;a href="https://github.com/etcd-io/etcd/tree/main/client/v3"&gt;Go 客户端&lt;/a&gt;&#10;，以及一个命令行工具 &lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl"&gt;etcdctl&lt;/a&gt;&#10;，用于通过 gRPC 与 etcd 集群通信。对于不支持 gRPC 的语言，etcd 提供一个 JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway"&gt;gRPC 网关&lt;/a&gt;&#10;。该网关提供一个 RESTful 代理，可将 HTTP/JSON 请求转换为 gRPC 消息。&lt;/p&gt;</description></item><item><title>gRPC 命名与发现</title><link>https://pig.center/zh/docs/etcd/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 集成到 Go 应用中</title><link>https://pig.center/zh/docs/etcd/dev-guide/golang_embed_pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/golang_embed_pkg/</guid><description>&lt;p&gt;etcd &lt;code&gt;embed&lt;/code&gt; go 包提供了一种简便方式，可将 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/zh/docs/etcd/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;请求大小限制&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd 专为处理典型的元数据类小规模键值对而设计。虽然较大请求也能正常工作，但可能增加其他请求的延迟。默认情况下，任何请求的最大大小为 1.5 MiB。此限制可通过 etcd 服务器的 &lt;code&gt;--max-request-bytes&lt;/code&gt; 标志进行配置。&lt;/p&gt;</description></item><item><title>etcd 功能</title><link>https://pig.center/zh/docs/etcd/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/features/</guid><description>&lt;p&gt;本文概述了 etcd 的各项功能，旨在帮助用户更好地理解这些功能及其相关弃用流程。若想了解 etcd 功能的开发方式，请参阅 &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md"&gt;开发指南&lt;/a&gt;&#10;。&lt;/p&gt;&#10;&lt;p&gt;etcd 功能分为三个阶段：实验性、稳定和不安全。可通过运行 &lt;code&gt;etcd --help&lt;/code&gt; 获取功能列表。&lt;/p&gt;</description></item><item><title>API 参考</title><link>https://pig.center/zh/docs/etcd/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;本文 API 参考由命名的 &lt;code&gt;.proto&lt;/code&gt; 文件自动生成。&lt;/p&gt;&#10;&lt;h5 id="service-auth-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;Auth&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthEnable&lt;/td&gt;&#10; &lt;td&gt;AuthEnableRequest&lt;/td&gt;&#10; &lt;td&gt;AuthEnableResponse&lt;/td&gt;&#10; &lt;td&gt;AuthEnable 启用身份认证。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthDisable&lt;/td&gt;&#10; &lt;td&gt;AuthDisableRequest&lt;/td&gt;&#10; &lt;td&gt;AuthDisableResponse&lt;/td&gt;&#10; &lt;td&gt;AuthDisable 禁用身份认证。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;AuthStatus&lt;/td&gt;&#10; &lt;td&gt;AuthStatusRequest&lt;/td&gt;&#10; &lt;td&gt;AuthStatusResponse&lt;/td&gt;&#10; &lt;td&gt;AuthStatus 显示身份认证状态。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Authenticate&lt;/td&gt;&#10; &lt;td&gt;AuthenticateRequest&lt;/td&gt;&#10; &lt;td&gt;AuthenticateResponse&lt;/td&gt;&#10; &lt;td&gt;Authenticate 处理身份认证请求。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserAdd&lt;/td&gt;&#10; &lt;td&gt;AuthUserAddRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserAddResponse&lt;/td&gt;&#10; &lt;td&gt;UserAdd 添加新用户。用户名不能为空。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserGet&lt;/td&gt;&#10; &lt;td&gt;AuthUserGetRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserGetResponse&lt;/td&gt;&#10; &lt;td&gt;UserGet 获取用户详细信息。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserList&lt;/td&gt;&#10; &lt;td&gt;AuthUserListRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserListResponse&lt;/td&gt;&#10; &lt;td&gt;UserList 获取所有用户的列表。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserDelete&lt;/td&gt;&#10; &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;&#10; &lt;td&gt;UserDelete 删除指定用户。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserChangePassword&lt;/td&gt;&#10; &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;&#10; &lt;td&gt;UserChangePassword 更改指定用户的密码。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserGrantRole&lt;/td&gt;&#10; &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;&#10; &lt;td&gt;UserGrant 为指定用户授予角色。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;UserRevokeRole&lt;/td&gt;&#10; &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;&#10; &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;&#10; &lt;td&gt;UserRevokeRole 撤销指定用户的指定角色。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleAdd&lt;/td&gt;&#10; &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;&#10; &lt;td&gt;RoleAdd 添加新角色。角色名不能为空。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleGet&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;&#10; &lt;td&gt;RoleGet 获取角色详细信息。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleList&lt;/td&gt;&#10; &lt;td&gt;AuthRoleListRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleListResponse&lt;/td&gt;&#10; &lt;td&gt;RoleList 获取所有角色的列表。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleDelete&lt;/td&gt;&#10; &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;&#10; &lt;td&gt;RoleDelete 删除指定角色。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleGrantPermission&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;&#10; &lt;td&gt;RoleGrantPermission 为指定角色授予指定键或范围的权限。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;RoleRevokePermission&lt;/td&gt;&#10; &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;&#10; &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;&#10; &lt;td&gt;RoleRevokePermission 撤销指定角色的指定键或范围的权限。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-cluster-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;Cluster&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberAdd&lt;/td&gt;&#10; &lt;td&gt;MemberAddRequest&lt;/td&gt;&#10; &lt;td&gt;MemberAddResponse&lt;/td&gt;&#10; &lt;td&gt;MemberAdd 将成员添加至集群。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberRemove&lt;/td&gt;&#10; &lt;td&gt;MemberRemoveRequest&lt;/td&gt;&#10; &lt;td&gt;MemberRemoveResponse&lt;/td&gt;&#10; &lt;td&gt;MemberRemove 从集群中移除现有成员。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberUpdate&lt;/td&gt;&#10; &lt;td&gt;MemberUpdateRequest&lt;/td&gt;&#10; &lt;td&gt;MemberUpdateResponse&lt;/td&gt;&#10; &lt;td&gt;MemberUpdate 更新成员配置。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberList&lt;/td&gt;&#10; &lt;td&gt;MemberListRequest&lt;/td&gt;&#10; &lt;td&gt;MemberListResponse&lt;/td&gt;&#10; &lt;td&gt;MemberList 列出集群中的所有成员。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MemberPromote&lt;/td&gt;&#10; &lt;td&gt;MemberPromoteRequest&lt;/td&gt;&#10; &lt;td&gt;MemberPromoteResponse&lt;/td&gt;&#10; &lt;td&gt;MemberPromote 将学习者成员（非投票成员）提升为 Raft 投票成员。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-kv-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;KV&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Range&lt;/td&gt;&#10; &lt;td&gt;RangeRequest&lt;/td&gt;&#10; &lt;td&gt;RangeResponse&lt;/td&gt;&#10; &lt;td&gt;Range 从键值存储中获取指定范围内的键。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Put&lt;/td&gt;&#10; &lt;td&gt;PutRequest&lt;/td&gt;&#10; &lt;td&gt;PutResponse&lt;/td&gt;&#10; &lt;td&gt;Put 将指定键写入键值存储。Put 请求会递增键值存储的修订版本，并在事件历史中生成一个事件。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;DeleteRange&lt;/td&gt;&#10; &lt;td&gt;DeleteRangeRequest&lt;/td&gt;&#10; &lt;td&gt;DeleteRangeResponse&lt;/td&gt;&#10; &lt;td&gt;DeleteRange 从键值存储中删除指定范围内的键。删除请求会递增键值存储的修订版本，并为每个被删除的键在事件历史中生成一个删除事件。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Txn&lt;/td&gt;&#10; &lt;td&gt;TxnRequest&lt;/td&gt;&#10; &lt;td&gt;TxnResponse&lt;/td&gt;&#10; &lt;td&gt;Txn 在单个事务中处理多个请求。事务请求会递增键值存储的修订版本，并为每个完成的请求生成具有相同修订版本的事件。不允许在同一个事务中多次修改同一键。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Compact&lt;/td&gt;&#10; &lt;td&gt;CompactionRequest&lt;/td&gt;&#10; &lt;td&gt;CompactionResponse&lt;/td&gt;&#10; &lt;td&gt;Compact 对 etcd 键值存储中的事件历史进行压缩。键值存储应定期执行压缩，否则事件历史将无限增长。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-lease-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;Lease&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseGrant&lt;/td&gt;&#10; &lt;td&gt;LeaseGrantRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseGrantResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseGrant 创建一个租约，若服务器在指定的生存时间（TTL）内未收到保活请求，则该租约将过期。若租约过期，所有关联该租约的键将被过期并删除。每个过期的键都会在事件历史中生成一个删除事件。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseRevoke&lt;/td&gt;&#10; &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseRevoke 撤销一个租约。所有关联该租约的键将过期并被删除。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseKeepAlive&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseKeepAlive 通过客户端向服务器流式发送保活请求，并从服务器流式接收保活响应，以维持租约的活跃状态。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseTimeToLive&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseTimeToLive 获取租约信息。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;LeaseLeases&lt;/td&gt;&#10; &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;&#10; &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;&#10; &lt;td&gt;LeaseLeases 列出所有现有的租约。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-maintenance-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;Maintenance&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Alarm&lt;/td&gt;&#10; &lt;td&gt;AlarmRequest&lt;/td&gt;&#10; &lt;td&gt;AlarmResponse&lt;/td&gt;&#10; &lt;td&gt;告警用于激活、停用和查询与集群健康状态相关的告警。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Status&lt;/td&gt;&#10; &lt;td&gt;StatusRequest&lt;/td&gt;&#10; &lt;td&gt;StatusResponse&lt;/td&gt;&#10; &lt;td&gt;状态用于获取成员的状态。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Defragment&lt;/td&gt;&#10; &lt;td&gt;DefragmentRequest&lt;/td&gt;&#10; &lt;td&gt;DefragmentResponse&lt;/td&gt;&#10; &lt;td&gt;碎片整理用于对成员的后端数据库进行碎片整理，以恢复存储空间。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Hash&lt;/td&gt;&#10; &lt;td&gt;HashRequest&lt;/td&gt;&#10; &lt;td&gt;HashResponse&lt;/td&gt;&#10; &lt;td&gt;哈希用于计算整个后端键空间的哈希值，包括存储中的键、租约及其他桶。此功能仅用于测试！请勿在存在持续事务的生产环境中依赖此操作，因为哈希操作不持有 MVCC 锁。如需对“键”桶进行一致性检查，请改用“HashKV” API。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;HashKV&lt;/td&gt;&#10; &lt;td&gt;HashKVRequest&lt;/td&gt;&#10; &lt;td&gt;HashKVResponse&lt;/td&gt;&#10; &lt;td&gt;哈希键用于计算指定修订版本之前所有 MVCC 键的哈希值。它仅遍历后端存储中的“键”桶。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Snapshot&lt;/td&gt;&#10; &lt;td&gt;SnapshotRequest&lt;/td&gt;&#10; &lt;td&gt;SnapshotResponse&lt;/td&gt;&#10; &lt;td&gt;快照通过流将成员的整个后端数据发送给客户端。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;MoveLeader&lt;/td&gt;&#10; &lt;td&gt;MoveLeaderRequest&lt;/td&gt;&#10; &lt;td&gt;MoveLeaderResponse&lt;/td&gt;&#10; &lt;td&gt;转移领导者用于请求当前领导者将其领导权转移给指定接收节点。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Downgrade&lt;/td&gt;&#10; &lt;td&gt;DowngradeRequest&lt;/td&gt;&#10; &lt;td&gt;DowngradeResponse&lt;/td&gt;&#10; &lt;td&gt;降级用于请求降级、验证可行性或取消集群版本的降级操作。自 etcd 3.5 起支持。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-watch-apietcdserverpbrpcproto"&gt;服务 &lt;code&gt;Watch&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Watch&lt;/td&gt;&#10; &lt;td&gt;WatchRequest&lt;/td&gt;&#10; &lt;td&gt;WatchResponse&lt;/td&gt;&#10; &lt;td&gt;Watch 用于监听发生的事件或已发生的事件。输入和输出均为流；输入流用于创建和取消监听器，输出流用于发送事件。一个 Watch RPC 可以同时监听多个键范围，一次性流式传输多个监听的事件。可以从最后一次压缩的修订版本开始，监听完整的事件历史。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmmember-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AlarmMember&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;memberID&lt;/td&gt;&#10; &lt;td&gt;memberID 是与触发告警相关的成员的 ID。&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarm&lt;/td&gt;&#10; &lt;td&gt;alarm 是已触发的告警类型。&lt;/td&gt;&#10; &lt;td&gt;AlarmType&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AlarmRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;action&lt;/td&gt;&#10; &lt;td&gt;action 表示要发出的告警请求类型。action 可以是获取告警状态、激活告警，或停用已触发的告警。&lt;/td&gt;&#10; &lt;td&gt;AlarmAction&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;memberID&lt;/td&gt;&#10; &lt;td&gt;memberID 表示与告警关联的成员 ID。如果 memberID 为 0，则该告警请求涵盖所有成员。&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarm&lt;/td&gt;&#10; &lt;td&gt;alarm 表示本次请求所考虑的告警类型。&lt;/td&gt;&#10; &lt;td&gt;AlarmType&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-alarmresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AlarmResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;alarms&lt;/td&gt;&#10; &lt;td&gt;alarms 是与告警请求相关联的告警列表。&lt;/td&gt;&#10; &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authdisablerequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthDisableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authdisableresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthDisableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenablerequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthEnableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenableresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthEnableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroleaddrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name 是要添加到身份认证系统中的角色名称。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroleaddresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroledeleterequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authroledeleteresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegetrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegetresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;perm&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(切片) authpb.Permission&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegrantpermissionrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleGrantPermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name 是将被授予权限的角色名称。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;perm&lt;/td&gt;&#10; &lt;td&gt;perm 是要授予角色的权限。&lt;/td&gt;&#10; &lt;td&gt;authpb.Permission&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolegrantpermissionresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleGrantPermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolelistrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolelistresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;roles&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolerevokepermissionrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleRevokePermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;range_end&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authrolerevokepermissionresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthRoleRevokePermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authstatusrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthStatusRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authstatusresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthStatusResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;enabled&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;bool&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;authRevision&lt;/td&gt;&#10; &lt;td&gt;authRevision 是认证存储系统的当前修订版本&lt;/td&gt;&#10; &lt;td&gt;uint64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuseraddrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;options&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;authpb.UserAddOptions&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;hashedPassword&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuseraddresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserchangepasswordrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserChangePasswordRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name 是要更改密码的用户的名称。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;password 是用户的新密码。请注意，该字段将在 API 层被移除。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;hashedPassword&lt;/td&gt;&#10; &lt;td&gt;hashedPassword 是用户的新的哈希密码。请注意，该字段将在 API 层被初始化。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserchangepasswordresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserChangePasswordResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserdeleterequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name 是要删除的用户名称。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserdeleteresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergetrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergetresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;roles&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergrantrolerequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserGrantRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;user&lt;/td&gt;&#10; &lt;td&gt;user 是应被授予指定角色的用户名。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;role 是应授予用户的角色名称。&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authusergrantroleresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserGrantRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserlistrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserlistresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;users&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;(slice of) string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserrevokerolerequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserRevokeRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;role&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authuserrevokeroleresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthUserRevokeRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenticaterequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthenticateRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;password&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-authenticateresponse-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;AuthenticateResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;option&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;token&lt;/td&gt;&#10; &lt;td&gt;token 是可用于后续 RPC 的授权令牌&lt;/td&gt;&#10; &lt;td&gt;string&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-compactionrequest-apietcdserverpbrpcproto"&gt;消息 &lt;code&gt;CompactionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;CompactionRequest 对键值存储执行压缩，直至指定的修订版本。所有修订版本小于压缩修订版本的已覆盖键将被移除。&lt;/p&gt;</description></item><item><title>API 参考：并发</title><link>https://pig.center/zh/docs/etcd/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;本文 API 参考由命名的 &lt;code&gt;.proto&lt;/code&gt; 文件自动生成。&lt;/p&gt;&#10;&lt;h5 id="service-lock-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;服务 &lt;code&gt;Lock&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;锁服务将客户端锁功能以 gRPC 接口的形式暴露。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;方法&lt;/th&gt;&#10; &lt;th scope="col"&gt;请求类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;响应类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Lock&lt;/td&gt;&#10; &lt;td&gt;LockRequest&lt;/td&gt;&#10; &lt;td&gt;LockResponse&lt;/td&gt;&#10; &lt;td&gt;Lock 在指定名称的锁上获取分布式共享锁。成功时，将返回一个唯一键，该键在调用方持有锁期间持续存在。该键可与事务配合使用，以确保对 etcd 的更新仅在持有锁所有权时发生。锁将持续持有，直至对键调用 Unlock，或与所有者关联的租约到期。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;Unlock&lt;/td&gt;&#10; &lt;td&gt;UnlockRequest&lt;/td&gt;&#10; &lt;td&gt;UnlockResponse&lt;/td&gt;&#10; &lt;td&gt;Unlock 接收 Lock 返回的键，并释放对锁的持有。等待获取锁的下一个 Lock 调用者将被唤醒，并获得锁的所有权。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-lockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;消息 &lt;code&gt;LockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;name&lt;/td&gt;&#10; &lt;td&gt;name 是要获取的分布式共享锁的标识符。&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;lease&lt;/td&gt;&#10; &lt;td&gt;lease 是将附加到锁所有权的租约 ID。如果该租约到期或被撤销且当前持有锁，则锁会自动释放。使用相同租约调用 Lock 将被视为一次获取；使用相同租约两次锁定为无操作。&lt;/td&gt;&#10; &lt;td&gt;int64&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-lockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;消息 &lt;code&gt;LockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;键是在锁持有者持有锁期间存在于 etcd 中的键。用户不应修改此键，否则锁可能表现出未定义行为。&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-unlockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;消息 &lt;code&gt;UnlockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;key&lt;/td&gt;&#10; &lt;td&gt;key 是由 Lock 分配的锁所有权键。&lt;/td&gt;&#10; &lt;td&gt;bytes&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="message-unlockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;消息 &lt;code&gt;UnlockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&#10;&lt;/h5&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;字段&lt;/th&gt;&#10; &lt;th scope="col"&gt;描述&lt;/th&gt;&#10; &lt;th scope="col"&gt;类型&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;header&lt;/td&gt;&#10; &lt;td&gt;&lt;/td&gt;&#10; &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h5 id="service-election-serveretcdserverapiv3electionv3electionpbv3electionproto"&gt;服务 &lt;code&gt;Election&lt;/code&gt; (server/etcdserver/api/v3election/v3electionpb/v3election.proto)&#10;&lt;/h5&gt;&#10;&lt;p&gt;选举服务通过 gRPC 接口向客户端暴露选举功能。&lt;/p&gt;</description></item><item><title>配置选项</title><link>https://pig.center/zh/docs/etcd/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/configuration/</guid><description>&lt;p&gt;可以通过以下方式配置 etcd：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;命令行标志&lt;/a&gt;&#10;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;环境变量&lt;/strong&gt;：每个标志都有一个对应的环境变量，其名称与标志相同，但前缀为 &lt;code&gt;ETCD_&lt;/code&gt;，并以全大写和 [蛇形命名法][] 格式化。例如，&lt;code&gt;--some-flag&lt;/code&gt; 对应 &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;配置文件&lt;/a&gt;&#10;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-callout td-callout--warning" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-triangle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;警告&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;&lt;strong&gt;请注意&lt;/strong&gt;：如果混合使用配置选项，则以下规则适用。&lt;/p&gt;</description></item><item><title>身份认证</title><link>https://pig.center/zh/docs/etcd/op-guide/authentication/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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-967948ff-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-967948ff-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/zh/docs/etcd/op-guide/authentication/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/authentication/rbac/</guid><description>&lt;h2 id="overview"&gt;概述&#10;&lt;/h2&gt;&#10;&lt;p&gt;身份认证功能自 etcd 2.1 版本起引入。etcd v3 API 对身份认证功能的 API 和用户界面进行了轻微调整，以更好地适配新的数据模型。本文旨在帮助用户在 etcd v3 中设置基本的身份认证和基于角色的访问控制。&lt;/p&gt;</description></item><item><title>传输安全模型</title><link>https://pig.center/zh/docs/etcd/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/security/</guid><description>&lt;p&gt;etcd 支持自动 TLS，以及通过客户端证书实现的客户端到服务器和对等成员（服务器到服务器 / 集群）通信的身份认证。请注意，etcd 默认不启用 &lt;a href="https://pig.center/zh/docs/etcd/op-guide/authentication/"&gt;基于 RBAC 的身份认证&lt;/a&gt;&#10; 或传输层的身份认证功能，以降低用户入门时的使用门槛。此外，更改此默认设置将对该项目造成破坏性变更，该项目自 2013 年确立以来一直保持该设定。未启用安全功能的 etcd 集群可能使数据暴露于任意客户端。&lt;/p&gt;</description></item><item><title>集群指南</title><link>https://pig.center/zh/docs/etcd/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>以 Kubernetes StatefulSet 运行 etcd 集群</title><link>https://pig.center/zh/docs/etcd/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/kubernetes/</guid><description>&lt;p&gt;以下演示如何作为 Kubernetes StatefulSet 执行 &lt;a href="https://pig.center/zh/docs/etcd/op-guide/clustering/#static"&gt;静态引导过程&lt;/a&gt;&#10;。&lt;/p&gt;&#10;&lt;h2 id="example-manifest"&gt;示例 Manifest&#10;&lt;/h2&gt;&#10;&lt;p&gt;本文档包含用于在 Kubernetes 中部署静态 etcd 集群的服务和有状态集（StatefulSet）配置。&lt;/p&gt;</description></item><item><title>在容器中运行 etcd 集群</title><link>https://pig.center/zh/docs/etcd/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/container/</guid><description>&lt;p&gt;本文指南展示了如何使用 Docker 以 &lt;a href="https://pig.center/zh/docs/etcd/op-guide/clustering/#static"&gt;静态引导过程&lt;/a&gt;&#10;运行 etcd。&lt;/p&gt;&#10;&lt;h2 id="docker"&gt;Docker&#10;&lt;/h2&gt;&#10;&lt;p&gt;为使 Docker 主机外部的客户端能够访问 etcd API，请使用容器的主机 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;</description></item><item><title>故障模式</title><link>https://pig.center/zh/docs/etcd/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/failures/</guid><description>&lt;p&gt;在大规模机器部署中，故障是常见现象。当硬件或软件发生故障时，机器会失效。若出现断电或网络问题，多台机器可能同时失效。多种类型的故障也可能同时发生；几乎无法穷举所有可能的故障场景。&lt;/p&gt;</description></item><item><title>灾难恢复</title><link>https://pig.center/zh/docs/etcd/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/recovery/</guid><description>&lt;p&gt;etcd 设计用于抵御机器故障。etcd 集群可自动从临时故障（例如机器重启）中恢复，并能容忍最多 &lt;em&gt;(N−1)/2&lt;/em&gt; 个成员的永久性故障，适用于由 N 个成员组成的集群。当某个成员发生永久性故障（无论是硬件故障还是磁盘损坏）时，该成员将失去对集群的访问权限。若集群永久性丢失超过 &lt;em&gt;(N−1)/2&lt;/em&gt; 个成员，则将发生灾难性故障，法定人数不可逆地丢失。一旦法定人数丢失，集群将无法达成共识，因而无法继续接受更新。&lt;/p&gt;</description></item><item><title>etcd 网关</title><link>https://pig.center/zh/docs/etcd/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>gRPC 代理</title><link>https://pig.center/zh/docs/etcd/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/grpc_proxy/</guid><description>&lt;p&gt;gRPC 代理是运行在 gRPC 层（L7）的无状态 etcd 反向代理。该代理旨在降低核心 etcd 集群的总体处理负载。为实现横向扩展，代理会合并监听和租约 API 请求。为防止恶意客户端对集群造成影响，代理会缓存键范围请求。&lt;/p&gt;</description></item><item><title>硬件推荐</title><link>https://pig.center/zh/docs/etcd/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/hardware/</guid><description>&lt;p&gt;etcd 在资源有限的开发或测试环境中通常运行良好；在笔记本电脑或廉价云主机上开发 etcd 是常见做法。然而，在生产环境中运行 etcd 集群时，遵循一些硬件建议有助于实现有效的系统管理。这些建议并非硬性规定，而是构建稳健生产部署的良好起点。和往常一样，部署前应使用模拟工作负载进行测试。&lt;/p&gt;</description></item><item><title>维护</title><link>https://pig.center/zh/docs/etcd/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>监控 etcd</title><link>https://pig.center/zh/docs/etcd/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/monitoring/</guid><description>&lt;p&gt;每个 etcd 服务器通过其客户端端口上的 HTTP 端点提供本地监控信息。监控数据对于系统健康检查和集群调试均具有实用价值。&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 服务器将在其客户端端口的 &lt;code&gt;/debug&lt;/code&gt; 路径下导出调试信息。设置 &lt;code&gt;--log-level=debug&lt;/code&gt; 时需谨慎，因为会导致性能下降和日志输出过于 verbose。&lt;/p&gt;</description></item><item><title>性能</title><link>https://pig.center/zh/docs/etcd/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;理解性能&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd 提供稳定、持续的高性能。性能由两个因素决定：延迟和吞吐量。延迟是指完成操作所需的时间。吞吐量是指在一定时间周期内完成的总操作数。通常情况下，当 etcd 接受并发客户端请求时，平均延迟会随着整体吞吐量的增加而上升。在常见的云环境（如 Google Compute Engine (GCE) 上的标准 &lt;code&gt;n-4&lt;/code&gt; 实例，或 AWS 上相当的机器类型）中，三成员 etcd 集群在轻负载下请求完成时间小于 1 毫秒，重负载下每秒可完成超过 30,000 次请求。&lt;/p&gt;</description></item><item><title>运行时重配置设计</title><link>https://pig.center/zh/docs/etcd/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;运行时重配置是分布式系统中最为复杂且最容易出错的功能之一，尤其是在基于共识的系统（如 etcd）中。&lt;/p&gt;&#10;&lt;p&gt;继续阅读以了解 etcd 运行时重配置命令的设计原理，以及我们如何解决这些问题。&lt;/p&gt;</description></item><item><title>运行时重配置</title><link>https://pig.center/zh/docs/etcd/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd 支持增量式运行时重配置，允许用户在运行时更新集群成员。&lt;/p&gt;&#10;&lt;p&gt;重新配置请求仅在集群多数成员正常运行时才能处理。生产环境中&lt;strong&gt;强烈建议&lt;/strong&gt;始终将集群规模设置为大于二。从两成员集群中移除成员是不安全的。两成员集群的多数为两个。若在移除过程中发生故障，集群可能无法继续推进，需 &lt;a href="#restart-cluster-from-majority-failure"&gt;从多数故障中重启&lt;/a&gt;&#10;。&lt;/p&gt;</description></item><item><title>支持的平台</title><link>https://pig.center/zh/docs/etcd/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;支持层级&#10;&lt;/h2&gt;&#10;&lt;p&gt;etcd 可在不同平台上运行，但其提供的保证取决于平台的支持级别：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Tier 1&lt;/strong&gt;：由 [etcd 维护者][] 完全支持；etcd 保证通过所有测试，包括功能测试和健壮性测试。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tier 2&lt;/strong&gt;：etcd 保证通过集成测试和端到端测试，但不保证通过功能测试或健壮性测试。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tier 3&lt;/strong&gt;：etcd 保证可构建，可能仅进行轻度测试（或未测试），因此应视为 &lt;em&gt;不稳定&lt;/em&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="current-support"&gt;当前支持&#10;&lt;/h2&gt;&#10;&lt;p&gt;下表列出了当前支持的平台及其对应的 etcd 支持级别：&lt;/p&gt;</description></item><item><title>版本管理</title><link>https://pig.center/zh/docs/etcd/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;语义化版本控制&lt;/a&gt;&#10;规范。&#10;新次版本号可能向 API 添加额外功能。&lt;/p&gt;</description></item><item><title>数据损坏</title><link>https://pig.center/zh/docs/etcd/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;引导过程中将执行初始检查。&#10;成员将比较其持久化状态与其他成员的状态，若发现不匹配则退出。&lt;/p&gt;</description></item><item><title>存储内存使用量基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;&#10;&lt;p&gt;etcd 存储的两个组件会占用物理内存。etcd 进程分配了一个 &lt;em&gt;内存索引&lt;/em&gt;，用于加速键的查找。进程的 &lt;em&gt;页缓存&lt;/em&gt; 由操作系统管理，用于存储从磁盘读取的最近访问数据，以便快速重用。&lt;/p&gt;</description></item><item><title>监听内存使用量基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;div class="td-callout td-callout--note" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;说明&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;监听功能正处于积极开发中，其内存使用量可能随开发进展而变化。我们预计其内存使用量不会显著超过以下所述数值。&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;etcd 的一个核心目标是支持大量客户端执行海量监听操作。etcd 旨在支持 O(10k) 个客户端、O(100K) 个监听流（每个客户端约 O(10) 个监听流）以及 O(10M) 个总监听操作（每个监听流约 O(100) 个监听）。每个单独监听操作所消耗的内存占 etcd 整体内存使用量的最大部分，因此成为当前及未来优化的重点。&lt;/p&gt;</description></item><item><title>etcd v3 基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;物理机&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE n1-highcpu-2 机器类型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1x 专用本地 SSD，挂载于 /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1x 专用慢速磁盘，用于操作系统&lt;/li&gt;&#10;&lt;li&gt;1.8 GB 内存&lt;/li&gt;&#10;&lt;li&gt;2x CPU&lt;/li&gt;&#10;&lt;li&gt;etcd 版本 2.2.0&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;etcd 集群&#10;&lt;/h2&gt;&#10;&lt;p&gt;1 以 v3 演示模式运行的 etcd 成员&lt;/p&gt;</description></item><item><title>etcd v2.2.0-rc 内存基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;物理机&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE n1-standard-2 机器类型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 个专用本地 SSD，挂载于 /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1 个专用慢速磁盘，用于操作系统&lt;/li&gt;&#10;&lt;li&gt;7.5 GB 内存&lt;/li&gt;&#10;&lt;li&gt;2 个 CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd"&gt;etcd&#10;&lt;/h2&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-eb862a60-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-eb862a60-fence-0-viewport" data-td-code-viewport&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git&#10;Git SHA: 103cb5c&#10;Go Version: go1.5&#10;Go OS/Arch: linux/amd64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="testing"&gt;测试&#10;&lt;/h2&gt;&#10;&lt;p&gt;启动一个由 3 个成员组成的 etcd 集群，每个成员使用 2 个核心。&lt;/p&gt;</description></item><item><title>etcd v2.2.0-rc 基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;物理机&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE n1-highcpu-2 机器类型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 个专用本地 SSD，挂载于 /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1 个专用慢速磁盘，用于操作系统&lt;/li&gt;&#10;&lt;li&gt;1.8 GB 内存&lt;/li&gt;&#10;&lt;li&gt;2 个 CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;etcd 集群&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 etcd 2.2.0-rc 成员，每个成员运行在单台机器上。&lt;/p&gt;</description></item><item><title>etcd v2.2.0 基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;物理机&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE n1-highcpu-2 机器类型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 块专用本地 SSD，挂载为 etcd 数据目录&lt;/li&gt;&#10;&lt;li&gt;1 块专用慢速磁盘，用于操作系统&lt;/li&gt;&#10;&lt;li&gt;1.8 GB 内存&lt;/li&gt;&#10;&lt;li&gt;2 个 CPU&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;etcd 集群&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 etcd 2.2.0 成员，每个成员运行在单台机器上。&lt;/p&gt;</description></item><item><title>etcd v2.1.0 基准测试</title><link>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;物理机&#10;&lt;/h2&gt;&#10;&lt;p&gt;GCE n1-highcpu-2 机器类型&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 块专用本地 SSD，挂载于 /var/lib/etcd&lt;/li&gt;&#10;&lt;li&gt;1 块专用慢速磁盘，用于操作系统&lt;/li&gt;&#10;&lt;li&gt;1.8 GB 内存&lt;/li&gt;&#10;&lt;li&gt;2 个 CPU&lt;/li&gt;&#10;&lt;li&gt;etcd 版本 2.1.0 alpha&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="etcd-cluster"&gt;etcd 集群&#10;&lt;/h2&gt;&#10;&lt;p&gt;3 个 etcd 成员，每个成员运行在单台机器上&lt;/p&gt;</description></item><item><title>降级 etcd 集群与应用程序</title><link>https://pig.center/zh/docs/etcd/downgrades/downgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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/zh/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/zh/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/zh/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 集群与应用程序</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;：在同一小版本内升级补丁版本（例如 3.7.0 至 3.7.1）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;小版本升级&lt;/strong&gt;：每次仅升级一个次版本（例如 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/zh/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/zh/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/zh/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/zh/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/zh/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/zh/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/zh/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/zh/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 从 v3.5 升级到 v3.6</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 v3.7 降级到 v3.6</title><link>https://pig.center/zh/docs/etcd/downgrades/downgrade_3_7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.4 升级到 3.5</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.5 降级到 3.4</title><link>https://pig.center/zh/docs/etcd/downgrades/downgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 v3.6 降级到 v3.5</title><link>https://pig.center/zh/docs/etcd/downgrades/downgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.3 升级到 3.4</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 v3.6 升级到 v3.7</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.2 升级到 3.3</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.1 升级到 3.2</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 3.0 升级到 3.1</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>将 etcd 从 2.3 升级到 3.0</title><link>https://pig.center/zh/docs/etcd/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;</description></item><item><title>Issue 分类处置指南</title><link>https://pig.center/zh/docs/etcd/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/docs/etcd/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;目的&#10;&lt;/h2&gt;&#10;&lt;p&gt;加快问题管理。&lt;/p&gt;&#10;&lt;p&gt;&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;，并以标签标识。例如，被识别为缺陷的问题最终将被标记为 &lt;code&gt;area/bug &lt;/code&gt;。新创建的问题初始时无标签，但通常由 &lt;code&gt;etcd&lt;/code&gt; 维护者和活跃贡献者根据其分析结果添加标签。标签的详细列表可参见 &lt;a href="https://github.com/kubernetes/kubernetes/labels"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&#10;&lt;/p&gt;</description></item><item><title>PR 管理</title><link>https://pig.center/zh/docs/etcd/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/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;&lt;code&gt;etcd&lt;/code&gt; 的 PR 列表位于 &lt;a href="https://github.com/etcd-io/etcd/pulls"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;&#10;&#10;PR 可能包含多种标签、里程碑、评审人等。标签的详细列表可参见 &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;</description></item><item><title>归属与授权</title><link>https://pig.center/zh/attribution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/attribution/</guid><description>&lt;p&gt;pig.center 转载并整理了六个上游项目撰写的文档。每一个文档页面的末尾都有一行署名，指明该页改编自哪份作品、&#10;版权归属于谁、依据什么协议授权，并链接回本页对应的小节。&lt;/p&gt;</description></item><item><title>全文搜索</title><link>https://pig.center/zh/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pig.center/zh/search/</guid><description/></item></channel></rss>