<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/</link><description>Recent content on etcd</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-1113--etcd.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title>etcd client architecture</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/client-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/client-architecture/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/install/</guid><description>&lt;h2 id="system-requirements"&gt;System requirements&lt;/h2&gt;
&lt;p&gt;The etcd performance benchmarks run etcd on 8 vCPU, 16GB RAM, 50GB SSD GCE
instances, but any relatively modern machine with low latency storage and a few
gigabytes of memory should suffice for most use cases. Applications with large
v2 data stores will require more memory than a large v3 data store since data is
kept in anonymous memory instead of memory mapped from a file. For running etcd
on a cloud provider, see the &lt;a href="../op-guide/hardware#example-hardware-configurations"&gt;Example hardware
configuration&lt;/a&gt; documentation.&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="http://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="http://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="http://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>How to Set Up a Demo etcd Cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-setup-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-setup-cluster/</guid><description>&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"&gt;&lt;/p&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;token-01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.17
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.18
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>How to Set Up a Demo etcd Cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-setup-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-setup-cluster/</guid><description>&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"&gt;&lt;/p&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;token-01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.17
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.18
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>How to Set Up a Demo etcd Cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-setup-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-setup-cluster/</guid><description>&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"&gt;&lt;/p&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;token-01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.17
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.18
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>Reading from etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/reading-from-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/reading-from-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;get&lt;/code&gt; subcommand to read from etcd:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello World!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the requested key&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hello World!&lt;/code&gt; is the retrieved value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or, for formatted output:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ etcdctl --endpoints=$ENDPOINTS --write-out=&amp;#34;json&amp;#34; get foo
{&amp;#34;header&amp;#34;:{&amp;#34;cluster_id&amp;#34;:289318470931837780,&amp;#34;member_id&amp;#34;:14947050114012957595,&amp;#34;revision&amp;#34;:3,&amp;#34;raft_term&amp;#34;:4,
&amp;#34;kvs&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;Zm9v&amp;#34;,&amp;#34;create_revision&amp;#34;:2,&amp;#34;mod_revision&amp;#34;:3,&amp;#34;version&amp;#34;:2,&amp;#34;value&amp;#34;:&amp;#34;SGVsbG8gV29ybGQh&amp;#34;}]}}
$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;write-out=&amp;quot;json&amp;quot;&lt;/code&gt; causes the value to be output in JSON format (note that the key is not returned).&lt;/p&gt;</description></item><item><title>Reading from etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/reading-from-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/reading-from-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;get&lt;/code&gt; subcommand to read from etcd:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello World!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the requested key&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hello World!&lt;/code&gt; is the retrieved value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or, for formatted output:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ etcdctl --endpoints=$ENDPOINTS --write-out=&amp;#34;json&amp;#34; get foo
{&amp;#34;header&amp;#34;:{&amp;#34;cluster_id&amp;#34;:289318470931837780,&amp;#34;member_id&amp;#34;:14947050114012957595,&amp;#34;revision&amp;#34;:3,&amp;#34;raft_term&amp;#34;:4,
&amp;#34;kvs&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;Zm9v&amp;#34;,&amp;#34;create_revision&amp;#34;:2,&amp;#34;mod_revision&amp;#34;:3,&amp;#34;version&amp;#34;:2,&amp;#34;value&amp;#34;:&amp;#34;SGVsbG8gV29ybGQh&amp;#34;}]}}
$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;write-out=&amp;quot;json&amp;quot;&lt;/code&gt; causes the value to be output in JSON format (note that the key is not returned).&lt;/p&gt;</description></item><item><title>Reading from etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/reading-from-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/reading-from-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;get&lt;/code&gt; subcommand to read from etcd:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello World!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the requested key&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hello World!&lt;/code&gt; is the retrieved value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or, for formatted output:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ etcdctl --endpoints=$ENDPOINTS --write-out=&amp;#34;json&amp;#34; get foo
{&amp;#34;header&amp;#34;:{&amp;#34;cluster_id&amp;#34;:289318470931837780,&amp;#34;member_id&amp;#34;:14947050114012957595,&amp;#34;revision&amp;#34;:3,&amp;#34;raft_term&amp;#34;:4,
&amp;#34;kvs&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;Zm9v&amp;#34;,&amp;#34;create_revision&amp;#34;:2,&amp;#34;mod_revision&amp;#34;:3,&amp;#34;version&amp;#34;:2,&amp;#34;value&amp;#34;:&amp;#34;SGVsbG8gV29ybGQh&amp;#34;}]}}
$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;write-out=&amp;quot;json&amp;quot;&lt;/code&gt; causes the value to be output in JSON format (note that the key is not returned).&lt;/p&gt;</description></item><item><title>Writing to etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/writing-to-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/writing-to-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;put&lt;/code&gt; subcommand to write a key-value pair:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put foo &lt;span style="color:#4e9a06"&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;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the key name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Hello World!&amp;quot;&lt;/code&gt; is the quote-delimited value&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Writing to etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/writing-to-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/writing-to-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;put&lt;/code&gt; subcommand to write a key-value pair:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put foo &lt;span style="color:#4e9a06"&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;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the key name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Hello World!&amp;quot;&lt;/code&gt; is the quote-delimited value&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Writing to etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/writing-to-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/writing-to-etcd/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;etcdctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;put&lt;/code&gt; subcommand to write a key-value pair:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put foo &lt;span style="color:#4e9a06"&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;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;foo&lt;/code&gt; is the key name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Hello World!&amp;quot;&lt;/code&gt; is the quote-delimited value&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to get keys by prefix</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-get-key-by-prefix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-get-key-by-prefix/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;Install etcdctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.5/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-keys-by-prefix"&gt;Get keys by prefix&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get PREFIX --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&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;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/03_etcdctl_get_by_prefix_2016050501.gif" alt="03_etcdctl_get_by_prefix_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web3 value3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get web --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to get keys by prefix</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-get-key-by-prefix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-get-key-by-prefix/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;Install etcdctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-keys-by-prefix"&gt;Get keys by prefix&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get PREFIX --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&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;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/03_etcdctl_get_by_prefix_2016050501.gif" alt="03_etcdctl_get_by_prefix_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web3 value3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get web --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to get keys by prefix</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-get-key-by-prefix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-get-key-by-prefix/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;Install etcdctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-keys-by-prefix"&gt;Get keys by prefix&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get PREFIX --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&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;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/03_etcdctl_get_by_prefix_2016050501.gif" alt="03_etcdctl_get_by_prefix_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put web3 value3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get web --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to delete keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-delete-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-delete-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="add-or-delete-keys"&gt;Add or delete keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;del&lt;/code&gt; to remove the specified key or range of keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl del &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys with matching prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: &lt;span style="color:#204a87;font-weight:bold"&gt;return&lt;/span&gt; deleted key-value pairs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--from-key&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys that are greater than or equal to the given key using byte compare
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--range&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/04_etcdctl_delete_2016050601.gif" alt="04_etcdctl_delete_2016050601"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put key myvalue
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del k --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to delete keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-delete-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-delete-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="add-or-delete-keys"&gt;Add or delete keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;del&lt;/code&gt; to remove the specified key or range of keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl del &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys with matching prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: &lt;span style="color:#204a87;font-weight:bold"&gt;return&lt;/span&gt; deleted key-value pairs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--from-key&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys that are greater than or equal to the given key using byte compare
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--range&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/04_etcdctl_delete_2016050601.gif" alt="04_etcdctl_delete_2016050601"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put key myvalue
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del k --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to delete keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-delete-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-delete-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="add-or-delete-keys"&gt;Add or delete keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;del&lt;/code&gt; to remove the specified key or range of keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl del &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys with matching prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: &lt;span style="color:#204a87;font-weight:bold"&gt;return&lt;/span&gt; deleted key-value pairs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--from-key&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: delete keys that are greater than or equal to the given key using byte compare
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--range&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/04_etcdctl_delete_2016050601.gif" alt="04_etcdctl_delete_2016050601"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put key myvalue
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k1 value1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put k2 value2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; del k --prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to make multiple writes in a transaction</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-transactional-write/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-transactional-write/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A running &lt;code&gt;etcd&lt;/code&gt; cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminology"&gt;Terminology&lt;/h2&gt;
&lt;p&gt;Here are definations of some key terms used in the &lt;a href="#example"&gt;Example&lt;/a&gt; below.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Terms&lt;/th&gt;
 &lt;th&gt;Defination&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;The command line tool for interacting with the etcd server.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#txn-options" target="_blank" rel="noopener"&gt;&lt;code&gt;txn&lt;/code&gt;&lt;/a&gt; command&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;txn&lt;/code&gt; command is an abbreviation for &amp;ldquo;transaction&amp;rdquo;. It reads multiple etcd requests from standard input and applies them as a single atomic transaction. A transaction consists of list of conditions, a list of requests to apply if all the conditions are true, and a list of requests to apply if any condition is false. View &lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#key-value-commands" target="_blank" rel="noopener"&gt;etcdctl key-value commands&lt;/a&gt; for more information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;compare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The &lt;code&gt;compare&lt;/code&gt; clause within a transaction (&lt;code&gt;txn&lt;/code&gt;) serves as a conditional check that determines whether the transaction&amp;rsquo;s operations should proceed. It ensures changes are only applied if the current state of the key-value store matches expected conditions, thereby maintaining data consistency and preventing conflicts in concurrent environments. To see how the command is structured, view &lt;a href="#2-perform-a-transaction"&gt;Perform a transaction&lt;/a&gt; section below.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="transactions"&gt;Transactions&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;txn&lt;/code&gt; to process all the requests in one transaction:&lt;/p&gt;</description></item><item><title>How to make multiple writes in a transaction</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-transactional-write/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-transactional-write/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A running &lt;code&gt;etcd&lt;/code&gt; cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminology"&gt;Terminology&lt;/h2&gt;
&lt;p&gt;Here are definitions of some key terms used in the &lt;a href="#example"&gt;Example&lt;/a&gt; below.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Terms&lt;/th&gt;
 &lt;th&gt;Definition&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;The command line tool for interacting with the etcd server.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#txn-options" target="_blank" rel="noopener"&gt;&lt;code&gt;txn&lt;/code&gt;&lt;/a&gt; command&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;txn&lt;/code&gt; command is an abbreviation for &amp;ldquo;transaction&amp;rdquo;. It reads multiple etcd requests from standard input and applies them as a single atomic transaction. A transaction consists of list of conditions, a list of requests to apply if all the conditions are true, and a list of requests to apply if any condition is false. View &lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#key-value-commands" target="_blank" rel="noopener"&gt;etcdctl key-value commands&lt;/a&gt; for more information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;compare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The &lt;code&gt;compare&lt;/code&gt; clause within a transaction (&lt;code&gt;txn&lt;/code&gt;) serves as a conditional check that determines whether the transaction&amp;rsquo;s operations should proceed. It ensures changes are only applied if the current state of the key-value store matches expected conditions, thereby maintaining data consistency and preventing conflicts in concurrent environments. To see how the command is structured, view &lt;a href="#2-perform-a-transaction"&gt;Perform a transaction&lt;/a&gt; section below.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="transactions"&gt;Transactions&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;txn&lt;/code&gt; to process all the requests in one transaction:&lt;/p&gt;</description></item><item><title>How to make multiple writes in a transaction</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-transactional-write/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-transactional-write/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A running &lt;code&gt;etcd&lt;/code&gt; cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="terminology"&gt;Terminology&lt;/h2&gt;
&lt;p&gt;Here are definitions of some key terms used in the &lt;a href="#example"&gt;Example&lt;/a&gt; below.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Terms&lt;/th&gt;
 &lt;th&gt;Definition&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;The command line tool for interacting with the etcd server.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#txn-options" target="_blank" rel="noopener"&gt;&lt;code&gt;txn&lt;/code&gt;&lt;/a&gt; command&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;txn&lt;/code&gt; command is an abbreviation for &amp;ldquo;transaction&amp;rdquo;. It reads multiple etcd requests from standard input and applies them as a single atomic transaction. A transaction consists of list of conditions, a list of requests to apply if all the conditions are true, and a list of requests to apply if any condition is false. View &lt;a href="https://github.com/etcd-io/etcd/blob/main/etcdctl/README.md#key-value-commands" target="_blank" rel="noopener"&gt;etcdctl key-value commands&lt;/a&gt; for more information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;compare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The &lt;code&gt;compare&lt;/code&gt; clause within a transaction (&lt;code&gt;txn&lt;/code&gt;) serves as a conditional check that determines whether the transaction&amp;rsquo;s operations should proceed. It ensures changes are only applied if the current state of the key-value store matches expected conditions, thereby maintaining data consistency and preventing conflicts in concurrent environments. To see how the command is structured, view &lt;a href="#2-perform-a-transaction"&gt;Perform a transaction&lt;/a&gt; section below.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="transactions"&gt;Transactions&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;txn&lt;/code&gt; to process all the requests in one transaction:&lt;/p&gt;</description></item><item><title>How to watch keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-watch-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-watch-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="watching-keys"&gt;Watching keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;watch&lt;/code&gt; to get notified of future changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl watch &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-i, --interactive&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: interactive mode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: watch on a prefix &lt;span style="color:#204a87;font-weight:bold"&gt;if&lt;/span&gt; prefix is &lt;span style="color:#204a87"&gt;set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--rev&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;0: Revision to start watching
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: get the previous key-value pair before the event happens
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--progress-notify&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/06_etcdctl_watch_2016050501.gif" alt="06_etcdctl_watch_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock --prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock2 &lt;span style="color:#0000cf;font-weight:bold"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to watch keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-watch-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-watch-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="watching-keys"&gt;Watching keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;watch&lt;/code&gt; to get notified of future changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl watch &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-i, --interactive&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: interactive mode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: watch on a prefix &lt;span style="color:#204a87;font-weight:bold"&gt;if&lt;/span&gt; prefix is &lt;span style="color:#204a87"&gt;set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--rev&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;0: Revision to start watching
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: get the previous key-value pair before the event happens
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--progress-notify&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/06_etcdctl_watch_2016050501.gif" alt="06_etcdctl_watch_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock --prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock2 &lt;span style="color:#0000cf;font-weight:bold"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to watch keys</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-watch-keys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-watch-keys/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="watching-keys"&gt;Watching keys&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;watch&lt;/code&gt; to get notified of future changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl watch &lt;span style="color:#000"&gt;$KEY&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#000"&gt;$END_KEY&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-i, --interactive&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: interactive mode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prefix&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: watch on a prefix &lt;span style="color:#204a87;font-weight:bold"&gt;if&lt;/span&gt; prefix is &lt;span style="color:#204a87"&gt;set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--rev&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;0: Revision to start watching
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--prev-kv&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;: get the previous key-value pair before the event happens
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--progress-notify&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h3 id="options-inherited-from-parent-commands"&gt;Options inherited from parent commands&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&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;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/06_etcdctl_watch_2016050501.gif" alt="06_etcdctl_watch_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; watch stock --prefix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock1 &lt;span style="color:#0000cf;font-weight:bold"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put stock2 &lt;span style="color:#0000cf;font-weight:bold"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to create lease</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-create-lease/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-create-lease/</guid><description>&lt;p&gt;&lt;code&gt;lease&lt;/code&gt; to write with TTL:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/07_etcdctl_lease_2016050501.gif" alt="07_etcdctl_lease_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease grant &lt;span style="color:#0000cf;font-weight:bold"&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# lease 2be7547fbc6a5afa granted with TTL(300s)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put sample value --lease&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease keep-alive 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease revoke 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# or after 300 seconds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to create lease</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-create-lease/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-create-lease/</guid><description>&lt;p&gt;&lt;code&gt;lease&lt;/code&gt; to write with TTL:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/07_etcdctl_lease_2016050501.gif" alt="07_etcdctl_lease_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease grant &lt;span style="color:#0000cf;font-weight:bold"&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# lease 2be7547fbc6a5afa granted with TTL(300s)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put sample value --lease&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease keep-alive 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease revoke 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# or after 300 seconds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to create lease</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-create-lease/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-create-lease/</guid><description>&lt;p&gt;&lt;code&gt;lease&lt;/code&gt; to write with TTL:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/07_etcdctl_lease_2016050501.gif" alt="07_etcdctl_lease_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease grant &lt;span style="color:#0000cf;font-weight:bold"&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# lease 2be7547fbc6a5afa granted with TTL(300s)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; put sample value --lease&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease keep-alive 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lease revoke 2be7547fbc6a5afa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# or after 300 seconds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; get sample
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to create locks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-create-locks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-create-locks/</guid><description>&lt;p&gt;&lt;code&gt;lock&lt;/code&gt; for distributed lock:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/08_etcdctl_lock_2016050501.gif" alt="08_etcdctl_lock_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lock mutex1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# another client with the same name blocks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lock mutex1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to create locks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-create-locks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/developer/how-to-create-locks/</guid><description>&lt;p&gt;LOCK acquires a distributed mutex with a given name. Once the lock is acquired, it will be held until etcdctl is terminated.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="creating-a-lock"&gt;Creating a lock&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;lock&lt;/code&gt; for distributed lock:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/08_etcdctl_lock_2016050501.gif" alt="08_etcdctl_lock_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lock mutex1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;endpoints - defines a comma-delimited list of machine addresses in the cluster.&lt;/li&gt;
&lt;li&gt;ttl - time out in seconds of lock session.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to create locks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-create-locks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/developer/how-to-create-locks/</guid><description>&lt;p&gt;LOCK acquires a distributed mutex with a given name. Once the lock is acquired, it will be held until etcdctl is terminated.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="creating-a-lock"&gt;Creating a lock&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;lock&lt;/code&gt; for distributed lock:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/08_etcdctl_lock_2016050501.gif" alt="08_etcdctl_lock_2016050501"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; lock mutex1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;endpoints - defines a comma-delimited list of machine addresses in the cluster.&lt;/li&gt;
&lt;li&gt;ttl - time out in seconds of lock session.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to conduct leader election in etcd cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-conduct-elections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-conduct-elections/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt; is installed.&lt;/li&gt;
&lt;li&gt;Check for active etcd cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conduct-leader-election"&gt;Conduct Leader election&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;etcdctl&lt;/code&gt; command is used to conduct leader elections in an etcd cluster. It makes sure that only one client can become leader at a time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;etcdctl --endpoints=$ENDPOINTS elect &amp;lt;election-name&amp;gt; [proposal]&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; elect election-name p1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--endpoints : $ENDPOINTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Address of each etcd cluster members.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;election-name&lt;/code&gt; string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A string identifier for the election. All participants competing for leadership must use the same election name.&lt;/p&gt;</description></item><item><title>How to conduct leader election in etcd cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-conduct-elections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-conduct-elections/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt; is installed.&lt;/li&gt;
&lt;li&gt;Check for active etcd cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conduct-leader-election"&gt;Conduct Leader election&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;etcdctl&lt;/code&gt; command is used to conduct leader elections in an etcd cluster. It makes sure that only one client can become leader at a time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;etcdctl --endpoints=$ENDPOINTS elect &amp;lt;election-name&amp;gt; [proposal]&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; elect election-name p1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--endpoints : $ENDPOINTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Address of each etcd cluster members.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;election-name&lt;/code&gt; string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A string identifier for the election. All participants competing for leadership must use the same election name.&lt;/p&gt;</description></item><item><title>How to conduct leader election in etcd cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-conduct-elections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-conduct-elections/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt; is installed.&lt;/li&gt;
&lt;li&gt;Check for active etcd cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conduct-leader-election"&gt;Conduct Leader election&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;etcdctl&lt;/code&gt; command is used to conduct leader elections in an etcd cluster. It makes sure that only one client can become leader at a time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;etcdctl --endpoints=$ENDPOINTS elect &amp;lt;election-name&amp;gt; [proposal]&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; elect election-name p1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--endpoints : $ENDPOINTS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Address of each etcd cluster members.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;election-name&lt;/code&gt; string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A string identifier for the election. All participants competing for leadership must use the same election name.&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/quickstart/</guid><description>&lt;p&gt;Follow these instructions to locally install, run, and test a single-member
cluster of etcd:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install etcd from pre-built binaries or from source. For details, see
&lt;a href="../install/"&gt;Install&lt;/a&gt;.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Ensure that you perform the last
step of the installation instructions to verify that &lt;code&gt;etcd&lt;/code&gt; is in your path.
&lt;/div&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;Launch &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902"&gt;$&lt;/span&gt; etcd --logger&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;zap
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-20T08:19:31.340-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:110&amp;#34;,&amp;#34;msg&amp;#34;:... }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;⋮
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="alert alert-info" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The output produced by &lt;code&gt;etcd&lt;/code&gt; are
&lt;a href="../op-guide/configuration/#logging-flags"&gt;logs&lt;/a&gt; — info-level logs can
be ignored. &lt;/div&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;From &lt;strong&gt;another terminal&lt;/strong&gt;, use &lt;code&gt;etcdctl&lt;/code&gt; to set a key:&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/quickstart/</guid><description>&lt;p&gt;Follow these instructions to locally install, run, and test a single-member
cluster of etcd:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install etcd from pre-built binaries or from source. For details, see
&lt;a href="../install/"&gt;Install&lt;/a&gt;.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Ensure that you perform the last
step of the installation instructions to verify that &lt;code&gt;etcd&lt;/code&gt; is in your path.
&lt;/div&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;Launch &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902"&gt;$&lt;/span&gt; etcd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-17T09:19:32.783-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:72&amp;#34;,&amp;#34;msg&amp;#34;:... }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;⋮
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="alert alert-info" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The output produced by &lt;code&gt;etcd&lt;/code&gt; are
&lt;a href="../op-guide/configuration/#logging"&gt;logs&lt;/a&gt; — info-level logs can
be ignored. &lt;/div&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;From &lt;strong&gt;another terminal&lt;/strong&gt;, use &lt;code&gt;etcdctl&lt;/code&gt; to set a key:&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/quickstart/</guid><description>&lt;p&gt;Follow these instructions to locally install, run, and test a single-member
cluster of etcd:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install etcd from pre-built binaries or from source. For details, see
&lt;a href="../install/"&gt;Install&lt;/a&gt;.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Ensure that you perform the last
step of the installation instructions to verify that &lt;code&gt;etcd&lt;/code&gt; is in your path.
&lt;/div&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;Launch &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902"&gt;$&lt;/span&gt; etcd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-17T09:19:32.783-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:72&amp;#34;,&amp;#34;msg&amp;#34;:... }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;⋮
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="alert alert-info" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The output produced by &lt;code&gt;etcd&lt;/code&gt; are
&lt;a href="../op-guide/configuration/#logging"&gt;logs&lt;/a&gt; — info-level logs can
be ignored. &lt;/div&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;From &lt;strong&gt;another terminal&lt;/strong&gt;, use &lt;code&gt;etcdctl&lt;/code&gt; to set a key:&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/quickstart/</guid><description>&lt;p&gt;Follow these instructions to locally install, run, and test a single-member
cluster of etcd:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install etcd from pre-built binaries or from source. For details, see
&lt;a href="../install/"&gt;Install&lt;/a&gt;.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Ensure that you perform the last
step of the installation instructions to verify that &lt;code&gt;etcd&lt;/code&gt; is in your path.
&lt;/div&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;Launch &lt;code&gt;etcd&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902"&gt;$&lt;/span&gt; etcd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;{&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;ts&amp;#34;:&amp;#34;2021-09-17T09:19:32.783-0400&amp;#34;,&amp;#34;caller&amp;#34;:&amp;#34;etcdmain/etcd.go:72&amp;#34;,&amp;#34;msg&amp;#34;:... }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;⋮
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="alert alert-info" role="alert"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The output produced by &lt;code&gt;etcd&lt;/code&gt; are
&lt;a href="../op-guide/configuration/#logging"&gt;logs&lt;/a&gt; — info-level logs can
be ignored. &lt;/div&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;From &lt;strong&gt;another terminal&lt;/strong&gt;, use &lt;code&gt;etcdctl&lt;/code&gt; to set a key:&lt;/p&gt;</description></item><item><title>How to check Cluster status</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-check-cluster-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-check-cluster-status/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="check-overall-status"&gt;Check Overall Status&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint status&lt;/code&gt; to check the overall status of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint status &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-health"&gt;Check Health&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint health&lt;/code&gt; to check the healthiness of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint health &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options-1"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-kv-hash"&gt;Check KV Hash&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint hashkv&lt;/code&gt; to check the KV history hash of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;</description></item><item><title>How to check Cluster status</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-check-cluster-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-check-cluster-status/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="check-overall-status"&gt;Check Overall Status&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint status&lt;/code&gt; to check the overall status of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint status &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-health"&gt;Check Health&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint health&lt;/code&gt; to check the healthiness of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint health &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options-1"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-kv-hash"&gt;Check KV Hash&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint hashkv&lt;/code&gt; to check the KV history hash of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;</description></item><item><title>How to check Cluster status</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-check-cluster-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-check-cluster-status/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;&lt;code&gt;etcd&lt;/code&gt; and &lt;code&gt;etcdctl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="check-overall-status"&gt;Check Overall Status&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint status&lt;/code&gt; to check the overall status of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint status &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-health"&gt;Check Health&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint health&lt;/code&gt; to check the healthiness of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl endpoint health &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options-1"&gt;Options&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--cluster&lt;span style="color:#ce5c00;font-weight:bold"&gt;[=&lt;/span&gt;false&lt;span style="color:#ce5c00;font-weight:bold"&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;h2 id="check-kv-hash"&gt;Check KV Hash&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;endpoint hashkv&lt;/code&gt; to check the KV history hash of each endpoint specified in &lt;code&gt;--endpoints&lt;/code&gt; flag:&lt;/p&gt;</description></item><item><title>Overview</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/rfc/v3api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/rfc/v3api/</guid><description>&lt;p&gt;The etcd v3 API is designed to give users a more efficient and cleaner abstraction compared to etcd v2. There are a number of semantic and protocol changes in this new API.&lt;/p&gt;
&lt;p&gt;To prove out the design of the v3 API the team has also built &lt;a href="https://github.com/etcd-io/etcd/tree/v3.4.37/contrib/recipes" target="_blank" rel="noopener"&gt;a number of example recipes&lt;/a&gt;, there is a &lt;a href="https://www.youtube.com/watch?v=fj-2RY-3yVU&amp;amp;feature=youtu.be&amp;amp;t=590" target="_blank" rel="noopener"&gt;video discussing these recipes too&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Flatten binary key-value space&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep the event history until compaction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;access to old version of keys&lt;/li&gt;
&lt;li&gt;user controlled history compaction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support range query&lt;/p&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="set-up-a-cluster"&gt;Set up a cluster&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"&gt;&lt;/p&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;token-01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;machine-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.17
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.18
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For machine 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 --listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 --listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="auth"&gt;Auth&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="auth"&gt;Auth&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="auth"&gt;Auth&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;auth&lt;/code&gt;,&lt;code&gt;user&lt;/code&gt;,&lt;code&gt;role&lt;/code&gt; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to save the database</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-save-database/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-save-database/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.5/install/" target="_blank" rel="noopener"&gt;Install etcdctl, etcdutl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.5/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="snapshot-a-database"&gt;Snapshot a database&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;snapshot&lt;/code&gt; to save point-in-time snapshot of etcd database:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&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;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;h4 id="etcdctl"&gt;etcdctl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Snapshot can only be requested from one etcd node, so &lt;code&gt;--endpoints&lt;/code&gt; flag should contain only one endpoint.&lt;/p&gt;
&lt;h4 id="etcdutl"&gt;etcdutl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-w, --write-out string &lt;span style="color:#204a87"&gt;set&lt;/span&gt; the output format &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;fields, json, protobuf, simple, table&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;default &lt;span style="color:#4e9a06"&gt;&amp;#34;simple&amp;#34;&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/11_etcdctl_snapshot_2016051001.gif" alt="11_etcdctl_snapshot_2016051001"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$HOST_1&lt;/span&gt;:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; snapshot save my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Snapshot saved at my.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdutl --write-out&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;table snapshot status my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; HASH &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; REVISION &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL KEYS &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL SIZE &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; c55e8b8 &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;9&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;13&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;25&lt;/span&gt; kB &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to save the database</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-save-database/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-save-database/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;Install etcdctl, etcdutl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="snapshot-a-database"&gt;Snapshot a database&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;snapshot&lt;/code&gt; to save point-in-time snapshot of etcd database:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&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;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;h4 id="etcdctl"&gt;etcdctl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Snapshot can only be requested from one etcd node, so &lt;code&gt;--endpoints&lt;/code&gt; flag should contain only one endpoint.&lt;/p&gt;
&lt;h4 id="etcdutl"&gt;etcdutl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-w, --write-out string &lt;span style="color:#204a87"&gt;set&lt;/span&gt; the output format &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;fields, json, protobuf, simple, table&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;default &lt;span style="color:#4e9a06"&gt;&amp;#34;simple&amp;#34;&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/11_etcdctl_snapshot_2016051001.gif" alt="11_etcdctl_snapshot_2016051001"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$HOST_1&lt;/span&gt;:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; snapshot save my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Snapshot saved at my.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdutl --write-out&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;table snapshot status my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; HASH &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; REVISION &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL KEYS &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL SIZE &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; c55e8b8 &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;9&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;13&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;25&lt;/span&gt; kB &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to save the database</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-save-database/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-save-database/</guid><description>&lt;h2 id="pre-requisites"&gt;Pre-requisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/install/" target="_blank" rel="noopener"&gt;Install etcdctl, etcdutl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcd.io/docs/v3.6/dev-guide/local_cluster/" target="_blank" rel="noopener"&gt;Setup a local cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="snapshot-a-database"&gt;Snapshot a database&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;snapshot&lt;/code&gt; to save point-in-time snapshot of etcd database:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&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;h3 id="global-options"&gt;Global Options&lt;/h3&gt;
&lt;h4 id="etcdctl"&gt;etcdctl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=[&lt;/span&gt;127.0.0.1:2379&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;, gRPC endpoints
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Snapshot can only be requested from one etcd node, so &lt;code&gt;--endpoints&lt;/code&gt; flag should contain only one endpoint.&lt;/p&gt;
&lt;h4 id="etcdutl"&gt;etcdutl&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-w, --write-out string &lt;span style="color:#204a87"&gt;set&lt;/span&gt; the output format &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;fields, json, protobuf, simple, table&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;default &lt;span style="color:#4e9a06"&gt;&amp;#34;simple&amp;#34;&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/11_etcdctl_snapshot_2016051001.gif" alt="11_etcdctl_snapshot_2016051001"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$HOST_1&lt;/span&gt;:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#000"&gt;$ENDPOINTS&lt;/span&gt; snapshot save my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Snapshot saved at my.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdutl --write-out&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;table snapshot status my.db
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; HASH &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; REVISION &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL KEYS &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; TOTAL SIZE &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; c55e8b8 &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;9&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;13&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;25&lt;/span&gt; kB &lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+---------+----------+------------+------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/install/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Before installing etcd, see the following pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/supported-platform/"&gt;Supported platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/hardware/"&gt;Hardware recommendations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-pre-built-binaries"&gt;Install pre-built binaries&lt;/h2&gt;
&lt;p&gt;The easiest way to install etcd is from pre-built binaries:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the compressed archive file for your platform from &lt;a href="https://github.com/etcd-io/etcd/releases/" target="_blank" rel="noopener"&gt;Releases&lt;/a&gt;,
choosing release &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.4.37" target="_blank" rel="noopener"&gt;v3.4.37&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the archive file. This results in a directory containing the binaries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the executable binaries to your path. For example, rename and/or move
the binaries to a directory in your path (like &lt;code&gt;/usr/local/bin&lt;/code&gt;), or add the
directory created by the previous step to your path.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/install/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Before installing etcd, see the following pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/supported-platform/"&gt;Supported platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/hardware/"&gt;Hardware recommendations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-pre-built-binaries"&gt;Install pre-built binaries&lt;/h2&gt;
&lt;p&gt;The easiest way to install etcd is from pre-built binaries:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the compressed archive file for your platform from &lt;a href="https://github.com/etcd-io/etcd/releases/" target="_blank" rel="noopener"&gt;Releases&lt;/a&gt;,
choosing release &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.5.21" target="_blank" rel="noopener"&gt;v3.5.21&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the archive file. This results in a directory containing the binaries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the executable binaries to your path. For example, rename and/or move
the binaries to a directory in your path (like &lt;code&gt;/usr/local/bin&lt;/code&gt;), or add the
directory created by the previous step to your path.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/install/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Before installing etcd, see the following pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/supported-platform/"&gt;Supported platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/hardware/"&gt;Hardware recommendations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-pre-built-binaries"&gt;Install pre-built binaries&lt;/h2&gt;
&lt;p&gt;The easiest way to install etcd is from pre-built binaries:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the compressed archive file for your platform from &lt;a href="https://github.com/etcd-io/etcd/releases/" target="_blank" rel="noopener"&gt;Releases&lt;/a&gt;,
choosing release &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.6.0" target="_blank" rel="noopener"&gt;v3.6.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the archive file. This results in a directory containing the binaries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the executable binaries to your path. For example, rename and/or move
the binaries to a directory in your path (like &lt;code&gt;/usr/local/bin&lt;/code&gt;), or add the
directory created by the previous step to your path.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/install/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Before installing etcd, see the following pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/supported-platform/"&gt;Supported platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/hardware/"&gt;Hardware recommendations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-pre-built-binaries"&gt;Install pre-built binaries&lt;/h2&gt;
&lt;p&gt;The easiest way to install etcd is from pre-built binaries:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the compressed archive file for your platform from &lt;a href="https://github.com/etcd-io/etcd/releases/" target="_blank" rel="noopener"&gt;Releases&lt;/a&gt;,
choosing release &lt;a href="https://github.com/etcd-io/etcd/releases/tag/main" target="_blank" rel="noopener"&gt;main&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the archive file. This results in a directory containing the binaries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the executable binaries to your path. For example, rename and/or move
the binaries to a directory in your path (like &lt;code&gt;/usr/local/bin&lt;/code&gt;), or add the
directory created by the previous step to your path.&lt;/p&gt;</description></item><item><title>Feature Gates</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/feature-gates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/feature-gates/</guid><description>&lt;!-- overview --&gt;
&lt;p&gt;This page contains an overview of the various feature gates an administrator
can specify on etcd.&lt;/p&gt;
&lt;p&gt;See &lt;a href="#feature-stages"&gt;feature stages&lt;/a&gt; for an explanation of the stages for a feature.&lt;/p&gt;
&lt;!-- body --&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Feature gates are a set of key=value pairs that describe etcd features.
You can turn these features on or off using the &lt;code&gt;--feature-gates&lt;/code&gt; command line flag
on etcd.&lt;/p&gt;
&lt;p&gt;etcd lets you enable or disable a set of feature gates.
Use &lt;code&gt;-h&lt;/code&gt; flag to see a full set of feature gates.
To set feature gates, use the &lt;code&gt;--feature-gates&lt;/code&gt; flag assigned to a list of feature pairs in commandline:&lt;/p&gt;</description></item><item><title>Feature Gates</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/feature-gates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/feature-gates/</guid><description>&lt;!-- overview --&gt;
&lt;p&gt;This page contains an overview of the various feature gates an administrator
can specify on etcd.&lt;/p&gt;
&lt;p&gt;See &lt;a href="#feature-stages"&gt;feature stages&lt;/a&gt; for an explanation of the stages for a feature.&lt;/p&gt;
&lt;!-- body --&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Feature gates are a set of key=value pairs that describe etcd features.
You can turn these features on or off using the &lt;code&gt;--feature-gates&lt;/code&gt; command line flag
on etcd.&lt;/p&gt;
&lt;p&gt;etcd lets you enable or disable a set of feature gates.
Use &lt;code&gt;-h&lt;/code&gt; flag to see a full set of feature gates.
To set feature gates, use the &lt;code&gt;--feature-gates&lt;/code&gt; flag assigned to a list of feature pairs in commandline:&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd, general&lt;/h2&gt;
&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;h3 id="what-is-the-difference-between-listen-clientpeer-urls-advertise-client-urls-or-initial-advertise-peer-urls"&gt;What is the difference between listen-&amp;lt;client,peer&amp;gt;-urls, advertise-client-urls or initial-advertise-peer-urls?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;listen-client-urls&lt;/code&gt; and &lt;code&gt;listen-peer-urls&lt;/code&gt; specify the local addresses etcd server binds to for accepting incoming connections. To listen on a port for all interfaces, specify &lt;code&gt;0.0.0.0&lt;/code&gt; as the listen IP address.&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd, general&lt;/h2&gt;
&lt;h3 id="what-is-etcd"&gt;What is etcd?&lt;/h3&gt;
&lt;p&gt;etcd is a consistent distributed key-value store. Mainly used as a separate coordination service, in distributed systems. And designed to hold small amounts of data that can fit entirely in memory.&lt;/p&gt;
&lt;h3 id="how-do-you-pronounce-etcd"&gt;How do you pronounce etcd?&lt;/h3&gt;
&lt;p&gt;etcd is pronounced &lt;strong&gt;/ˈɛtsiːdiː/&lt;/strong&gt;, and means &amp;ldquo;distributed &lt;code&gt;etc&lt;/code&gt; directory.&amp;rdquo;&lt;/p&gt;
&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd, general&lt;/h2&gt;
&lt;h3 id="what-is-etcd"&gt;What is etcd?&lt;/h3&gt;
&lt;p&gt;etcd is a consistent distributed key-value store. Mainly used as a separate coordination service, in distributed systems. And designed to hold small amounts of data that can fit entirely in memory.&lt;/p&gt;
&lt;h3 id="how-do-you-pronounce-etcd"&gt;How do you pronounce etcd?&lt;/h3&gt;
&lt;p&gt;etcd is pronounced &lt;strong&gt;/ˈɛtsiːdiː/&lt;/strong&gt;, and means &amp;ldquo;distributed &lt;code&gt;etc&lt;/code&gt; directory.&amp;rdquo;&lt;/p&gt;
&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd, general&lt;/h2&gt;
&lt;h3 id="what-is-etcd"&gt;What is etcd?&lt;/h3&gt;
&lt;p&gt;etcd is a consistent distributed key-value store. Mainly used as a separate coordination service, in distributed systems. And designed to hold small amounts of data that can fit entirely in memory.&lt;/p&gt;
&lt;h3 id="how-do-you-pronounce-etcd"&gt;How do you pronounce etcd?&lt;/h3&gt;
&lt;p&gt;etcd is pronounced &lt;strong&gt;/ˈɛtsiːdiː/&lt;/strong&gt;, and means &amp;ldquo;distributed &lt;code&gt;etc&lt;/code&gt; directory.&amp;rdquo;&lt;/p&gt;
&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;</description></item><item><title>How to migrate etcd from v2store to v3store</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/how-to-migrate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/how-to-migrate/</guid><description>&lt;p&gt;&lt;code&gt;migrate&lt;/code&gt; to transform etcd v2store to v3store.&lt;/p&gt;
&lt;p&gt;Learn more about the difference between the &lt;a href="https://etcd.io/docs/v3.6/learning/data_model/" target="_blank" rel="noopener"&gt;etcd data storage format&lt;/a&gt; and the &lt;a href="https://etcd.io/docs/v3.6/op-guide/versioning/" target="_blank" rel="noopener"&gt;etcd versioning&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;etcd v2.Y releases store data in the v2store, which supports the legacy API v2. When upgrading to etcd v3.Y releases, the cluster may continue to carry this v2store data until it is explicitly migrated into the newer v3store, which is required for full API v3 support and long-term compatibility.&lt;/p&gt;
&lt;p&gt;This document focus on how to migrate existing data from the v2store to the v3store. For a detailed guideline of migrating from API v2 to API v3, please refer to &lt;a href="https://etcd.io/docs/v3.4/op-guide/v2-migration/" target="_blank" rel="noopener"&gt;Migrate applications from using API v2 to API v3&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How to Add and Remove Members</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-deal-with-membership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tutorials/how-to-deal-with-membership/</guid><description>&lt;p&gt;&lt;code&gt;member&lt;/code&gt; to add,remove,update membership:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/13_etcdctl_member_2016062301.gif" alt="13_etcdctl_member_2016062301"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For each machine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;my-etcd-token-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.13
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.14
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then replace a member with &lt;code&gt;member remove&lt;/code&gt; and &lt;code&gt;member add&lt;/code&gt; commands:&lt;/p&gt;</description></item><item><title>How to Add and Remove Members</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-deal-with-membership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tasks/operator/how-to-deal-with-membership/</guid><description>&lt;p&gt;&lt;code&gt;member&lt;/code&gt; to add,remove,update membership:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/13_etcdctl_member_2016062301.gif" alt="13_etcdctl_member_2016062301"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For each machine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;my-etcd-token-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.13
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.14
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then replace a member with &lt;code&gt;member remove&lt;/code&gt; and &lt;code&gt;member add&lt;/code&gt; commands:&lt;/p&gt;</description></item><item><title>How to Add and Remove Members</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-deal-with-membership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tasks/operator/how-to-deal-with-membership/</guid><description>&lt;p&gt;&lt;code&gt;member&lt;/code&gt; to add,remove,update membership:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://storage.googleapis.com/etcd/demo/13_etcdctl_member_2016062301.gif" alt="13_etcdctl_member_2016062301"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For each machine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;my-etcd-token-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;new
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;etcd-node-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.13
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.14
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;10.240.0.15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380,&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_1&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_2&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# For node 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;NAME_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;HOST_3&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd --data-dir&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;data.etcd --name &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_NAME&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-advertise-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-peer-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2380 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--advertise-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--listen-client-urls http://&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;THIS_IP&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;:2379 &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-state &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;CLUSTER_STATE&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	--initial-cluster-token &lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then replace a member with &lt;code&gt;member remove&lt;/code&gt; and &lt;code&gt;member add&lt;/code&gt; commands:&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;etcd-io main repository&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/fanhattan/etcd-backup" target="_blank" rel="noopener"&gt;etcd-backup&lt;/a&gt; - A powerful command line utility for dumping/restoring etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/mickep76/etcdrest" target="_blank" rel="noopener"&gt;etcd-rest&lt;/a&gt; - Create generic REST API in Go using etcd as a backend with validation using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041250/https://github.com/kamilhark/etcdsh" target="_blank" rel="noopener"&gt;etcdsh&lt;/a&gt; - A command line client with support of command history and tab completion. Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tzfun/etcd-workbench" target="_blank" rel="noopener"&gt;etcd-workbench&lt;/a&gt; - A free and powerful ui client for etcd v3. Provides desktop application and web packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;etcd-io main repository&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/fanhattan/etcd-backup" target="_blank" rel="noopener"&gt;etcd-backup&lt;/a&gt; - A powerful command line utility for dumping/restoring etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/mickep76/etcdrest" target="_blank" rel="noopener"&gt;etcd-rest&lt;/a&gt; - Create generic REST API in Go using etcd as a backend with validation using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041250/https://github.com/kamilhark/etcdsh" target="_blank" rel="noopener"&gt;etcdsh&lt;/a&gt; - A command line client with support of command history and tab completion. Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas" target="_blank" rel="noopener"&gt;lucas&lt;/a&gt; - A web-based key-value viewer for kubernetes etcd3.0+ cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tzfun/etcd-workbench" target="_blank" rel="noopener"&gt;etcd-workbench&lt;/a&gt; - A free and powerful ui client for etcd v3. Provides desktop application and web packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;etcd-io main repository&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas" target="_blank" rel="noopener"&gt;lucas&lt;/a&gt; - A web-based key-value viewer for kubernetes etcd3.0+ cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcdmanager.io" target="_blank" rel="noopener"&gt;etcd-manager&lt;/a&gt; - A modern, efficient, multi-platform and free etcd 3.x GUI &amp;amp; client tool. Available for Windows, Linux and Mac.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore" target="_blank" rel="noopener"&gt;etcd-backup-restore&lt;/a&gt; - Utility to periodically and incrementally backup and restore the etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid" target="_blank" rel="noopener"&gt;etcd-druid&lt;/a&gt; - A Kubernetes operator to deploy etcd clusters and manage day-2 operations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm" target="_blank" rel="noopener"&gt;etcdadm&lt;/a&gt; - A command-line tool for operating an etcd cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper" target="_blank" rel="noopener"&gt;etcdhelper&lt;/a&gt; - An intellij platform plugin for etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tzfun/etcd-workbench" target="_blank" rel="noopener"&gt;etcd-workbench&lt;/a&gt; - A free and powerful ui client for etcd v3. Provides desktop application and web packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;etcd-io main repository&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/olamilekan000/etcd-tui" target="_blank" rel="noopener"&gt;etcd-tui&lt;/a&gt; - A modern terminal user interface (TUI) for interacting with your etcd database. Navigate keys, view values, filter data, and manage your etcd cluster directly from your terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas" target="_blank" rel="noopener"&gt;lucas&lt;/a&gt; - A web-based key-value viewer for kubernetes etcd3.0+ cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcdmanager.io" target="_blank" rel="noopener"&gt;etcd-manager&lt;/a&gt; - A modern, efficient, multi-platform and free etcd 3.x GUI &amp;amp; client tool. Available for Windows, Linux and Mac.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore" target="_blank" rel="noopener"&gt;etcd-backup-restore&lt;/a&gt; - Utility to periodically and incrementally backup and restore the etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid" target="_blank" rel="noopener"&gt;etcd-druid&lt;/a&gt; - A Kubernetes operator to deploy etcd clusters and manage day-2 operations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm" target="_blank" rel="noopener"&gt;etcdadm&lt;/a&gt; - A command-line tool for operating an etcd cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ahrtr/etcd-defrag" target="_blank" rel="noopener"&gt;etcd-defrag&lt;/a&gt; - An easier to use and smarter etcd defragmentation tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper" target="_blank" rel="noopener"&gt;etcdhelper&lt;/a&gt; - An intellij platform plugin for etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tzfun/etcd-workbench" target="_blank" rel="noopener"&gt;etcd-workbench&lt;/a&gt; - A free and powerful ui client for etcd v3. Provides desktop application and web packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;etcd-io main repository&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/olamilekan000/etcd-tui" target="_blank" rel="noopener"&gt;etcd-tui&lt;/a&gt; - A modern terminal user interface (TUI) for interacting with your etcd database. Navigate keys, view values, filter data, and manage your etcd cluster directly from your terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas" target="_blank" rel="noopener"&gt;lucas&lt;/a&gt; - A web-based key-value viewer for kubernetes etcd3.0+ cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcdmanager.io" target="_blank" rel="noopener"&gt;etcd-manager&lt;/a&gt; - A modern, efficient, multi-platform and free etcd 3.x GUI &amp;amp; client tool. Available for Windows, Linux and Mac.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore" target="_blank" rel="noopener"&gt;etcd-backup-restore&lt;/a&gt; - Utility to periodically and incrementally backup and restore the etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid" target="_blank" rel="noopener"&gt;etcd-druid&lt;/a&gt; - A Kubernetes operator to deploy etcd clusters and manage day-2 operations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm" target="_blank" rel="noopener"&gt;etcdadm&lt;/a&gt; - A command-line tool for operating an etcd cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ahrtr/etcd-defrag" target="_blank" rel="noopener"&gt;etcd-defrag&lt;/a&gt; - An easier to use and smarter etcd defragmentation tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper" target="_blank" rel="noopener"&gt;etcdhelper&lt;/a&gt; - An intellij platform plugin for etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tzfun/etcd-workbench" target="_blank" rel="noopener"&gt;etcd-workbench&lt;/a&gt; - A free and powerful ui client for etcd v3. Provides desktop application and web packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/integrations/</guid><description>&lt;p&gt;Note that third-party libraries and tools (not hosted on &lt;a href="https://github.com/etcd-io" target="_blank" rel="noopener"&gt;https://github.com/etcd-io&lt;/a&gt;) mentioned below are not tested or maintained by the etcd team. Before using them, users are recommended to read and investigate them.&lt;/p&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/olamilekan000/etcd-tui" target="_blank" rel="noopener"&gt;etcd-tui&lt;/a&gt; - A modern terminal user interface (TUI) for interacting with your etcd database. Navigate keys, view values, filter data, and manage your etcd cluster directly from your terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ringtail/lucas" target="_blank" rel="noopener"&gt;lucas&lt;/a&gt; - A web-based key-value viewer for kubernetes etcd3.0+ cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etcdmanager.io" target="_blank" rel="noopener"&gt;etcd-manager&lt;/a&gt; - A modern, efficient, multi-platform and free etcd 3.x GUI &amp;amp; client tool. Available for Windows, Linux and Mac.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-backup-restore" target="_blank" rel="noopener"&gt;etcd-backup-restore&lt;/a&gt; - Utility to periodically and incrementally backup and restore the etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gardener/etcd-druid" target="_blank" rel="noopener"&gt;etcd-druid&lt;/a&gt; - A Kubernetes operator to deploy etcd clusters and manage day-2 operations.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kubernetes-sigs/etcdadm" target="_blank" rel="noopener"&gt;etcdadm&lt;/a&gt; - A command-line tool for operating an etcd cluster.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ahrtr/etcd-defrag" target="_blank" rel="noopener"&gt;etcd-defrag&lt;/a&gt; - An easier to use and smarter etcd defragmentation tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tsonglew/intellij-etcdhelper" target="_blank" rel="noopener"&gt;etcdhelper&lt;/a&gt; - An intellij platform plugin for etcd.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="libraries"&gt;Libraries&lt;/h2&gt;
&lt;p&gt;The sections below list etcd client libraries by language.&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="https://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="https://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="https://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="https://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="https://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="https://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="https://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="https://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="https://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="https://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="https://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="https://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery token and endpoint list.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery token and endpoint list.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/coreos/pkg/tree/master/capnslog" target="_blank" rel="noopener"&gt;capnslog&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;A failure to allocate disk space for WAL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/uber-go/zap" target="_blank" rel="noopener"&gt;zap&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DebugLevel logs are typically voluminous, and are usually disabled in production.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Send a normal message to a remote peer&lt;/li&gt;
&lt;li&gt;Write a log entry to disk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;InfoLevel is the default logging priority.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Startup configuration&lt;/li&gt;
&lt;li&gt;Start to do snapshot&lt;/li&gt;
&lt;li&gt;Add a new node into the cluster&lt;/li&gt;
&lt;li&gt;Add a new user into auth subsystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WarnLevel logs are more important than Info, but don&amp;rsquo;t need individual human review.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/uber-go/zap" target="_blank" rel="noopener"&gt;zap&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DebugLevel logs are typically voluminous, and are usually disabled in production.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Send a normal message to a remote peer&lt;/li&gt;
&lt;li&gt;Write a log entry to disk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;InfoLevel is the default logging priority.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Startup configuration&lt;/li&gt;
&lt;li&gt;Start to do snapshot&lt;/li&gt;
&lt;li&gt;Add a new node into the cluster&lt;/li&gt;
&lt;li&gt;Add a new user into auth subsystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WarnLevel logs are more important than Info, but don&amp;rsquo;t need individual human review.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/uber-go/zap" target="_blank" rel="noopener"&gt;zap&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DebugLevel logs are typically voluminous, and are usually disabled in production.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Send a normal message to a remote peer&lt;/li&gt;
&lt;li&gt;Write a log entry to disk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;InfoLevel is the default logging priority.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;Startup configuration&lt;/li&gt;
&lt;li&gt;Start to do snapshot&lt;/li&gt;
&lt;li&gt;Add a new node into the cluster&lt;/li&gt;
&lt;li&gt;Add a new user into auth subsystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WarnLevel logs are more important than Info, but don&amp;rsquo;t need individual human review.&lt;/p&gt;</description></item><item><title>Golang modules</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-internal/modules/</guid><description>&lt;p&gt;The etcd project (since version 3.5) is organized into multiple
&lt;a href="https://golang.org/ref/mod" target="_blank" rel="noopener"&gt;golang modules&lt;/a&gt; hosted in a &lt;a href="https://golang.org/ref/mod#vcs-dir" target="_blank" rel="noopener"&gt;single repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="../img/modules.svg" alt="modules graph"&gt;&lt;/p&gt;
&lt;p&gt;There are following modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/api/v3&lt;/strong&gt; - contains API definitions
(like protos &amp;amp; proto-generated libraries) that defines communication protocol
between etcd clients and server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/pkg/v3&lt;/strong&gt; - collection of utility packages used by etcd
without being specific to etcd itself. A package belongs here
only if it could possibly be moved out into its own repository in the future.
Please avoid adding here code that has a lot of dependencies on its own, as
they automatically becoming dependencies of the client library
(that we want to keep lightweight).&lt;/p&gt;</description></item><item><title>Golang modules</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-internal/modules/</guid><description>&lt;p&gt;The etcd project (since version 3.5) is organized into multiple
&lt;a href="https://golang.org/ref/mod" target="_blank" rel="noopener"&gt;golang modules&lt;/a&gt; hosted in a &lt;a href="https://golang.org/ref/mod#vcs-dir" target="_blank" rel="noopener"&gt;single repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="../img/modules.svg" alt="modules graph"&gt;&lt;/p&gt;
&lt;p&gt;There are following modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/api/v3&lt;/strong&gt; - contains API definitions
(like protos &amp;amp; proto-generated libraries) that defines communication protocol
between etcd clients and server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/pkg/v3&lt;/strong&gt; - collection of utility packages used by etcd
without being specific to etcd itself. A package belongs here
only if it could possibly be moved out into its own repository in the future.
Please avoid adding here code that has a lot of dependencies on its own, as
they automatically becoming dependencies of the client library
(that we want to keep lightweight).&lt;/p&gt;</description></item><item><title>Golang modules</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-internal/modules/</guid><description>&lt;p&gt;The etcd project (since version 3.5) is organized into multiple
&lt;a href="https://golang.org/ref/mod" target="_blank" rel="noopener"&gt;golang modules&lt;/a&gt; hosted in a &lt;a href="https://golang.org/ref/mod#vcs-dir" target="_blank" rel="noopener"&gt;single repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="../img/modules.svg" alt="modules graph"&gt;&lt;/p&gt;
&lt;p&gt;There are following modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/api/v3&lt;/strong&gt; - contains API definitions
(like protos &amp;amp; proto-generated libraries) that defines communication protocol
between etcd clients and server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;go.etcd.io/etcd/pkg/v3&lt;/strong&gt; - collection of utility packages used by etcd
without being specific to etcd itself. A package belongs here
only if it could possibly be moved out into its own repository in the future.
Please avoid adding here code that has a lot of dependencies on its own, as
they automatically becoming dependencies of the client library
(that we want to keep lightweight).&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>etcd client design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;etcd Client Design&lt;/h1&gt;
&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;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.&lt;/p&gt;</description></item><item><title>etcd client design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;etcd Client Design&lt;/h1&gt;
&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;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.&lt;/p&gt;</description></item><item><title>etcd client design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;etcd Client Design&lt;/h1&gt;
&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;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.&lt;/p&gt;</description></item><item><title>etcd client design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-client/</guid><description>&lt;h1 id="etcd-client-design"&gt;etcd Client Design&lt;/h1&gt;
&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;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;etcd server has proven its robustness with years of failure injection testing. Most complex application logic is already handled by etcd server and its data stores (e.g. cluster membership is transparent to clients, with Raft-layer forwarding proposals to leader). Although server components are correct, its composition with client requires a different set of intricate protocols to guarantee its correctness and high availability under faulty conditions. Ideally, etcd server provides one logical cluster view of many physical machines, and client implements automatic failover between replicas. This documents client architectural decisions and its implementation details.&lt;/p&gt;</description></item><item><title>etcd learner design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;etcd Learner&lt;/h1&gt;
&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;
&lt;h1 id="background"&gt;Background&lt;/h1&gt;
&lt;p&gt;Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.&lt;/p&gt;
&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. New Cluster member overloads Leader&lt;/h3&gt;
&lt;p&gt;A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see &lt;em&gt;Figure 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>etcd learner design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;etcd Learner&lt;/h1&gt;
&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;
&lt;h1 id="background"&gt;Background&lt;/h1&gt;
&lt;p&gt;Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.&lt;/p&gt;
&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. New Cluster member overloads Leader&lt;/h3&gt;
&lt;p&gt;A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see &lt;em&gt;Figure 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>etcd learner design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;etcd Learner&lt;/h1&gt;
&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;
&lt;h1 id="background"&gt;Background&lt;/h1&gt;
&lt;p&gt;Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.&lt;/p&gt;
&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. New Cluster member overloads Leader&lt;/h3&gt;
&lt;p&gt;A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see &lt;em&gt;Figure 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>etcd learner design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-learner/</guid><description>&lt;h1 id="etcd-learner"&gt;etcd Learner&lt;/h1&gt;
&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;
&lt;h1 id="background"&gt;Background&lt;/h1&gt;
&lt;p&gt;Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.&lt;/p&gt;
&lt;h3 id="1-new-cluster-member-overloads-leader"&gt;1. New Cluster member overloads Leader&lt;/h3&gt;
&lt;p&gt;A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see &lt;em&gt;Figure 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-auth-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/design-auth-v3/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the v3 etcd APIs central design.
This should not be mistaken with etcd v2 API, deprecated in etcd v3.5.
It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls.
All etcd APIs are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/master/api/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server.
A full listing of all etcd RPCs are documented in markdown in the &lt;a href="../../dev-guide/api_reference_v3/"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the v3 etcd APIs central design.
This should not be mistaken with etcd v2 API, deprecated in etcd v3.5.
It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls.
All etcd APIs are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/main/api/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server.
A full listing of all etcd RPCs are documented in markdown in the &lt;a href="../../dev-guide/api_reference_v3/"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the v3 etcd APIs central design.
This should not be mistaken with etcd v2 API, deprecated in etcd v3.5.
It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls.
All etcd APIs are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/main/api/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server.
A full listing of all etcd RPCs are documented in markdown in the &lt;a href="../../dev-guide/api_reference_v3/"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the etcd3 API&amp;rsquo;s central design. It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls. All etcd3 API&amp;rsquo;s are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/master/api/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server. A full listing of all etcd RPCs are documented in markdown in the &lt;a href="../../dev-guide/api_reference_v3/"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd persistent storage files</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/persistent-storage-files/</guid><description>&lt;p&gt;This document explains the etcd persistent storage format: naming, content and tools that allow developers to inspect them. Going forward the document should be extended with changes to the storage model. This document is targeted at etcd developers to help with their data recovery needs.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;The following articles provide helpful background information for this document:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd data model overview: &lt;a href="https://etcd.io/docs/v3.5/learning/data_model" target="_blank" rel="noopener"&gt;https://etcd.io/docs/v3.5/learning/data_model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Raft overview: &lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;https://raft.github.io/raft.pdf&lt;/a&gt; (especially &amp;ldquo;5.3 Log replication&amp;rdquo; section).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;h3 id="long-leaving-files"&gt;Long leaving files&lt;/h3&gt;
&lt;table&gt;
 &lt;tr&gt;
 &lt;th&gt;File name&lt;/th&gt;
 &lt;th&gt;High level purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/db&lt;/pre&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;bbolt &lt;a href="https://en.wikipedia.org/wiki/B%2B_tree"&gt;b+tree&lt;/a&gt;&lt;/strong&gt; that stores all the applied data, membership authorization information &amp; metadata. It’s aware of what's the last applied WAL log index (&lt;a href="https://github.com/etcd-io/etcd/blob/a1ff0d5373335665b3e5f4cb22a538ac63757cb6/server/etcdserver/cindex/cindex.go#L92"&gt;"consistent_index"&lt;/a&gt;).
 &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/0000000000000002-0000000000049425.snap
./member/snap/0000000000000002-0000000000061ace.snap&lt;/pre&gt;
 &lt;/td&gt;
 &lt;td&gt;
 &lt;p&gt;
 Periodic &lt;strong&gt;snapshots of legacy v2 store&lt;/strong&gt;, containing:
 &lt;ul&gt;
 &lt;li&gt;basic membership information&lt;/li&gt;
 &lt;li&gt;etcd-version&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/p&gt;</description></item><item><title>etcd persistent storage files</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/persistent-storage-files/</guid><description>&lt;p&gt;This document explains the etcd persistent storage format: naming, content and tools that allow developers to inspect them. Going forward the document should be extended with changes to the storage model. This document is targeted at etcd developers to help with their data recovery needs.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;The following articles provide helpful background information for this document:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd data model overview: &lt;a href="https://etcd.io/docs/v3.6/learning/data_model" target="_blank" rel="noopener"&gt;https://etcd.io/docs/v3.6/learning/data_model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Raft overview: &lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;https://raft.github.io/raft.pdf&lt;/a&gt; (especially &amp;ldquo;5.3 Log replication&amp;rdquo; section).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;h3 id="long-leaving-files"&gt;Long leaving files&lt;/h3&gt;
&lt;table&gt;
 &lt;tr&gt;
 &lt;th&gt;File name&lt;/th&gt;
 &lt;th&gt;High level purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/db&lt;/pre&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;bbolt &lt;a href="https://en.wikipedia.org/wiki/B%2B_tree"&gt;b+tree&lt;/a&gt;&lt;/strong&gt; that stores all the applied data, membership authorization information &amp; metadata. It’s aware of what's the last applied WAL log index (&lt;a href="https://github.com/etcd-io/etcd/blob/a1ff0d5373335665b3e5f4cb22a538ac63757cb6/server/etcdserver/cindex/cindex.go#L92"&gt;"consistent_index"&lt;/a&gt;).
 &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/0000000000000002-0000000000049425.snap
./member/snap/0000000000000002-0000000000061ace.snap&lt;/pre&gt;
 &lt;/td&gt;
 &lt;td&gt;
 &lt;p&gt;
 Periodic &lt;strong&gt;snapshots of legacy v2 store&lt;/strong&gt;, containing:
 &lt;ul&gt;
 &lt;li&gt;basic membership information&lt;/li&gt;
 &lt;li&gt;etcd-version&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/p&gt;</description></item><item><title>etcd persistent storage files</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/persistent-storage-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/persistent-storage-files/</guid><description>&lt;p&gt;This document explains the etcd persistent storage format: naming, content and tools that allow developers to inspect them. Going forward the document should be extended with changes to the storage model. This document is targeted at etcd developers to help with their data recovery needs.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;The following articles provide helpful background information for this document:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd data model overview: &lt;a href="https://etcd.io/docs/v3.6/learning/data_model" target="_blank" rel="noopener"&gt;https://etcd.io/docs/v3.6/learning/data_model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Raft overview: &lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;https://raft.github.io/raft.pdf&lt;/a&gt; (especially &amp;ldquo;5.3 Log replication&amp;rdquo; section).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;h3 id="long-leaving-files"&gt;Long leaving files&lt;/h3&gt;
&lt;table&gt;
 &lt;tr&gt;
 &lt;th&gt;File name&lt;/th&gt;
 &lt;th&gt;High level purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/db&lt;/pre&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;bbolt &lt;a href="https://en.wikipedia.org/wiki/B%2B_tree"&gt;b+tree&lt;/a&gt;&lt;/strong&gt; that stores all the applied data, membership authorization information &amp; metadata. It’s aware of what's the last applied WAL log index (&lt;a href="https://github.com/etcd-io/etcd/blob/a1ff0d5373335665b3e5f4cb22a538ac63757cb6/server/etcdserver/cindex/cindex.go#L92"&gt;"consistent_index"&lt;/a&gt;).
 &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;pre&gt;./member/snap/0000000000000002-0000000000049425.snap
./member/snap/0000000000000002-0000000000061ace.snap&lt;/pre&gt;
 &lt;/td&gt;
 &lt;td&gt;
 &lt;p&gt;
 Periodic &lt;strong&gt;snapshots of legacy v2 store&lt;/strong&gt;, containing:
 &lt;ul&gt;
 &lt;li&gt;basic membership information&lt;/li&gt;
 &lt;li&gt;etcd-version&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/p&gt;</description></item><item><title>etcd API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store.
The key value store is exposed through &lt;a href="../api/#grpc-services"&gt;gRPC Services&lt;/a&gt;.
etcd ensures the strongest consistency and durability guarantees for a distributed system.
This specification enumerates the API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KV APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#range"&gt;Range&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#put"&gt;Put&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#delete-range"&gt;Delete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#transaction"&gt;Transaction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Watch APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#watch-api"&gt;Watch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lease APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#obtaining-leases"&gt;Grant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Revoke]&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#keep-alives"&gt;Keep alive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KV API allows for direct reading and manipulation of key value store.
Watch API allows subscribing to key value store changes.
Lease API allows assigning a time to live to a key.&lt;/p&gt;</description></item><item><title>etcd API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store.
The key value store is exposed through &lt;a href="../api/#grpc-services"&gt;gRPC Services&lt;/a&gt;.
etcd ensures the strongest consistency and durability guarantees for a distributed system.
This specification enumerates the API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KV APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#range"&gt;Range&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#put"&gt;Put&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#delete-range"&gt;Delete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#transaction"&gt;Transaction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Watch APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#watch-api"&gt;Watch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lease APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#obtaining-leases"&gt;Grant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Revoke]&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#keep-alives"&gt;Keep alive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KV API allows for direct reading and manipulation of key value store.
Watch API allows subscribing to key value store changes.
Lease API allows assigning a time to live to a key.&lt;/p&gt;</description></item><item><title>etcd API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store.
The key value store is exposed through &lt;a href="../api/#grpc-services"&gt;gRPC Services&lt;/a&gt;.
etcd ensures the strongest consistency and durability guarantees for a distributed system.
This specification enumerates the API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KV APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#range"&gt;Range&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#put"&gt;Put&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#delete-range"&gt;Delete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#transaction"&gt;Transaction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Watch APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#watch-api"&gt;Watch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lease APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#obtaining-leases"&gt;Grant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Revoke]&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#keep-alives"&gt;Keep alive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KV API allows for direct reading and manipulation of key value store.
Watch API allows subscribing to key value store changes.
Lease API allows assigning a time to live to a key.&lt;/p&gt;</description></item><item><title>etcd API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store.
The key value store is exposed through &lt;a href="../api/#grpc-services"&gt;gRPC Services&lt;/a&gt;.
etcd ensures the strongest consistency and durability guarantees for a distributed system.
This specification enumerates the API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;KV APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#range"&gt;Range&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#put"&gt;Put&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#delete-range"&gt;Delete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#transaction"&gt;Transaction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Watch APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#watch-api"&gt;Watch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lease APIs
&lt;ul&gt;
&lt;li&gt;&lt;a href="../api/#obtaining-leases"&gt;Grant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Revoke]&lt;/li&gt;
&lt;li&gt;&lt;a href="../api/#keep-alives"&gt;Keep alive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KV API allows for direct reading and manipulation of key value store.
Watch API allows subscribing to key value store changes.
Lease API allows assigning a time to live to a key.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/main/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/main/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/main/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3/naming/resolver&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;google.golang.org/grpc&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;err&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;clientv3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewFromURL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;http://localhost:2379&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;err&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;!=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;// ...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;err&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewBuilder&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;err&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;!=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;// ...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;conn&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;Dial&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;my-service&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithResolvers&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBlock&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="managing-service-endpoints"&gt;Managing service endpoints&lt;/h2&gt;
&lt;p&gt;The etcd resolver treats all keys under the prefix of the resolution target following a &amp;ldquo;/&amp;rdquo; (e.g., &amp;ldquo;my-service/&amp;rdquo;) with JSON-encoded go-grpc &lt;code&gt;naming.Update&lt;/code&gt; values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;p&gt;Note that this feature is experimental because it depends on the &lt;a href="https://github.com/grpc/grpc-go/tree/4cedec40eb2ccfbe3f56bb15e894903111ada2d2/resolver" target="_blank" rel="noopener"&gt;google.golang.org/grpc/resolver&lt;/a&gt; package, which is still experimental in grpc-go.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client:&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;p&gt;Note that this feature is experimental because it depends on the &lt;a href="https://github.com/grpc/grpc-go/tree/4cedec40eb2ccfbe3f56bb15e894903111ada2d2/resolver" target="_blank" rel="noopener"&gt;google.golang.org/grpc/resolver&lt;/a&gt; package, which is still experimental in grpc-go.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client:&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;p&gt;Note that this feature is experimental because it depends on the &lt;a href="https://github.com/grpc/grpc-go/tree/4cedec40eb2ccfbe3f56bb15e894903111ada2d2/resolver" target="_blank" rel="noopener"&gt;google.golang.org/grpc/resolver&lt;/a&gt; package, which is still experimental in grpc-go.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client:&lt;/p&gt;</description></item><item><title>Embedding etcd in a Go Application</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/golang_embed_pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/golang_embed_pkg/</guid><description>&lt;p&gt;The etcd &lt;code&gt;embed&lt;/code&gt; go package provides a simple way to embed an etcd server directly into your application.&lt;/p&gt;
&lt;p&gt;For more details, see the &lt;a href="https://pkg.go.dev/go.etcd.io/etcd/server/v3/embed" target="_blank" rel="noopener"&gt;embed package documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Embedding etcd in a Go Application</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/golang_embed_pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/golang_embed_pkg/</guid><description>&lt;p&gt;The etcd &lt;code&gt;embed&lt;/code&gt; go package provides a simple way to embed an etcd server directly into your application.&lt;/p&gt;
&lt;p&gt;For more details, see the &lt;a href="https://pkg.go.dev/go.etcd.io/etcd/server/v3/embed" target="_blank" rel="noopener"&gt;embed package documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Embedding etcd in a Go Application</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/golang_embed_pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/golang_embed_pkg/</guid><description>&lt;p&gt;The etcd &lt;code&gt;embed&lt;/code&gt; go package provides a simple way to embed an etcd server directly into your application.&lt;/p&gt;
&lt;p&gt;For more details, see the &lt;a href="https://pkg.go.dev/go.etcd.io/etcd/server/v3/embed" target="_blank" rel="noopener"&gt;embed package documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2 GiB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8 GiB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2 GiB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8 GiB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2 GiB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8 GiB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2 GiB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8 GiB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>etcd features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/features/</guid><description>&lt;p&gt;This document provides an overview of etcd features to help users better understand the features and related deprecation process. If you are interested in knowing about how features are developed in the etcd, please see these &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md" target="_blank" rel="noopener"&gt;development guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The etcd features fall into three stages, experimental, stable, and unsafe. You can get the list of features by running &lt;code&gt;etcd --help&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="experimental"&gt;Experimental&lt;/h2&gt;
&lt;p&gt;In order to get early feedback, any new feature is usually added as an experimental feature. The experimental feature can be identified by looking at the flag name, which should have &lt;code&gt;--experimental&lt;/code&gt; as a prefix. Please consider the following points while using an experimental feature:&lt;/p&gt;</description></item><item><title>etcd features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/features/</guid><description>&lt;p&gt;This document provides an overview of etcd features to help users better understand the features and related deprecation process. If you are interested in knowing about how features are developed in the etcd, please see these &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md" target="_blank" rel="noopener"&gt;development guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The etcd features fall into three stages, experimental, stable, and unsafe. You can get the list of features by running &lt;code&gt;etcd --help&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="experimental"&gt;Experimental&lt;/h2&gt;
&lt;p&gt;In order to get early feedback, any new feature is usually added as an experimental feature. The experimental feature can be identified by looking at the flag name, which should have &lt;code&gt;--experimental&lt;/code&gt; as a prefix. Please consider the following points while using an experimental feature:&lt;/p&gt;</description></item><item><title>etcd features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/features/</guid><description>&lt;p&gt;This document provides an overview of etcd features to help users better understand the features and related deprecation process. If you are interested in knowing about how features are developed in the etcd, please see these &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md" target="_blank" rel="noopener"&gt;development guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The etcd features fall into three stages, experimental, stable, and unsafe. You can get the list of features by running &lt;code&gt;etcd --help&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="experimental"&gt;Experimental&lt;/h2&gt;
&lt;p&gt;In order to get early feedback, any new feature is usually added as an experimental feature. The experimental feature can be identified by looking at the flag name, which should have &lt;code&gt;--experimental&lt;/code&gt; as a prefix. Please consider the following points while using an experimental feature:&lt;/p&gt;</description></item><item><title>etcd features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/features/</guid><description>&lt;p&gt;This document provides an overview of etcd features to help users better understand the features and related deprecation process. If you are interested in knowing about how features are developed in the etcd, please see these &lt;a href="https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/features.md" target="_blank" rel="noopener"&gt;development guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The etcd features fall into three stages, experimental, stable, and unsafe. You can get the list of features by running &lt;code&gt;etcd --help&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="experimental"&gt;Experimental&lt;/h2&gt;
&lt;p&gt;In order to get early feedback, any new feature is usually added as an experimental feature. The experimental feature can be identified by looking at the flag name, which should have &lt;code&gt;--experimental&lt;/code&gt; as a prefix. Please consider the following points while using an experimental feature:&lt;/p&gt;</description></item><item><title>Configuration options</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/configuration/</guid><description>&lt;p&gt;etcd is configurable through a configuration file, various command-line flags, and environment variables.&lt;/p&gt;
&lt;p&gt;A reusable configuration file is a YAML file made with name and value of one or more command-line flags described below. In order to use this file, specify the file path as a value to the &lt;code&gt;--config-file&lt;/code&gt; flag or &lt;code&gt;ETCD_CONFIG_FILE&lt;/code&gt; environment variable. The &lt;a href="https://github.com/etcd-io/etcd/blob/release-3.4/etcd.conf.yml.sample" target="_blank" rel="noopener"&gt;sample configuration file&lt;/a&gt; can be used as a starting point to create a new configuration file as needed.&lt;/p&gt;</description></item><item><title>Configuration options</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/configuration/</guid><description>&lt;p&gt;You can configure etcd through the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;Command-line flags&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: every flag has a corresponding environment variable
that has the same name but is prefixed with&lt;code&gt;ETCD_&lt;/code&gt; and formatted in all caps and
&lt;a href="https://en.wikipedia.org/wiki/Snake_case" target="_blank" rel="noopener"&gt;snake case&lt;/a&gt;. For example, &lt;code&gt;--some-flag&lt;/code&gt; would be &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;Configuration file&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;p&gt;&lt;i class="fas fa-exclamation-triangle mr-1"&gt;&lt;/i&gt; &lt;strong&gt;Caution&lt;/strong&gt;: If you mix-and-match configuration options, then the following
rules apply.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command-line flags take precedence over environment variables.&lt;/li&gt;
&lt;li&gt;If you provide a &lt;em&gt;configuration file&lt;/em&gt; all command-line flags and environment variables are &lt;strong&gt;ignored&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="command-line-flags"&gt;Command-line flags&lt;/h2&gt;
&lt;p&gt;Flags are presented below using the format &lt;code&gt;--flag-name DEFAULT_VALUE&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Configuration options</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/configuration/</guid><description>&lt;p&gt;You can configure etcd through the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;Command-line flags&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: every flag has a corresponding environment variable
that has the same name but is prefixed with&lt;code&gt;ETCD_&lt;/code&gt; and formatted in all caps and
&lt;a href="https://en.wikipedia.org/wiki/Snake_case" target="_blank" rel="noopener"&gt;snake case&lt;/a&gt;. For example, &lt;code&gt;--some-flag&lt;/code&gt; would be &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;Configuration file&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;p&gt;&lt;i class="fas fa-exclamation-triangle mr-1"&gt;&lt;/i&gt; &lt;strong&gt;Caution&lt;/strong&gt;: If you mix-and-match configuration options, then the following
rules apply.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command-line flags take precedence over environment variables.&lt;/li&gt;
&lt;li&gt;If you provide a &lt;em&gt;configuration file&lt;/em&gt; all command-line flags and environment variables are &lt;strong&gt;ignored&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="command-line-flags"&gt;Command-line flags&lt;/h2&gt;
&lt;p&gt;Flags are presented below using the format &lt;code&gt;--flag-name DEFAULT_VALUE&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Configuration options</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/configuration/</guid><description>&lt;p&gt;You can configure etcd through the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#command-line-flags"&gt;Command-line flags&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: every flag has a corresponding environment variable
that has the same name but is prefixed with &lt;code&gt;ETCD_&lt;/code&gt; and formatted in all caps and
&lt;a href="https://en.wikipedia.org/wiki/Snake_case" target="_blank" rel="noopener"&gt;snake case&lt;/a&gt;. For example, &lt;code&gt;--some-flag&lt;/code&gt; would be &lt;code&gt;ETCD_SOME_FLAG&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#configuration-file"&gt;Configuration file&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;p&gt;&lt;i class="fas fa-exclamation-triangle mr-1"&gt;&lt;/i&gt; &lt;strong&gt;Caution&lt;/strong&gt;: If you mix-and-match configuration options, then the following
rules apply.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command-line flags take precedence over environment variables.&lt;/li&gt;
&lt;li&gt;If you provide a &lt;em&gt;configuration file&lt;/em&gt; all command-line flags and environment variables are &lt;strong&gt;ignored&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="command-line-flags"&gt;Command-line flags&lt;/h2&gt;
&lt;p&gt;Flags are presented below using the format &lt;code&gt;--flag-name DEFAULT_VALUE&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Role-based access control</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/authentication/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Role-based access control</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/authentication/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/authentication/rbac/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Role-based access control</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/authentication/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/authentication/rbac/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Role-based access control</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/authentication/rbac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/authentication/rbac/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;p&gt;To get up and running, first have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.&lt;/p&gt;
&lt;p&gt;For convenience, the &lt;a href="https://github.com/cloudflare/cfssl" target="_blank" rel="noopener"&gt;cfssl&lt;/a&gt; tool provides an easy interface to certificate generation, and we provide an example using the tool &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/tls-setup" target="_blank" rel="noopener"&gt;here&lt;/a&gt;. Alternatively, try this &lt;a href="https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md" target="_blank" rel="noopener"&gt;guide to generating self-signed key pairs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication. &lt;strong&gt;Note that etcd doesn&amp;rsquo;t enable &lt;a href="../authentication/"&gt;RBAC based authentication&lt;/a&gt; or the authentication feature in the transport layer by default to reduce friction for users getting started with the database. Further, changing this default would be a breaking change for the project which was established since 2013. An etcd cluster which doesn&amp;rsquo;t enable security features can expose its data to any clients.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Warning&lt;/div&gt;
&lt;p&gt;etcd doesn&amp;rsquo;t enable &lt;a href="../authentication"&gt;RBAC based authentication&lt;/a&gt; or the authentication feature in the transport layer by default to reduce friction for users getting started with the database. Further, changing this default would be a breaking change for the project which was established since 2013. An etcd cluster which doesn&amp;rsquo;t enable security features can expose its data to any clients.&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication. &lt;strong&gt;Note that etcd doesn&amp;rsquo;t enable &lt;a href="../authentication/"&gt;RBAC based authentication&lt;/a&gt; or the authentication feature in the transport layer by default to reduce friction for users getting started with the database. Further, changing this default would be a breaking change for the project which was established since 2013. An etcd cluster which doesn&amp;rsquo;t enable security features can expose its data to any clients.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Run etcd clusters as a Kubernetes StatefulSet</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/kubernetes/</guid><description>&lt;p&gt;Below demonstrates how to perform the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt; as a Kubernetes StatefulSet.&lt;/p&gt;
&lt;h2 id="example-manifest"&gt;Example Manifest&lt;/h2&gt;
&lt;p&gt;This manifest contains a service and statefulset for deploying a static etcd cluster in kubernetes.&lt;/p&gt;
&lt;p&gt;If you copy the contents of the manifest into a file named &lt;code&gt;etcd.yaml&lt;/code&gt;, it can be applied to a cluster with this command.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl apply --filename etcd.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon being applied, wait for the pods to become ready.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-0 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-1 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-2 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The container used in the example includes etcdctl and can be called directly inside the pods.&lt;/p&gt;</description></item><item><title>Run etcd clusters as a Kubernetes StatefulSet</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/kubernetes/</guid><description>&lt;p&gt;Below demonstrates how to perform the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt; as a Kubernetes StatefulSet.&lt;/p&gt;
&lt;h2 id="example-manifest"&gt;Example Manifest&lt;/h2&gt;
&lt;p&gt;This manifest contains a service and statefulset for deploying a static etcd cluster in kubernetes.&lt;/p&gt;
&lt;p&gt;If you copy the contents of the manifest into a file named &lt;code&gt;etcd.yaml&lt;/code&gt;, it can be applied to a cluster with this command.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl apply --filename etcd.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon being applied, wait for the pods to become ready.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-0 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-1 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-2 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The container used in the example includes etcdctl and can be called directly inside the pods.&lt;/p&gt;</description></item><item><title>Run etcd clusters as a Kubernetes StatefulSet</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/kubernetes/</guid><description>&lt;p&gt;Below demonstrates how to perform the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt; as a Kubernetes StatefulSet.&lt;/p&gt;
&lt;h2 id="example-manifest"&gt;Example Manifest&lt;/h2&gt;
&lt;p&gt;This manifest contains a service and statefulset for deploying a static etcd cluster in kubernetes.&lt;/p&gt;
&lt;p&gt;If you copy the contents of the manifest into a file named &lt;code&gt;etcd.yaml&lt;/code&gt;, it can be applied to a cluster with this command.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl apply --filename etcd.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon being applied, wait for the pods to become ready.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-0 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-1 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd-2 1/1 Running &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt; 24m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The container used in the example includes etcdctl and can be called directly inside the pods.&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="docker"&gt;Docker&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect" target="_blank" rel="noopener"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt; for more detail on how to get the IP address. Alternatively, specify &lt;code&gt;--net=host&lt;/code&gt; flag to &lt;code&gt;docker run&lt;/code&gt; command to skip placing the container inside of a separate network stack.&lt;/p&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;Use the host IP address when configuring etcd:&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="docker"&gt;Docker&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect" target="_blank" rel="noopener"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt; for more detail on how to get the IP address. Alternatively, specify &lt;code&gt;--net=host&lt;/code&gt; flag to &lt;code&gt;docker run&lt;/code&gt; command to skip placing the container inside of a separate network stack.&lt;/p&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;Use the host IP address when configuring etcd:&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="docker"&gt;Docker&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect" target="_blank" rel="noopener"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt; for more detail on how to get the IP address. Alternatively, specify &lt;code&gt;--net=host&lt;/code&gt; flag to &lt;code&gt;docker run&lt;/code&gt; command to skip placing the container inside of a separate network stack.&lt;/p&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;Use the host IP address when configuring etcd:&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="docker"&gt;Docker&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of Docker host, use the host IP address of the container. Please see &lt;a href="https://docs.docker.com/engine/reference/commandline/inspect" target="_blank" rel="noopener"&gt;&lt;code&gt;docker inspect&lt;/code&gt;&lt;/a&gt; for more detail on how to get the IP address. Alternatively, specify &lt;code&gt;--net=host&lt;/code&gt; flag to &lt;code&gt;docker run&lt;/code&gt; command to skip placing the container inside of a separate network stack.&lt;/p&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;Use the host IP address when configuring etcd:&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--log-level=debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--log-level=debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--log-level=debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--log-level=debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--log-level=debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--log-level=debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/supported-platform/</guid><description>&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists etcd support status for common architectures and operating systems:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Architecture&lt;/th&gt;
 &lt;th&gt;Operating System&lt;/th&gt;
 &lt;th&gt;Status&lt;/th&gt;
 &lt;th&gt;Maintainers&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Darwin&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;386&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ppc64le&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;etcd-maintainers are listed in &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/blob/main/OWNERS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Experimental platforms appear to work in practice and have some platform specific code in etcd, but do not fully conform to the stable support policy. Unstable platforms have been lightly tested, but less than experimental. Unlisted architecture and operating system pairs are currently unsupported; caveat emptor.&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;Support tiers&lt;/h2&gt;
&lt;p&gt;etcd runs on different platforms, but the guarantees it provides depends on a
platform&amp;rsquo;s support tier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tier 1&lt;/strong&gt;: fully supported by &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;etcd maintainers&lt;/a&gt;; etcd is guaranteed to
pass all tests including functional and robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 2&lt;/strong&gt;: etcd is guaranteed to pass integration and end-to-end tests but
not necessarily functional or robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 3&lt;/strong&gt;: etcd is guaranteed to build, may be lightly tested (or not), and
so it should be considered &lt;em&gt;unstable&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists currently supported platforms and their corresponding
etcd support tier:&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;Support tiers&lt;/h2&gt;
&lt;p&gt;etcd runs on different platforms, but the guarantees it provides depends on a
platform&amp;rsquo;s support tier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tier 1&lt;/strong&gt;: fully supported by &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;etcd maintainers&lt;/a&gt;; etcd is guaranteed to
pass all tests including functional and robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 2&lt;/strong&gt;: etcd is guaranteed to pass integration and end-to-end tests but
not necessarily functional or robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 3&lt;/strong&gt;: etcd is guaranteed to build, may be lightly tested (or not), and
so it should be considered &lt;em&gt;unstable&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists currently supported platforms and their corresponding
etcd support tier:&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/supported-platform/</guid><description>&lt;h2 id="support-tiers"&gt;Support tiers&lt;/h2&gt;
&lt;p&gt;etcd runs on different platforms, but the guarantees it provides depends on a
platform&amp;rsquo;s support tier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tier 1&lt;/strong&gt;: fully supported by &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;etcd maintainers&lt;/a&gt;; etcd is guaranteed to
pass all tests including functional and robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 2&lt;/strong&gt;: etcd is guaranteed to pass integration and end-to-end tests but
not necessarily functional or robustness tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tier 3&lt;/strong&gt;: etcd is guaranteed to build, may be lightly tested (or not), and
so it should be considered &lt;em&gt;unstable&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists currently supported platforms and their corresponding
etcd support tier:&lt;/p&gt;</description></item><item><title>Migrate applications from using API v2 to API v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/v2-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/v2-migration/</guid><description>&lt;p&gt;The data store v2 is still accessible from the API v2 after upgrading to etcd3. Thus, it will work as before and require no application changes. With etcd 3, applications use the new grpc API v3 to access the mvcc store, which provides more features and improved performance. The mvcc store and the old store v2 are separate and isolated; writes to the store v2 will not affect the mvcc store and, similarly, writes to the mvcc store will not affect the store v2.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/versioning/</guid><description>&lt;p&gt;This document describes the versions supported by the etcd project.&lt;/p&gt;
&lt;h2 id="service-versioning-and-supported-versions"&gt;Service versioning and supported versions&lt;/h2&gt;
&lt;p&gt;etcd versions are expressed as &lt;strong&gt;x.y.z&lt;/strong&gt;, where &lt;strong&gt;x&lt;/strong&gt; is the major version, &lt;strong&gt;y&lt;/strong&gt; is the minor version, and &lt;strong&gt;z&lt;/strong&gt; is the patch version, following &lt;a href="https://semver.org/" target="_blank" rel="noopener"&gt;Semantic Versioning&lt;/a&gt; terminology.
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;The etcd project maintains release branches for the current version and previous release. For example, when v3.5 is the current version, v3.4 is supported. When v3.6 is released, v3.4 goes out of support.&lt;/p&gt;</description></item><item><title>Data Corruption</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/data_corruption/</guid><description>&lt;p&gt;etcd has built in automated data corruption detection to prevent member state from diverging.&lt;/p&gt;
&lt;h2 id="enabling-data-corruption-detection"&gt;Enabling data corruption detection&lt;/h2&gt;
&lt;p&gt;Data corruption detection can be done in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial check, enabled with &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Periodic check, enabled with &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial check will be executed during bootstrap of etcd member.
Member will compare its persistent state vs other members and exit if there is a mismatch.&lt;/p&gt;
&lt;p&gt;Periodic check will be executed by the cluster leader in a cluster that is already running.
Leader will compare its persistent state vs other members and raise a CORRUPT ALARM if there is a mismatch.
Period of checks is configured using format: &lt;code&gt;1m&lt;/code&gt; - every minute, &lt;code&gt;1h&lt;/code&gt; - evey hour.
Recommended period is a couple of hours as there is a high performance cost.
Running a check requires computing a checksum by scanning entire etcd content at given revision.&lt;/p&gt;</description></item><item><title>Data Corruption</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/data_corruption/</guid><description>&lt;p&gt;etcd has built in automated data corruption detection to prevent member state from diverging.&lt;/p&gt;
&lt;h2 id="enabling-data-corruption-detection"&gt;Enabling data corruption detection&lt;/h2&gt;
&lt;p&gt;Data corruption detection can be done using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial check, enabled with &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Periodic check of:
&lt;ul&gt;
&lt;li&gt;Compacted revision hash, enabled with &lt;code&gt;--experimental-compact-hash-check-enabled&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Latest revision hash, enabled with &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial check will be executed during bootstrap of etcd member.
Member will compare its persistent state vs other members and exit if there is a mismatch.&lt;/p&gt;</description></item><item><title>Data Corruption</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/data_corruption/</guid><description>&lt;p&gt;etcd has built in automated data corruption detection to prevent member state from diverging.&lt;/p&gt;
&lt;h2 id="enabling-data-corruption-detection"&gt;Enabling data corruption detection&lt;/h2&gt;
&lt;p&gt;Data corruption detection can be done using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial check, enabled with &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Periodic check of:
&lt;ul&gt;
&lt;li&gt;Compacted revision hash, enabled with &lt;code&gt;--experimental-compact-hash-check-enabled&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Latest revision hash, enabled with &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial check will be executed during bootstrap of etcd member.
Member will compare its persistent state vs other members and exit if there is a mismatch.&lt;/p&gt;</description></item><item><title>Data Corruption</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/data_corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/data_corruption/</guid><description>&lt;p&gt;etcd has built in automated data corruption detection to prevent member state from diverging.&lt;/p&gt;
&lt;h2 id="enabling-data-corruption-detection"&gt;Enabling data corruption detection&lt;/h2&gt;
&lt;p&gt;Data corruption detection can be done using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial check, enabled with &lt;code&gt;--experimental-initial-corrupt-check&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Periodic check of:
&lt;ul&gt;
&lt;li&gt;Compacted revision hash, enabled with &lt;code&gt;--experimental-compact-hash-check-enabled&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Latest revision hash, enabled with &lt;code&gt;--experimental-corrupt-check-time&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Initial check will be executed during bootstrap of etcd member.
Member will compare its persistent state vs other members and exit if there is a mismatch.&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;p&gt;See &lt;a href="../../op-guide/performance/#benchmarks"&gt;etcd v3 performance benchmarking&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="https://github.com/etcd-io/etcd/tree/master/tools/benchmark" target="_blank" rel="noopener"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="https://github.com/etcd-io/etcd/tree/main/tools/benchmark" target="_blank" rel="noopener"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="https://github.com/etcd-io/etcd/tree/main/tools/benchmark" target="_blank" rel="noopener"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/main/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/main/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Downgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/downgrades/downgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/downgrades/downgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to downgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="downgrading-an-etcd-v3x-cluster"&gt;Downgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../downgrade_3_5/"&gt;Downgrade etcd from 3.5 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Downgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to downgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="downgrading-an-etcd-v3x-cluster"&gt;Downgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../downgrade_3_5/"&gt;Downgrade etcd from 3.5 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../downgrade_3_6/"&gt;Downgrade etcd from 3.6 to 3.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Downgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to downgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="downgrading-an-etcd-v3x-cluster"&gt;Downgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../downgrade_3_5/"&gt;Downgrade etcd from 3.5 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../downgrade_3_6/"&gt;Downgrade etcd from 3.6 to 3.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="moving-from-etcd-api-v2-to-api-v3"&gt;Moving from etcd API v2 to API v3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../op-guide/v2-migration/"&gt;Migrate applications from using API v2 to API v3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_1/"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_2/"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_3/"&gt;Upgrade etcd from 3.2 to 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_4/"&gt;Upgrade etcd from 3.3 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_0/"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_1/"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_2/"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_3/"&gt;Upgrade etcd from 3.2 to 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_4/"&gt;Upgrade etcd from 3.3 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_5/"&gt;Upgrade etcd from 3.4 to 3.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_0/"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_1/"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_2/"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_3/"&gt;Upgrade etcd from 3.2 to 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_4/"&gt;Upgrade etcd from 3.3 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_5/"&gt;Upgrade etcd from 3.4 to 3.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_6/"&gt;Upgrade etcd from 3.5 to 3.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_0/"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_1/"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_2/"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_3/"&gt;Upgrade etcd from 3.2 to 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_4/"&gt;Upgrade etcd from 3.3 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_5/"&gt;Upgrade etcd from 3.4 to 3.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_6/"&gt;Upgrade etcd from 3.5 to 3.6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_0/"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrade etcd from v3.5 to v3.6</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_6/</guid><description>&lt;p&gt;In the general case, upgrading from etcd v3.5 to v3.6 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.5 processes and replace them with etcd v3.6 processes&lt;/li&gt;
&lt;li&gt;after running all v3.6 processes, new features in v3.6 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;h4 id="update-35"&gt;Update 3.5&lt;/h4&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Important&lt;/div&gt;
&lt;p&gt;Before upgrading to 3.6, make sure that &lt;a href="https://etcd.io/blog/2025/zombie_members_upgrade" target="_blank" rel="noopener"&gt;all of your 3.5 members are updated to 3.5.26 or later&lt;/a&gt;. Patch releases 3.5.24 through 3.5.26 fix several potential upgrade blockers.&lt;/p&gt;</description></item><item><title>Upgrade etcd from v3.5 to v3.6</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_6/</guid><description>&lt;p&gt;In the general case, upgrading from etcd v3.5 to v3.6 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.5 processes and replace them with etcd v3.6 processes&lt;/li&gt;
&lt;li&gt;after running all v3.6 processes, new features in v3.6 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;h4 id="update-35"&gt;Update 3.5&lt;/h4&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Important&lt;/div&gt;
&lt;p&gt;Before upgrading to 3.6, make sure that &lt;a href="https://etcd.io/blog/2025/zombie_members_upgrade" target="_blank" rel="noopener"&gt;all of your 3.5 members are updated to 3.5.26 or later&lt;/a&gt;. Patch releases 3.5.24 through 3.5.26 fix several potential upgrade blockers.&lt;/p&gt;</description></item><item><title>Downgrade etcd from 3.5 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/downgrades/downgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/downgrades/downgrade_3_5/</guid><description>&lt;p&gt;In the general case, downgrading from etcd 3.5 to 3.4 can be a zero-downtime, rolling downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd 3.5 processes and replace them with etcd 3.4 processes&lt;/li&gt;
&lt;li&gt;after starting any 3.4 processes, new features in 3.5 are not longer available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#downgrade-procedure"&gt;starting a downgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="downgrade-checklists"&gt;Downgrade checklists&lt;/h3&gt;
&lt;p&gt;content/en/docs/v3.5/op-guide/authentication/rbac.md&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; If your cluster enables auth, rolling downgrade from 3.5 isn&amp;rsquo;t supported because 3.5 &lt;a href="https://github.com/etcd-io/etcd/pull/11943" target="_blank" rel="noopener"&gt;changes a format of WAL entries related to auth&lt;/a&gt;. You can follow the &lt;a href="../../op-guide/authentication/rbac/"&gt;authentification instructions&lt;/a&gt; to disable auth, and delete all users first.&lt;/p&gt;</description></item><item><title>Downgrade etcd from 3.5 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrade_3_5/</guid><description>&lt;p&gt;In the general case, downgrading from etcd 3.5 to 3.4 can be a zero-downtime, rolling downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd 3.5 processes and replace them with etcd 3.4 processes&lt;/li&gt;
&lt;li&gt;after starting any 3.4 processes, new features in 3.5 are not longer available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#downgrade-procedure"&gt;starting a downgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="downgrade-checklists"&gt;Downgrade checklists&lt;/h3&gt;
&lt;p&gt;content/en/docs/v3.5/op-guide/authentication/rbac.md&lt;/p&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;If your cluster enables auth, rolling downgrade from 3.5 isn&amp;rsquo;t supported because 3.5 &lt;a href="https://github.com/etcd-io/etcd/pull/11943" target="_blank" rel="noopener"&gt;changes a format of WAL entries related to auth&lt;/a&gt;. You can follow the &lt;a href="../../op-guide/authentication/rbac/"&gt;authentification instructions&lt;/a&gt; to disable auth, and delete all users first.&lt;/p&gt;</description></item><item><title>Downgrade etcd from 3.5 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrade_3_5/</guid><description>&lt;p&gt;In the general case, downgrading from etcd 3.5 to 3.4 can be a zero-downtime, rolling downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd 3.5 processes and replace them with etcd 3.4 processes&lt;/li&gt;
&lt;li&gt;after starting any 3.4 processes, new features in 3.5 are not longer available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#downgrade-procedure"&gt;starting a downgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="downgrade-checklists"&gt;Downgrade checklists&lt;/h3&gt;
&lt;p&gt;content/en/docs/v3.5/op-guide/authentication/rbac.md&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; If your cluster enables auth, rolling downgrade from 3.5 isn&amp;rsquo;t supported because 3.5 &lt;a href="https://github.com/etcd-io/etcd/pull/11943" target="_blank" rel="noopener"&gt;changes a format of WAL entries related to auth&lt;/a&gt;. You can follow the &lt;a href="../../op-guide/authentication/rbac/"&gt;authentification instructions&lt;/a&gt; to disable auth, and delete all users first.&lt;/p&gt;</description></item><item><title>Downgrade etcd from v3.6 to v3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/downgrades/downgrade_3_6/</guid><description>&lt;p&gt;In the general case, downgrading from etcd v3.6 to v3.5 can be a zero-downtime, rolling downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.6 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after enabling the downgrade, new features in v3.6 are no longer available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#downgrade-procedure"&gt;starting a downgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="downgrade-checklists"&gt;Downgrade checklists&lt;/h3&gt;
&lt;p&gt;Highlighted breaking changes from v3.6 to v3.5:&lt;/p&gt;
&lt;h4 id="difference-in-flags"&gt;Difference in flags&lt;/h4&gt;
&lt;p&gt;If you are using any of the following flags in your v3.6 configurations, make sure to remove, rename, or change the default value when downgrading to v3.5.&lt;/p&gt;</description></item><item><title>Downgrade etcd from v3.6 to v3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrade_3_6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/downgrades/downgrade_3_6/</guid><description>&lt;p&gt;In the general case, downgrading from etcd v3.6 to v3.5 can be a zero-downtime, rolling downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.6 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after enabling the downgrade, new features in v3.6 are no longer available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#downgrade-procedure"&gt;starting a downgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="downgrade-checklists"&gt;Downgrade checklists&lt;/h3&gt;
&lt;p&gt;Highlighted breaking changes from v3.6 to v3.5:&lt;/p&gt;
&lt;h4 id="difference-in-flags"&gt;Difference in flags&lt;/h4&gt;
&lt;p&gt;If you are using any of the following flags in your v3.6 configurations, make sure to remove, rename, or change the default value when downgrading to v3.5.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.4 to 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.4 to 3.5 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.4 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after running all v3.5 processes, new features in v3.5 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.4 to 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.4 to 3.5 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.4 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after running all v3.5 processes, new features in v3.5 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.4 to 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.4 to 3.5 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.4 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after running all v3.5 processes, new features in v3.5 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.4 to 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.4 to 3.5 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.4 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after running all v3.5 processes, new features in v3.5 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Amazon Web Services</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/aws/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/aws/</guid><description>&lt;p&gt;This guide assumes operational knowledge of Amazon Web Services (AWS), specifically Amazon Elastic Compute Cloud (EC2). This guide provides an introduction to design considerations when designing an etcd deployment on AWS EC2 and how AWS specific features may be utilized in that context.&lt;/p&gt;
&lt;h2 id="capacity-planning"&gt;Capacity planning&lt;/h2&gt;
&lt;p&gt;As a critical building block for distributed systems it is crucial to perform adequate capacity planning in order to support the intended cluster workload. As a highly available and strongly consistent data store increasing the number of nodes in an etcd cluster will generally affect performance adversely. This makes sense intuitively, as more nodes means more members for the leader to coordinate state across. The most direct way to increase throughput and decrease latency of an etcd cluster is allocate more disk I/O, network I/O, CPU, and memory to cluster members. In the event it is impossible to temporarily divert incoming requests to the cluster, scaling the EC2 instances which comprise the etcd cluster members one at a time may improve performance. It is, however, best to avoid bottlenecks through capacity planning.&lt;/p&gt;</description></item><item><title>Container Linux with systemd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/container-linux-systemd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/container-linux-systemd/</guid><description>&lt;p&gt;The following guide shows how to run etcd with &lt;a href="https://github.com/systemd/systemd" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; under &lt;a href="https://coreos.com/os/docs/latest" target="_blank" rel="noopener"&gt;Container Linux&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="provisioning-an-etcd-cluster"&gt;Provisioning an etcd cluster&lt;/h2&gt;
&lt;p&gt;Cluster bootstrapping in Container Linux is simplest with &lt;a href="https://github.com/coreos/docs/blob/master/ignition/what-is-ignition.md" target="_blank" rel="noopener"&gt;Ignition&lt;/a&gt;; &lt;code&gt;coreos-metadata.service&lt;/code&gt; dynamically fetches the machine&amp;rsquo;s IP for discovery. Note that etcd&amp;rsquo;s discovery service protocol is only meant for bootstrapping, and cannot be used with runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/coreos/container-linux-config-transpiler" target="_blank" rel="noopener"&gt;Container Linux Config Transpiler&lt;/a&gt; compiles etcd configuration files into Ignition configuration files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;etcd&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;version&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3.2.0&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;s1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;data_dir&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/var/lib/etcd&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;advertise_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PUBLIC_IPV4}:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;initial_advertise_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://0.0.0.0:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;discovery&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;https://discovery.etcd.io/&amp;lt;token&amp;gt;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ct&lt;/code&gt; would produce the following Ignition Config:&lt;/p&gt;</description></item><item><title>FreeBSD</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/platforms/freebsd/</guid><description>&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can be installed either via packages or ports system. Their versions have been recently updated to 0.2.0 so now etcd and etcdctl can be enjoyed on FreeBSD 10.0 (RC4 as of now) and 9.x, where they have been tested. They might also work when installed from ports on earlier versions of FreeBSD, but it is untested; caveat emptor.&lt;/p&gt;</description></item><item><title>Issue Triage Guidelines</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up issue management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; issues are listed at &lt;a href="https://github.com/etcd-io/etcd/issues" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/issues&lt;/a&gt;
and are identified with labels. For example, an issue that is identified
as a bug will eventually be set to label &lt;code&gt;area/bug &lt;/code&gt;. New issues will
start out without any labels, but typically &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors
add labels based on their findings. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few predetermined searches on issues for convenience:&lt;/p&gt;</description></item><item><title>Avoiding Zombie Cluster Members When Upgrading to etcd v3.6</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2025/zombie_members_upgrade/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2025/zombie_members_upgrade/</guid><description>&lt;p&gt;&lt;strong&gt;Summary: SIG-etcd has patched another potential issue blocking upgrades from v3.5 to v3.6. If you are upgrading, make sure to update to &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.5.26" target="_blank" rel="noopener"&gt;v3.5.26&lt;/a&gt; or later first.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="issue-summary"&gt;Issue Summary&lt;/h2&gt;
&lt;p&gt;Recently, the etcd community addressed an issue that may appear when users &lt;a href="https://etcd.io/docs/v3.6/upgrades/upgrade_3_6/" target="_blank" rel="noopener"&gt;upgrade from v3.5 to v3.6&lt;/a&gt;. This bug can cause the cluster to report &amp;ldquo;zombie members&amp;rdquo;, which are etcd nodes that were removed from the database cluster some time ago, and are re-appearing and joining database consensus. The etcd cluster is then inoperable until these zombie members are removed.&lt;/p&gt;</description></item><item><title>Follow Up - Preventing Upgrade Failures from etcd v3.5 to v3.6</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2025/upgrade_from_3.5_to_3.6_issue_followup/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2025/upgrade_from_3.5_to_3.6_issue_followup/</guid><description>&lt;p&gt;We have identified and fixed an additional scenario that may cause upgrade failures when
moving from etcd v3.5 to v3.6. This post contains details, the fix, and additional workarounds.
Please refer to issue &lt;a href="https://github.com/etcd-io/etcd/issues/20793" target="_blank" rel="noopener"&gt;20793&lt;/a&gt; to get detailed technical information.&lt;/p&gt;
&lt;h2 id="issue"&gt;Issue&lt;/h2&gt;
&lt;p&gt;In a previous post — &lt;a href="https://etcd.io/blog/2025/upgrade_from_3.5_to_3.6_issue/" target="_blank" rel="noopener"&gt;How to Prevent a Common Failure when Upgrading etcd v3.5 to v3.6&lt;/a&gt; — we
described an upgrade issue affecting etcd versions in v3.5.1-v3.5.19. That issue was addressed in
v3.5.20. However, a follow-up investigation revealed that the original fix did not cover all scenarios.&lt;/p&gt;</description></item><item><title>Autonomous Testing of etcd's Robustness</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2025/autonomus_testing_with_antithesis/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2025/autonomus_testing_with_antithesis/</guid><description>&lt;p&gt;&lt;em&gt;This is a post from the &lt;a href="https://www.cncf.io/blog/2025/09/25/autonomous-testing-of-etcds-robustness/" target="_blank" rel="noopener"&gt;CNCF blog&lt;/a&gt; which we are sharing with our community as well.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a critical component of many production systems, including Kubernetes, the etcd project&amp;rsquo;s first priority is reliability.
Ensuring consistency and data safety requires our project contributors to continuously improve testing methodologies.
In this article, we will describe how we used advanced simulation testing to uncover subtle bugs,
validate the robustness of our releases, and increase our confidence in etcd&amp;rsquo;s stability.
We&amp;rsquo;ll share our key findings and how they have improved etcd.&lt;/p&gt;</description></item><item><title>Announcing etcd v3.6.0</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2025/announcing-etcd-3.6/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2025/announcing-etcd-3.6/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#introduction"&gt;Introduction&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#security"&gt;Security&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#features"&gt;Features&lt;/a&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#migration-to-v3store"&gt;Migration to v3store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#downgrade"&gt;Downgrade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#feature-gates"&gt;Feature Gates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#livezreadyz-checks"&gt;Livez/readyz checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#v3discovery"&gt;v3discovery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#performance"&gt;Performance&lt;/a&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#memory"&gt;Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#throughput"&gt;Throughput&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#breaking-changes"&gt;Breaking changes&lt;/a&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#old-binaries-are-incompatible-with-new-schema-versions"&gt;Old Binaries Are Incompatible with New Schema Versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#peer-endpoints-no-longer-serve-client-requests"&gt;Peer Endpoints No Longer Serve Client Requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#clear-boundary-between-etcdctl-and-etcdutl"&gt;Clear boundary between etcdctl and etcdutl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#testing"&gt;Testing&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#critical-bug-fixes"&gt;Critical bug fixes&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#upgrade-issue"&gt;Upgrade issue&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#platforms"&gt;Platforms&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#dependencies"&gt;Dependencies&lt;/a&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#dependency-bumping-guide"&gt;Dependency Bumping Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#core-dependency-updates"&gt;Core Dependency Updates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#grpc-gatewayv2"&gt;grpc-gateway@v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#grpc-ecosystemgo-grpc-middlewareprovidersprometheus"&gt;grpc-ecosystem/go-grpc-middleware/providers/prometheus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#community"&gt;Community&lt;/a&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#etcd-becomes-a-kubernetes-sig"&gt;etcd Becomes a Kubernetes SIG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-contributors-maintainers-and-reviewers"&gt;New Contributors, Maintainers, and Reviewers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-release-team"&gt;New Release Team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#introducing-the-etcd-operator-working-group"&gt;Introducing the etcd Operator Working Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#extended-support-for-v34"&gt;Extended Support for v3.4&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="#future-development"&gt;Future Development&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Today, we are releasing &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.6.0" target="_blank" rel="noopener"&gt;etcd v3.6.0&lt;/a&gt;, the first minor release since etcd v3.5.0 on June 15, 2021. This release
introduces several new features, makes significant progress on long-standing efforts like downgrade support and
migration to v3store, and addresses numerous critical &amp;amp; major issues. It also includes major optimizations in
memory usage, improving efficiency and performance.&lt;/p&gt;</description></item><item><title>How to Prevent a Common Failure when Upgrading etcd v3.5 to v3.6</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2025/upgrade_from_3.5_to_3.6_issue/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2025/upgrade_from_3.5_to_3.6_issue/</guid><description>&lt;div class="alert alert-primary" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Update (October 21, 2025)&lt;/div&gt;
&lt;p&gt;We have identified and fixed two additional upgrade issues. Please see our
new blog posts
&lt;a href="https://deploy-preview-1113--etcd.netlify.app/blog/2025/upgrade_from_3.5_to_3.6_issue_followup"&gt;Follow Up - Preventing Upgrade Failures from etcd v3.5 to v3.6&lt;/a&gt; and &lt;a href="https://deploy-preview-1113--etcd.netlify.app/blog/2025/zombie_members_upgrade"&gt;Avoiding Zombie Cluster Members When Upgrading&lt;/a&gt;
for details.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;There is a common issue &lt;a href="https://github.com/etcd-io/etcd/issues/19557" target="_blank" rel="noopener"&gt;19557&lt;/a&gt; in the etcd v3.5 to v3.6 upgrade that may cause the upgrade
process to fail. You can find detailed information and related discussions in the issue.&lt;/p&gt;
&lt;h2 id="tl-dr"&gt;TL; DR&lt;/h2&gt;
&lt;p&gt;Users are required to first upgrade to etcd v3.5.20 (or a higher patch version) before upgrading
to etcd v3.6.0. Failure to do so may result in an unsuccessful upgrade.&lt;/p&gt;</description></item><item><title>Engage with the etcd project at KubeCon NA 2023</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2023/engage_with_etcd_at_kccncna2023/</link><pubDate>Sun, 05 Nov 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2023/engage_with_etcd_at_kccncna2023/</guid><description>&lt;p&gt;KubeCon NA 2023 in Chicago is just around the corner! This year, the etcd project has a diverse range of talks, tutorials, and even interactive contribfest sessions for you to get involved in . As a critical foundational pillar of the Kubernetes ecosystem, etcd&amp;rsquo;s presence at Kubecon underscores its importance in ensuring all our Kubernetes clusters continue to have robust and reliable distributed persistent state.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a detailed overview of what you can expect from the Etcd Project&amp;rsquo;s presence at KubeCon NA 2023:&lt;/p&gt;</description></item><item><title>Introducing sig-etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2023/introducing-sig-etcd/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2023/introducing-sig-etcd/</guid><description>&lt;p&gt;Special Interest Groups (SIGs) are a fundamental part of the Kubernetes project, with a substantial share of the community activity happening within them. When the need arises, &lt;a href="https://github.com/kubernetes/community/blob/master/sig-wg-lifecycle.md" target="_blank" rel="noopener"&gt;new SIGs can be created&lt;/a&gt;, and that was precisely what happened recently.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/kubernetes/community/blob/master/sig-etcd/README.md" target="_blank" rel="noopener"&gt;SIG etcd&lt;/a&gt; is the most recent addition to the list of Kubernetes SIGs. In this article we will get to know it a bit better, understand its origins, scope, and plans.&lt;/p&gt;
&lt;h2 id="the-critical-role-of-etcd"&gt;The critical role of etcd&lt;/h2&gt;
&lt;p&gt;If we look inside the control plane of a Kubernetes cluster, we will find &lt;a href="https://kubernetes.io/docs/concepts/overview/components/#etcd" target="_blank" rel="noopener"&gt;etcd&lt;/a&gt;, a consistent and highly-available key value store used as Kubernetes&amp;rsquo; backing store for all cluster data -- this description alone highlights the critical role that etcd plays, and the importance of it within the Kubernetes ecosystem.&lt;/p&gt;</description></item><item><title>How to debug large db size issue?</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2023/how_to_debug_large_db_size_issue/</link><pubDate>Wed, 04 Jan 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2023/how_to_debug_large_db_size_issue/</guid><description>&lt;h1 id="background"&gt;Background&lt;/h1&gt;
&lt;p&gt;Users can configure the quota of the backend db size using flag &lt;code&gt;--quota-backend-bytes&lt;/code&gt;. It&amp;rsquo;s the max number of bytes
the etcd db file may consume, namely the ${etcd-data-dir}/member/snap/db file. Its default value is 2GB, and the
suggested max value is 8GB.&lt;/p&gt;
&lt;p&gt;2GB is usually sufficient for most use cases. If you run out of the db quota, you will see error message &lt;code&gt;etcdserver: mvcc: database space exceeded&lt;/code&gt;
when trying to write more data, and see alarm &amp;ldquo;NOSPACE&amp;rdquo; (see example below) when checking the endpoint status or health state. It would be better to figure out whether it&amp;rsquo;s expected. It&amp;rsquo;s exactly the reason why I provide this guide.&lt;/p&gt;</description></item><item><title>etcd Integrates Continuous Fuzzing</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2022/etcd-integrates-continuous-fuzzing/</link><pubDate>Fri, 11 Mar 2022 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2022/etcd-integrates-continuous-fuzzing/</guid><description>&lt;p&gt;In the last few months, the team at &lt;a href="https://adalogics.com" target="_blank" rel="noopener"&gt;Ada Logics&lt;/a&gt; has worked on integrating continuous fuzzing into the etcd project. This was an effort focused on improving the security posture of etcd and ensuring a continued good experience for etcds users. The fuzzing integration involved enrolling etcd in the OSS-Fuzz project and writing a set of fuzzers that would bring the test coverage of etcd up to a mature level. In total, 18 fuzzers were written, and eight bugs were found, demonstrating the work’s value for etcd both short term and long term. All fuzzers were implemented by way of go-fuzz and when running in OSS-Fuzz instrumented by way of libFuzzer, and as such, etcd uses state-of-the-art open source fuzzing capabilities.
The full report of the engagement can be found &lt;a href="https://github.com/etcd-io/etcd/blob/main/security/FUZZING_AUDIT_2022.PDF" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Announcing etcd 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2021/announcing-etcd-3.5/</link><pubDate>Tue, 15 Jun 2021 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2021/announcing-etcd-3.5/</guid><description>&lt;p&gt;When we &lt;a href="https://kubernetes.io/blog/2019/08/30/announcing-etcd-3-4/" target="_blank" rel="noopener"&gt;launched etcd 3.4 back in August 2019&lt;/a&gt;, our focus was on
storage backend improvements, non-voting member and pre-vote features. Since then,
etcd has become more widely used for various mission critical clustering and database
applications and as a result, its feature set has grown more broad and complex. Thus,
improving its stability and reliability has been top priority in recent
development.&lt;/p&gt;
&lt;p&gt;Today, we are releasing &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v3.5.0" target="_blank" rel="noopener"&gt;etcd 3.5&lt;/a&gt;. The past two years
allowed for extensive iterations in fixing numerous bugs, identifying
optimization opportunities at scale, and evolving its surrounding ecosystem.
The etcd project also became a
&lt;a href="https://www.cncf.io/announcements/2020/11/24/cloud-native-computing-foundation-announces-etcd-graduation/" target="_blank" rel="noopener"&gt;CNCF graduated project&lt;/a&gt;
during this time frame. This release is the result of continuous evolution and
grungy, thankless tasks done by the etcd community.&lt;/p&gt;</description></item><item><title>Latest Jepsen Results against etcd 3.4.3</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2020/jepsen-343-results/</link><pubDate>Thu, 30 Jan 2020 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2020/jepsen-343-results/</guid><description>&lt;p&gt;Jepsen tested and analyzed etcd 3.4.3, and had both good results and useful feedback to share with us.&lt;/p&gt;
&lt;p&gt;A key part of etcd&amp;rsquo;s design is strong consistency guarantees across the distributed key-value store. Kubernetes, Rook, OpenStack, and countless other critical software projects rely on etcd, in part, because of the etcd project&amp;rsquo;s focus on reliability and correctness.&lt;/p&gt;
&lt;p&gt;Over the years, the etcd team has put tremendous effort on building &lt;a href="https://web.archive.org/web/20200811103145/https://coreos.com/blog/testing-distributed-systems-in-go.html" target="_blank" rel="noopener"&gt;testing&lt;/a&gt; and &lt;a href="https://web.archive.org/web/20200420035739/https://coreos.com/blog/new-functional-testing-in-etcd.html" target="_blank" rel="noopener"&gt;chaos engineering frameworks&lt;/a&gt;. We feel that we&amp;rsquo;ve improved our consistency, and have asked Jepsen for validation.&lt;/p&gt;</description></item><item><title>Container Linux with systemd</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2017/etcd-container-linux-with-systemd/</link><pubDate>Tue, 23 May 2017 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2017/etcd-container-linux-with-systemd/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an adaptation of a page previously found in the Platforms section of the documentation which described etcd deployments on various platform services.
The original page was authored by &lt;a href="https://github.com/etcd-io/etcd/commits/8b290c680a5d4b4067c4d91b33f70c5506f654f0/Documentation/platforms/container-linux-systemd.md" target="_blank" rel="noopener"&gt;&lt;strong&gt;Gyuho Lee&lt;/strong&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The following blog post shows how to run etcd with &lt;a href="https://github.com/systemd/systemd" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; under &lt;a href="https://coreos.com/os/docs/latest" target="_blank" rel="noopener"&gt;Container Linux&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="provisioning-an-etcd-cluster"&gt;Provisioning an etcd cluster&lt;/h2&gt;
&lt;p&gt;Cluster bootstrapping in Container Linux is simplest with &lt;a href="https://github.com/coreos/docs/blob/master/ignition/what-is-ignition.md" target="_blank" rel="noopener"&gt;Ignition&lt;/a&gt;; &lt;code&gt;coreos-metadata.service&lt;/code&gt; dynamically fetches the machine&amp;rsquo;s IP for discovery. Note that etcd&amp;rsquo;s discovery service protocol is only meant for bootstrapping, and cannot be used with runtime reconfiguration or cluster monitoring.&lt;/p&gt;</description></item><item><title>Deployment of etcd on AWS EC2</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2017/etcd-deployments-on-aws/</link><pubDate>Mon, 10 Apr 2017 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2017/etcd-deployments-on-aws/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an adaptation of a page previously found in the Platforms section of the documentation which described etcd deployments on various platform services.
The original page was authored by &lt;a href="https://github.com/etcd-io/etcd/commits/6c08437ec330f84f78a59f7772884c7ef5374247/Documentation/platforms/aws.md" target="_blank" rel="noopener"&gt;&lt;strong&gt;Caleb Miles&lt;/strong&gt; and others&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This post provides an introduction to design considerations when designing an etcd deployment on AWS EC2 and how AWS specific features may be utilized in that context.
Also, this post assumes operational knowledge of Amazon Web Services (AWS), specifically Amazon Elastic Compute Cloud (EC2).&lt;/p&gt;</description></item><item><title>FreeBSD</title><link>https://deploy-preview-1113--etcd.netlify.app/blog/2014/etcd-freebsd/</link><pubDate>Thu, 23 Jan 2014 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/blog/2014/etcd-freebsd/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an adaptation of a page previously found in the Platforms section of the documentation which described etcd deployments on various platform services.
The original page was authored by &lt;a href="https://github.com/etcd-io/etcd/commits/6c08437ec330f84f78a59f7772884c7ef5374247/Documentation/platforms/freebsd.md" target="_blank" rel="noopener"&gt;&lt;strong&gt;Bartłomiej Rutkowski&lt;/strong&gt; and others&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can be installed either via packages or ports system. Their versions have been recently updated to 0.2.0 so now etcd and etcdctl can be enjoyed on FreeBSD 10.0 (RC4 as of now) and 9.x, where they have been tested. They might also work when installed from ports on earlier versions of FreeBSD, but it is untested; caveat emptor.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/triage/prs/</guid><description>&lt;h1 id="pr-management"&gt;PR Management&lt;/h1&gt;
&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up PR management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; PRs are listed at &lt;a href="https://github.com/etcd-io/etcd/pulls" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;
A PR can have various labels, milestone, reviewer etc. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few example searches on PR for convenience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&amp;#43;milestone%3Aetcd-v3.4" target="_blank" rel="noopener"&gt;Open PRS for milestone etcd-v3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Investigating" target="_blank" rel="noopener"&gt;PRs under investigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scope"&gt;Scope&lt;/h2&gt;
&lt;p&gt;These guidelines serves as a primary document for managing PRs in &lt;code&gt;etcd&lt;/code&gt;. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document is created with &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors in mind.&lt;/p&gt;</description></item><item><title>Administration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/admin_guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/admin_guide/</guid><description>&lt;h2 id="data-directory"&gt;Data Directory&lt;/h2&gt;
&lt;h3 id="lifecycle"&gt;Lifecycle&lt;/h3&gt;
&lt;p&gt;When first started, etcd stores its configuration into a data directory specified by the data-dir configuration parameter.
Configuration is stored in the write ahead log and includes: the local member ID, cluster ID, and initial cluster configuration.
The write ahead log and snapshot files are used during member operation and to recover after a restart.&lt;/p&gt;
&lt;p&gt;Having a dedicated disk to store wal files can improve the throughput and stabilize the cluster.
It is highly recommended to dedicate a wal disk and set &lt;code&gt;--wal-dir&lt;/code&gt; to point to a directory on that device for a production cluster deployment.&lt;/p&gt;</description></item><item><title>Amazon Web Services</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/aws/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/aws/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This guide assumes operational knowledge of Amazon Web Services (AWS), specifically Amazon Elastic Compute Cloud (EC2). This guide provides an introduction to design considerations when designing an etcd deployment on AWS EC2 and how AWS specific features may be utilized in that context.&lt;/p&gt;
&lt;h2 id="capacity-planning"&gt;Capacity planning&lt;/h2&gt;
&lt;p&gt;As a critical building block for distributed systems it is crucial to perform adequate capacity planning in order to support the intended cluster workload. As a highly available and strongly consistent data store increasing the number of nodes in an etcd cluster will generally affect performance adversely. This makes sense intuitively, as more nodes means more members for the leader to coordinate state across. The most direct way to increase throughput and decrease latency of an etcd cluster is allocate more disk I/O, network I/O, CPU, and memory to cluster members. In the event it is impossible to temporarily divert incoming requests to the cluster, scaling the EC2 instances which comprise the etcd cluster members one at a time may improve performance. It is, however, best to avoid bottlenecks through capacity planning.&lt;/p&gt;</description></item><item><title>Amazon Web Services</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/aws/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/aws/</guid><description>&lt;p&gt;This guide assumes operational knowledge of Amazon Web Services (AWS), specifically Amazon Elastic Compute Cloud (EC2). This guide provides an introduction to design considerations when designing an etcd deployment on AWS EC2 and how AWS specific features may be utilized in that context.&lt;/p&gt;
&lt;h2 id="capacity-planning"&gt;Capacity planning&lt;/h2&gt;
&lt;p&gt;As a critical building block for distributed systems it is crucial to perform adequate capacity planning in order to support the intended cluster workload. As a highly available and strongly consistent data store increasing the number of nodes in an etcd cluster will generally affect performance adversely. This makes sense intuitively, as more nodes means more members for the leader to coordinate state across. The most direct way to increase throughput and decrease latency of an etcd cluster is allocate more disk I/O, network I/O, CPU, and memory to cluster members. In the event it is impossible to temporarily divert incoming requests to the cluster, scaling the EC2 instances which comprise the etcd cluster members one at a time may improve performance. It is, however, best to avoid bottlenecks through capacity planning.&lt;/p&gt;</description></item><item><title>API reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-auth-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user. User name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role. Role name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberPromote&lt;/td&gt;
 &lt;td&gt;MemberPromoteRequest&lt;/td&gt;
 &lt;td&gt;MemberPromoteResponse&lt;/td&gt;
 &lt;td&gt;MemberPromote promotes a member from raft learner (non-voting) to raft voting member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;Empty field.&lt;/p&gt;</description></item><item><title>API reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-auth-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthStatus&lt;/td&gt;
 &lt;td&gt;AuthStatusRequest&lt;/td&gt;
 &lt;td&gt;AuthStatusResponse&lt;/td&gt;
 &lt;td&gt;AuthStatus displays authentication status.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user. User name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role. Role name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberPromote&lt;/td&gt;
 &lt;td&gt;MemberPromoteRequest&lt;/td&gt;
 &lt;td&gt;MemberPromoteResponse&lt;/td&gt;
 &lt;td&gt;MemberPromote promotes a member from raft learner (non-voting) to raft voting member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-apietcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Downgrade&lt;/td&gt;
 &lt;td&gt;DowngradeRequest&lt;/td&gt;
 &lt;td&gt;DowngradeResponse&lt;/td&gt;
 &lt;td&gt;Downgrade requests downgrades, verifies feasibility or cancels downgrade on the cluster version. Supported since etcd 3.5.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;Empty field.&lt;/p&gt;</description></item><item><title>API reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-auth-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthStatus&lt;/td&gt;
 &lt;td&gt;AuthStatusRequest&lt;/td&gt;
 &lt;td&gt;AuthStatusResponse&lt;/td&gt;
 &lt;td&gt;AuthStatus displays authentication status.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user. User name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role. Role name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberPromote&lt;/td&gt;
 &lt;td&gt;MemberPromoteRequest&lt;/td&gt;
 &lt;td&gt;MemberPromoteResponse&lt;/td&gt;
 &lt;td&gt;MemberPromote promotes a member from raft learner (non-voting) to raft voting member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-apietcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Downgrade&lt;/td&gt;
 &lt;td&gt;DowngradeRequest&lt;/td&gt;
 &lt;td&gt;DowngradeResponse&lt;/td&gt;
 &lt;td&gt;Downgrade requests downgrades, verifies feasibility or cancels downgrade on the cluster version. Supported since etcd 3.5.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisableresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenablerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthEnableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenableresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthEnableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroleaddrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the role to add to the authentication system.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroleaddresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroledeleterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroledeleteresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegetrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegetresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;perm&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) authpb.Permission&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegrantpermissionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGrantPermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the role which will be granted the permission.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;perm&lt;/td&gt;
 &lt;td&gt;perm is the permission to grant to the role.&lt;/td&gt;
 &lt;td&gt;authpb.Permission&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegrantpermissionresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGrantPermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolelistrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolelistresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;roles&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolerevokepermissionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleRevokePermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;range_end&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolerevokepermissionresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleRevokePermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authstatusrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthStatusRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authstatusresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthStatusResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;enabled&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bool&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;authRevision&lt;/td&gt;
 &lt;td&gt;authRevision is the current revision of auth store&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuseraddrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;options&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;authpb.UserAddOptions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hashedPassword&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuseraddresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserchangepasswordrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserChangePasswordRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the user whose password is being changed.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;password is the new password for the user. Note that this field will be removed in the API layer.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hashedPassword&lt;/td&gt;
 &lt;td&gt;hashedPassword is the new password for the user. Note that this field will be initialized in the API layer.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserchangepasswordresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserChangePasswordResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserdeleterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the user to delete.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserdeleteresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergetrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergetresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;roles&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergrantrolerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGrantRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;user&lt;/td&gt;
 &lt;td&gt;user is the name of the user which should be granted a given role.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;role is the name of the role to grant to the user.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergrantroleresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGrantRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserlistrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserlistresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;users&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserrevokerolerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserRevokeRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserrevokeroleresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserRevokeRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenticaterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthenticateRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenticateresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthenticateResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;token&lt;/td&gt;
 &lt;td&gt;token is an authorized token that can be used in succeeding RPCs&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-compactionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;CompactionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;CompactionRequest compacts the key-value store up to a given revision. All superseded keys with a revision less than the compaction revision will be removed.&lt;/p&gt;</description></item><item><title>API reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-auth-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthStatus&lt;/td&gt;
 &lt;td&gt;AuthStatusRequest&lt;/td&gt;
 &lt;td&gt;AuthStatusResponse&lt;/td&gt;
 &lt;td&gt;AuthStatus displays authentication status.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user. User name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role. Role name cannot be empty.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberPromote&lt;/td&gt;
 &lt;td&gt;MemberPromoteRequest&lt;/td&gt;
 &lt;td&gt;MemberPromoteResponse&lt;/td&gt;
 &lt;td&gt;MemberPromote promotes a member from raft learner (non-voting) to raft voting member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-apietcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Downgrade&lt;/td&gt;
 &lt;td&gt;DowngradeRequest&lt;/td&gt;
 &lt;td&gt;DowngradeResponse&lt;/td&gt;
 &lt;td&gt;Downgrade requests downgrades, verifies feasibility or cancels downgrade on the cluster version. Supported since etcd 3.5.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-apietcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisableresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenablerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthEnableRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenableresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthEnableResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroleaddrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the role to add to the authentication system.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroleaddresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroledeleterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authroledeleteresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegetrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegetresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;perm&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) authpb.Permission&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegrantpermissionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGrantPermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the role which will be granted the permission.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;perm&lt;/td&gt;
 &lt;td&gt;perm is the permission to grant to the role.&lt;/td&gt;
 &lt;td&gt;authpb.Permission&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolegrantpermissionresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleGrantPermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolelistrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolelistresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;roles&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolerevokepermissionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleRevokePermissionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;range_end&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authrolerevokepermissionresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthRoleRevokePermissionResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authstatusrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthStatusRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authstatusresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthStatusResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;enabled&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;bool&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;authRevision&lt;/td&gt;
 &lt;td&gt;authRevision is the current revision of auth store&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuseraddrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserAddRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;options&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;authpb.UserAddOptions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hashedPassword&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuseraddresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserAddResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserchangepasswordrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserChangePasswordRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the user whose password is being changed.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;password is the new password for the user. Note that this field will be removed in the API layer.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hashedPassword&lt;/td&gt;
 &lt;td&gt;hashedPassword is the new password for the user. Note that this field will be initialized in the API layer.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserchangepasswordresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserChangePasswordResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserdeleterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserDeleteRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the name of the user to delete.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserdeleteresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserDeleteResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergetrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGetRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergetresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGetResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;roles&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergrantrolerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGrantRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;user&lt;/td&gt;
 &lt;td&gt;user is the name of the user which should be granted a given role.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;role is the name of the role to grant to the user.&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authusergrantroleresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserGrantRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserlistrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserListRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserlistresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserListResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;users&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;(slice of) string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserrevokerolerequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserRevokeRoleRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;role&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authuserrevokeroleresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthUserRevokeRoleResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenticaterequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthenticateRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authenticateresponse-apietcdserverpbrpcproto"&gt;message &lt;code&gt;AuthenticateResponse&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(versionpb.etcd_version_msg)&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;option&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;token&lt;/td&gt;
 &lt;td&gt;token is an authorized token that can be used in succeeding RPCs&lt;/td&gt;
 &lt;td&gt;string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-compactionrequest-apietcdserverpbrpcproto"&gt;message &lt;code&gt;CompactionRequest&lt;/code&gt; (api/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;CompactionRequest compacts the key-value store up to a given revision. All superseded keys with a revision less than the compaction revision will be removed.&lt;/p&gt;</description></item><item><title>API reference: concurrency</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-lock-etcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-etcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>API reference: concurrency</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-lock-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-serveretcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (server/etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>API reference: concurrency</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-lock-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-serveretcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (server/etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>API reference: concurrency</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This API reference is autogenerated from the named &lt;code&gt;.proto&lt;/code&gt; files.&lt;/p&gt;
&lt;h5 id="service-lock-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-serveretcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (server/etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-serveretcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (server/etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/op-guide/authentication/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/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; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="note"&gt;Note:&lt;/h3&gt;
&lt;p&gt;This is just a stub which needs to be filled and updated with more information on authentication. The text above is just a code example.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/op-guide/authentication/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/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; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="note"&gt;Note:&lt;/h3&gt;
&lt;p&gt;This is just a stub which needs to be filled and updated with more information on authentication. The text above is just a code example.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/op-guide/authentication/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/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; for authentication:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87"&gt;export&lt;/span&gt; &lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;localhost:2379
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role root root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user get root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role add role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; role grant-permission role0 readwrite foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user add user0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; user grant-role user0 role0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; auth &lt;span style="color:#204a87"&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# now all client requests go through auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 put foo bar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# permission denied, user name is empty because the request does not issue an authentication request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# user0 can read the key foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;${&lt;/span&gt;&lt;span style="color:#000"&gt;ENDPOINTS&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;}&lt;/span&gt; --user&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;user0:123 get foo1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="note"&gt;Note:&lt;/h3&gt;
&lt;p&gt;This is just a stub which needs to be filled and updated with more information on authentication. The text above is just a code example.&lt;/p&gt;</description></item><item><title>Authentication Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/authentication/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication -- having users and roles in etcd -- was added in etcd 2.1. This guide will help you set up basic authentication in etcd.&lt;/p&gt;
&lt;p&gt;etcd before 2.1 was a completely open system; anyone with access to the API could change keys. In order to preserve backward compatibility and upgradability, this feature is off by default.&lt;/p&gt;
&lt;p&gt;For a full discussion of the RESTful API, see &lt;a href="../auth_api"&gt;the authentication API documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special Users and Roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and there are two special roles, &lt;code&gt;root&lt;/code&gt; and &lt;code&gt;guest&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Authentication Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/authentication/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Backward Compatibility</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/backward_compatibility/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/backward_compatibility/</guid><description>&lt;p&gt;The main goal of etcd 2.0 release is to improve cluster safety around bootstrapping and dynamic reconfiguration. To do this, we deprecated the old error-prone APIs and provide a new set of APIs.&lt;/p&gt;
&lt;p&gt;The other main focus of this release was a more reliable Raft implementation, but as this change is internal it should not have any notable effects to users.&lt;/p&gt;
&lt;h2 id="command-line-flags-changes"&gt;Command Line Flags Changes&lt;/h2&gt;
&lt;p&gt;The major flag changes are to mostly related to bootstrapping. The &lt;code&gt;initial-*&lt;/code&gt; flags provide an improved way to specify the required criteria to start the cluster. The advertised URLs now support a list of values instead of a single value, which allows etcd users to gracefully migrate to the new set of IANA-assigned ports (2379/client and 2380/peers) while maintaining backward compatibility with the old ports.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.1.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/boom" target="_blank" rel="noopener"&gt;&lt;code&gt;boom&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-1-0-alpha-benchmarks"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v2.2.0-rc-memory</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;For most cases, the etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Benchmarking etcd v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/performance/#benchmarks"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>Benchmarking etcd v3-demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="../../op-guide/performance/#benchmarks"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>Client feature matrix</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/client-feature-matrix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/client-feature-matrix/</guid><description>&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Feature&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;clientv3-grpc1.14&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;jetcd v0.0.2&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Automatic retry&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Retry backoff&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Automatic failover&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Load balancer&lt;/td&gt;
 &lt;td&gt;Round-Robin&lt;/td&gt;
 &lt;td&gt;·&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;WithRequireLeader(context.Context)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TLS&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;SetEndpoints&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Sync&lt;/code&gt; endpoints&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;AutoSyncInterval&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;KeepAlive&lt;/code&gt; ping&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;MaxCallSendMsgSize&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;MaxCallRecvMsgSize&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;RejectOldCluster&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="kv"&gt;KV&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Feature&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;clientv3-grpc1.14&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;jetcd v0.0.2&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Put&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Get&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Delete&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Compact&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Do(Op)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Txn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For details, see the &lt;a href="https://pkg.go.dev/go.etcd.io/etcd/clientv3#KV" target="_blank" rel="noopener"&gt;KV API reference&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, you might not know the IPs of your cluster members ahead of time. In these cases, you can bootstrap an etcd cluster with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest you read &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="../runtime-configuration/"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="../runtime-reconf-design/"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clustering Guide</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/clustering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/clustering/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Starting an etcd cluster statically requires that each member knows another in the cluster. In a number of cases, the IPs of the cluster members may be unknown ahead of time. In these cases, the etcd cluster can be bootstrapped with the help of a discovery service.&lt;/p&gt;
&lt;p&gt;Once an etcd cluster is up and running, adding or removing members is done via &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-configuration"&gt;runtime reconfiguration&lt;/a&gt;. To better understand the design behind runtime reconfiguration, we suggest reading &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-reconf-design"&gt;the runtime configuration design document&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Configuration flags</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/configuration/</guid><description>&lt;p&gt;etcd is configurable through command-line flags and environment variables. Options set on the command line take precedence over those from the environment.&lt;/p&gt;
&lt;p&gt;The format of environment variable for flag &lt;code&gt;--my-flag&lt;/code&gt; is &lt;code&gt;ETCD_MY_FLAG&lt;/code&gt;. It applies to all flags.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt" target="_blank" rel="noopener"&gt;official etcd ports&lt;/a&gt; are 2379 for client requests and 2380 for peer communication. The etcd ports can be set to accept TLS traffic, non-TLS traffic, or both TLS and non-TLS traffic.&lt;/p&gt;
&lt;p&gt;To start etcd automatically using custom settings at startup in Linux, using a &lt;a href="http://freedesktop.org/wiki/Software/systemd/" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; unit is highly recommended.&lt;/p&gt;</description></item><item><title>Configuration flags</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/configuration/</guid><description>&lt;p&gt;etcd is configurable through command-line flags and environment variables. Options set on the command line take precedence over those from the environment.&lt;/p&gt;
&lt;p&gt;The format of environment variable for flag &lt;code&gt;--my-flag&lt;/code&gt; is &lt;code&gt;ETCD_MY_FLAG&lt;/code&gt;. It applies to all flags.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt" target="_blank" rel="noopener"&gt;official etcd ports&lt;/a&gt; are 2379 for client requests and 2380 for peer communication. The etcd ports can be set to accept TLS traffic, non-TLS traffic, or both TLS and non-TLS traffic.&lt;/p&gt;
&lt;p&gt;To start etcd automatically using custom settings at startup in Linux, using a &lt;a href="http://freedesktop.org/wiki/Software/systemd/" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; unit is highly recommended.&lt;/p&gt;</description></item><item><title>Configuration flags</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/configuration/</guid><description>&lt;p&gt;etcd is configurable through a configuration file, various command-line flags, and environment variables.&lt;/p&gt;
&lt;p&gt;A reusable configuration file is a YAML file made with name and value of one or more command-line flags described below. In order to use this file, specify the file path as a value to the &lt;code&gt;--config-file&lt;/code&gt; flag. The &lt;a href="https://github.com/etcd-io/etcd/blob/release-3.4/etcd.conf.yml.sample" target="_blank" rel="noopener"&gt;sample configuration file&lt;/a&gt; can be used as a starting point to create a new configuration file as needed.&lt;/p&gt;
&lt;p&gt;Options set on the command line take precedence over those from the environment. If a configuration file is provided, other command line flags and environment variables will be ignored.
For example, &lt;code&gt;etcd --config-file etcd.conf.yml.sample --data-dir /tmp&lt;/code&gt; will ignore the &lt;code&gt;--data-dir&lt;/code&gt; flag.&lt;/p&gt;</description></item><item><title>Configuration Flags</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/configuration/</guid><description>&lt;p&gt;etcd is configurable through command-line flags and environment variables. Options set on the command line take precedence over those from the environment.&lt;/p&gt;
&lt;p&gt;The format of environment variable for flag &lt;code&gt;--my-flag&lt;/code&gt; is &lt;code&gt;ETCD_MY_FLAG&lt;/code&gt;. It applies to all flags.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt" target="_blank" rel="noopener"&gt;official etcd ports&lt;/a&gt; are 2379 for client requests, and 2380 for peer communication. Some legacy code and documentation still references ports 4001 and 7001, but all new etcd use and discussion should adopt the assigned ports.&lt;/p&gt;</description></item><item><title>Container Linux with systemd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/container-linux-systemd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/container-linux-systemd/</guid><description>&lt;p&gt;The following guide shows how to run etcd with &lt;a href="https://github.com/systemd/systemd" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; under &lt;a href="https://coreos.com/os/docs/latest" target="_blank" rel="noopener"&gt;Container Linux&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="provisioning-an-etcd-cluster"&gt;Provisioning an etcd cluster&lt;/h2&gt;
&lt;p&gt;Cluster bootstrapping in Container Linux is simplest with &lt;a href="https://github.com/coreos/docs/blob/master/ignition/what-is-ignition.md" target="_blank" rel="noopener"&gt;Ignition&lt;/a&gt;; &lt;code&gt;coreos-metadata.service&lt;/code&gt; dynamically fetches the machine&amp;rsquo;s IP for discovery. Note that etcd&amp;rsquo;s discovery service protocol is only meant for bootstrapping, and cannot be used with runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/coreos/container-linux-config-transpiler" target="_blank" rel="noopener"&gt;Container Linux Config Transpiler&lt;/a&gt; compiles etcd configuration files into Ignition configuration files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;etcd&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;version&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3.2.0&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;s1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;data_dir&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/var/lib/etcd&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;advertise_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PUBLIC_IPV4}:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;initial_advertise_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://0.0.0.0:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;discovery&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;https://discovery.etcd.io/&amp;lt;token&amp;gt;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ct&lt;/code&gt; would produce the following Ignition Config:&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generates a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generates a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Data model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/data_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/data_model/</guid><description>&lt;p&gt;etcd is designed to reliably store infrequently updated data and provide reliable watch queries. etcd exposes previous versions of key-value pairs to support inexpensive snapshots and watch history events (“time travel queries”). A persistent, multi-version, concurrency-control data model is a good fit for these use cases.&lt;/p&gt;
&lt;p&gt;etcd stores data in a multiversion &lt;a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank" rel="noopener"&gt;persistent&lt;/a&gt; key-value store. The persistent key-value store preserves the previous version of a key-value pair when its value is superseded with new data. The key-value store is effectively immutable; its operations do not update the structure in-place, but instead always generate a new updated structure. All past versions of keys are still accessible and watchable after modification. To prevent the data store from growing indefinitely over time and from maintaining old versions, the store may be compacted to shed the oldest versions of superseded data.&lt;/p&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="set-up-a-cluster"&gt;Set up a cluster&lt;/h2&gt;
&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"/&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TOKEN=token-01
CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# For machine 1
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 2
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 3
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="set-up-a-cluster"&gt;Set up a cluster&lt;/h2&gt;
&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"/&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TOKEN=token-01
CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# For machine 1
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 2
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 3
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>Demo</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/demo/</guid><description>&lt;p&gt;This series of examples shows the basic procedures for working with an etcd cluster.&lt;/p&gt;
&lt;h2 id="set-up-a-cluster"&gt;Set up a cluster&lt;/h2&gt;
&lt;img src="https://storage.googleapis.com/etcd/demo/01_etcd_clustering_2016051001.gif" alt="01_etcd_clustering_2016050601"/&gt;
&lt;p&gt;On each etcd node, specify the cluster members:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TOKEN=token-01
CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run this on each machine:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# For machine 1
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 2
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

# For machine 3
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
etcd --data-dir=data.etcd --name ${THIS_NAME} \
	--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
	--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
	--initial-cluster ${CLUSTER} \
	--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or use our public discovery service:&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform cluster of new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration/#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform cluster of new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-the-cluster-safe"&gt;Two phase config changes keep the cluster safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-configuration#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member, first inform the cluster of the new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Design of Runtime Reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/runtime-reconf-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/runtime-reconf-design/</guid><description>&lt;p&gt;Runtime reconfiguration is one of the hardest and most error prone features in a distributed system, especially in a consensus based system like etcd.&lt;/p&gt;
&lt;p&gt;Read on to learn about the design of etcd&amp;rsquo;s runtime reconfiguration commands and how we tackled these problems.&lt;/p&gt;
&lt;h2 id="two-phase-config-changes-keep-you-safe"&gt;Two Phase Config Changes Keep you Safe&lt;/h2&gt;
&lt;p&gt;In etcd, every runtime reconfiguration has to go through &lt;a href="../runtime-configuration#add-a-new-member"&gt;two phases&lt;/a&gt; for safety reasons. For example, to add a member you need to first inform cluster of new configuration and then start the new member.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Disaster recovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/recovery/</guid><description>&lt;p&gt;etcd is designed to withstand machine failures. An etcd cluster automatically recovers from temporary failures (e.g., machine reboots) and tolerates up to &lt;em&gt;(N-1)/2&lt;/em&gt; permanent failures for a cluster of N members. When a member permanently fails, whether due to hardware failure or disk corruption, it loses access to the cluster. If the cluster permanently loses more than &lt;em&gt;(N-1)/2&lt;/em&gt; members then it disastrously fails, irrevocably losing quorum. Once quorum is lost, the cluster cannot reach consensus and therefore cannot continue accepting updates.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-internal/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-internal/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Discovery Service Protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>Error Code</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/errorcode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/errorcode/</guid><description>&lt;p&gt;This document describes the error code used in key space &amp;lsquo;/v2/keys&amp;rsquo;. Feel free to import &amp;lsquo;&lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/error" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/tree/v2.3.8/error&lt;/a&gt;' to use.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s categorized into four groups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command Related Error&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;code&lt;/th&gt;
 &lt;th&gt;strerror&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeKeyNotFound&lt;/td&gt;
 &lt;td&gt;100&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Key not found&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeTestFailed&lt;/td&gt;
 &lt;td&gt;101&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Compare failed&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeNotFile&lt;/td&gt;
 &lt;td&gt;102&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Not a file&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeNotDir&lt;/td&gt;
 &lt;td&gt;104&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Not a directory&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeNodeExist&lt;/td&gt;
 &lt;td&gt;105&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Key already exists&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeRootROnly&lt;/td&gt;
 &lt;td&gt;107&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Root is read only&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeDirNotEmpty&lt;/td&gt;
 &lt;td&gt;108&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Directory not empty&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Post Form Related Error&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;code&lt;/th&gt;
 &lt;th&gt;strerror&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodePrevValueRequired&lt;/td&gt;
 &lt;td&gt;201&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;PrevValue is Required in POST form&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeTTLNaN&lt;/td&gt;
 &lt;td&gt;202&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;The given TTL in POST form is not a number&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeIndexNaN&lt;/td&gt;
 &lt;td&gt;203&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;The given index in POST form is not a number&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeInvalidField&lt;/td&gt;
 &lt;td&gt;209&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Invalid field&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeInvalidForm&lt;/td&gt;
 &lt;td&gt;210&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Invalid POST form&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Raft Related Error&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;code&lt;/th&gt;
 &lt;th&gt;strerror&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeRaftInternal&lt;/td&gt;
 &lt;td&gt;300&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Raft Internal Error&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeLeaderElect&lt;/td&gt;
 &lt;td&gt;301&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;During Leader Election&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;etcd Related Error&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;code&lt;/th&gt;
 &lt;th&gt;strerror&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeWatcherCleared&lt;/td&gt;
 &lt;td&gt;400&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;watcher is cleared due to etcd recovery&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EcodeEventIndexCleared&lt;/td&gt;
 &lt;td&gt;401&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;The event in requested index is outdated and cleared&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>etcd 2.1.0-alpha benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/boom" target="_blank" rel="noopener"&gt;boom HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>etcd 2.2.0-rc benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd 2.2.0-rc memory benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;At most cases, etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, you need to decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>etcd 3 demo benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="https://github.com/etcd-io/etcd/tree/master/tools/benchmark" target="_blank" rel="noopener"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>etcd API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/api/</guid><description>&lt;h2 id="running-a-single-machine-cluster"&gt;Running a Single Machine Cluster&lt;/h2&gt;
&lt;p&gt;These examples will use a single member cluster to show you the basics of the etcd REST API.
Let&amp;rsquo;s start etcd:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./bin/etcd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will bring up etcd listening on the IANA assigned ports and listening on localhost.
The IANA assigned ports for etcd are 2379 for client communication and 2380 for server-to-server communication.&lt;/p&gt;
&lt;h2 id="getting-the-etcd-version"&gt;Getting the etcd version&lt;/h2&gt;
&lt;p&gt;The etcd version of a specific instance can be obtained from the &lt;code&gt;/version&lt;/code&gt; endpoint.&lt;/p&gt;</description></item><item><title>etcd API reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_reference_v3/</guid><description>&lt;h3 id="etcd-api-reference"&gt;etcd API Reference&lt;/h3&gt;
&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-auth-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash returns the hash of the local KV state for consistency checking purpose. This is designed for testing; do not use this in production when there are ongoing transactions.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;Empty field.&lt;/p&gt;</description></item><item><title>etcd API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-auth-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;for grpc-gateway&lt;/p&gt;</description></item><item><title>etcd API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-auth-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;Empty field.&lt;/p&gt;</description></item><item><title>etcd concurrency API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;h3 id="etcd-concurrency-api-reference"&gt;etcd concurrency API Reference&lt;/h3&gt;
&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-lock-etcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquistion; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-etcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>etcd concurrency API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-lock-etcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-etcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints. When the gateway starts, it randomly picks one etcd server endpoint and forwards all requests to that endpoint. This endpoint serves all requests until the gateway detects a network failure. If the gateway detects an endpoint failure, it will switch to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/gateway/</guid><description>&lt;h2 id="what-is-etcd-gateway"&gt;What is etcd gateway&lt;/h2&gt;
&lt;p&gt;etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses.&lt;/p&gt;
&lt;p&gt;The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>etcd v2.1.0-alpha benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-1-0-alpha-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-1-0-alpha-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.1.0 alpha&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd members, each runs on a single machine&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine and use the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;hey HTTP benchmark tool&lt;/a&gt; to send requests to each etcd member. Check the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark hacking guide&lt;/a&gt; for detailed instructions.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1534&lt;/td&gt;
 &lt;td&gt;0.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10125&lt;/td&gt;
 &lt;td&gt;9.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;13892&lt;/td&gt;
 &lt;td&gt;27.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1530&lt;/td&gt;
 &lt;td&gt;0.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;10106&lt;/td&gt;
 &lt;td&gt;10.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;14667&lt;/td&gt;
 &lt;td&gt;27.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24200&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33300&lt;/td&gt;
 &lt;td&gt;11.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;24800&lt;/td&gt;
 &lt;td&gt;3.9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;33000&lt;/td&gt;
 &lt;td&gt;11.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="writing-one-single-key"&gt;writing one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;target etcd server&lt;/th&gt;
 &lt;th&gt;write QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;60&lt;/td&gt;
 &lt;td&gt;21.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1742&lt;/td&gt;
 &lt;td&gt;46.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;3982&lt;/td&gt;
 &lt;td&gt;90.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;58&lt;/td&gt;
 &lt;td&gt;20.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;1770&lt;/td&gt;
 &lt;td&gt;47.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;leader only&lt;/td&gt;
 &lt;td&gt;4157&lt;/td&gt;
 &lt;td&gt;105.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1028&lt;/td&gt;
 &lt;td&gt;123.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3260&lt;/td&gt;
 &lt;td&gt;123.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;1033&lt;/td&gt;
 &lt;td&gt;121.5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;all servers&lt;/td&gt;
 &lt;td&gt;3061&lt;/td&gt;
 &lt;td&gt;119.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>etcd v2.2.0 benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical Machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted as etcd data directory&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0 members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Bootstrap another machine, outside of the etcd cluster, and run the &lt;a href="https://github.com/rakyll/hey" target="_blank" rel="noopener"&gt;&lt;code&gt;hey&lt;/code&gt; HTTP benchmark tool&lt;/a&gt; with a connection reuse patch to send requests to each etcd cluster member. See the &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark" target="_blank" rel="noopener"&gt;benchmark instructions&lt;/a&gt; for the patch and the steps to reproduce our procedures.&lt;/p&gt;</description></item><item><title>etcd v2.2.0-rc benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-rc-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-rc-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;3 etcd 2.2.0-rc members, each runs on a single machine.&lt;/p&gt;
&lt;p&gt;Detailed versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, we use 3 etcd 2.1.0 alpha-stage members to form cluster to get base performance. etcd&amp;rsquo;s commit head is at &lt;a href="https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144" target="_blank" rel="noopener"&gt;c7146bd5&lt;/a&gt;, which is the same as the one that we use in &lt;a href="../etcd-2-1-0-alpha-benchmarks/"&gt;etcd 2.1 benchmark&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd v2.2.0-rc-memory benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-2-2-0-rc-memory-benchmarks/</guid><description>&lt;h2 id="physical-machine"&gt;Physical machine&lt;/h2&gt;
&lt;p&gt;GCE n1-standard-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;7.5 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd"&gt;etcd&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Start 3-member etcd cluster, each of which uses 2 cores.&lt;/p&gt;
&lt;p&gt;The length of key name is always 64 bytes, which is a reasonable length of average key bytes.&lt;/p&gt;
&lt;h2 id="memory-maximal-usage"&gt;Memory Maximal Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;etcd may use maximal memory if one follower is dead and the leader keeps sending snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max RSS&lt;/code&gt; is the maximal memory usage recorded in 3 runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number&lt;/th&gt;
 &lt;th&gt;data size(MB)&lt;/th&gt;
 &lt;th&gt;max RSS(MB)&lt;/th&gt;
 &lt;th&gt;max RSS/data rate on leader&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;433&lt;/td&gt;
 &lt;td&gt;72x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;659&lt;/td&gt;
 &lt;td&gt;54x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;1466&lt;/td&gt;
 &lt;td&gt;61x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;50000&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;1253&lt;/td&gt;
 &lt;td&gt;26x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;100000&lt;/td&gt;
 &lt;td&gt;96&lt;/td&gt;
 &lt;td&gt;2344&lt;/td&gt;
 &lt;td&gt;24x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;200000&lt;/td&gt;
 &lt;td&gt;192&lt;/td&gt;
 &lt;td&gt;4361&lt;/td&gt;
 &lt;td&gt;22x&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="data-size-threshold"&gt;Data Size Threshold&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;When etcd reaches data size threshold, it may trigger leader election easily and drop part of proposals.&lt;/li&gt;
&lt;li&gt;At most cases, etcd cluster should work smoothly if it doesn&amp;rsquo;t hit the threshold. If it doesn&amp;rsquo;t work well due to insufficient resources, you need to decrease its data size.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;value bytes&lt;/th&gt;
 &lt;th&gt;key number limitation&lt;/th&gt;
 &lt;th&gt;suggested data size threshold(MB)&lt;/th&gt;
 &lt;th&gt;consumed RSS(MB)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;128&lt;/td&gt;
 &lt;td&gt;400K&lt;/td&gt;
 &lt;td&gt;48&lt;/td&gt;
 &lt;td&gt;2400&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;td&gt;300K&lt;/td&gt;
 &lt;td&gt;292&lt;/td&gt;
 &lt;td&gt;6500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>etcd v3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/rfc/v3api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/rfc/v3api/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The etcd v3 API is designed to give users a more efficient and cleaner abstraction compared to etcd v2. There are a number of semantic and protocol changes in this new API.&lt;/p&gt;
&lt;p&gt;To prove out the design of the v3 API the team has also built &lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/contrib/recipes" target="_blank" rel="noopener"&gt;a number of example recipes&lt;/a&gt;, there is a &lt;a href="https://www.youtube.com/watch?v=fj-2RY-3yVU&amp;amp;feature=youtu.be&amp;amp;t=590" target="_blank" rel="noopener"&gt;video discussing these recipes too&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Flatten binary key-value space&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep the event history until compaction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;access to old version of keys&lt;/li&gt;
&lt;li&gt;user controlled history compaction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support range query&lt;/p&gt;</description></item><item><title>etcd v3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/rfc/v3api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/rfc/v3api/</guid><description>&lt;p&gt;The etcd v3 API is designed to give users a more efficient and cleaner abstraction compared to etcd v2. There are a number of semantic and protocol changes in this new API.&lt;/p&gt;
&lt;p&gt;To prove out the design of the v3 API the team has also built &lt;a href="https://github.com/etcd-io/etcd/tree/v3.1.20/contrib/recipes" target="_blank" rel="noopener"&gt;a number of example recipes&lt;/a&gt;, there is a &lt;a href="https://www.youtube.com/watch?v=fj-2RY-3yVU&amp;amp;feature=youtu.be&amp;amp;t=590" target="_blank" rel="noopener"&gt;video discussing these recipes too&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Flatten binary key-value space&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep the event history until compaction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;access to old version of keys&lt;/li&gt;
&lt;li&gt;user controlled history compaction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support range query&lt;/p&gt;</description></item><item><title>etcd v3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/rfc/v3api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/rfc/v3api/</guid><description>&lt;p&gt;The etcd v3 API is designed to give users a more efficient and cleaner abstraction compared to etcd v2. There are a number of semantic and protocol changes in this new API.&lt;/p&gt;
&lt;p&gt;To prove out the design of the v3 API the team has also built &lt;a href="https://github.com/etcd-io/etcd/tree/v3.2.32/contrib/recipes" target="_blank" rel="noopener"&gt;a number of example recipes&lt;/a&gt;, there is a &lt;a href="https://www.youtube.com/watch?v=fj-2RY-3yVU&amp;amp;feature=youtu.be&amp;amp;t=590" target="_blank" rel="noopener"&gt;video discussing these recipes too&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Flatten binary key-value space&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep the event history until compaction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;access to old version of keys&lt;/li&gt;
&lt;li&gt;user controlled history compaction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support range query&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/auth_design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/auth_design/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd v3 authentication design</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/auth_design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/auth_design/</guid><description>&lt;h2 id="why-not-reuse-the-v2-auth-system"&gt;Why not reuse the v2 auth system?&lt;/h2&gt;
&lt;p&gt;The v3 protocol uses gRPC as its transport instead of a RESTful interface like v2. This new protocol provides an opportunity to iterate on and improve the v2 design. For example, v3 auth has connection based authentication, rather than v2&amp;rsquo;s slower per-request authentication. Additionally, v2 auth&amp;rsquo;s semantics tend to be unwieldy in practice with respect to reasoning about consistency, which will be described in the next sections. For v3, there is a well-defined description and implementation of the authentication mechanism which fixes the deficiencies in the v2 auth system.&lt;/p&gt;</description></item><item><title>etcd v3-demo benchmarks</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-3-demo-benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-3-demo-benchmarks/</guid><description>&lt;h2 id="physical-machines"&gt;Physical machines&lt;/h2&gt;
&lt;p&gt;GCE n1-highcpu-2 machine type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1x dedicated local SSD mounted under /var/lib/etcd&lt;/li&gt;
&lt;li&gt;1x dedicated slow disk for the OS&lt;/li&gt;
&lt;li&gt;1.8 GB memory&lt;/li&gt;
&lt;li&gt;2x CPUs&lt;/li&gt;
&lt;li&gt;etcd version 2.2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="etcd-cluster"&gt;etcd Cluster&lt;/h2&gt;
&lt;p&gt;1 etcd member running in v3 demo mode&lt;/p&gt;
&lt;h2 id="testing"&gt;Testing&lt;/h2&gt;
&lt;p&gt;Use &lt;a href="../../op-guide/performance/#benchmarks"&gt;etcd v3 benchmark tool&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;h3 id="reading-one-single-key"&gt;reading one single key&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;key size in bytes&lt;/th&gt;
 &lt;th&gt;number of clients&lt;/th&gt;
 &lt;th&gt;read QPS&lt;/th&gt;
 &lt;th&gt;90th Percentile Latency (ms)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2716&lt;/td&gt;
 &lt;td&gt;0.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;16623&lt;/td&gt;
 &lt;td&gt;6.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;16622&lt;/td&gt;
 &lt;td&gt;21.7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The performance is nearly the same as the one with empty server handler.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istibuted systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>etcd versus other key-value stores</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd is designed as a general substrate for large scale distributed systems. These are systems that will never tolerate split-brain operation and are willing to sacrifice availability to achieve this end. etcd stores metadata in a consistent and fault-tolerant way. An etcd cluster is meant to provide key-value storage with best of class stability, reliability, scalability and performance.&lt;/p&gt;</description></item><item><title>etcd3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/api/</guid><description>&lt;p&gt;NOTE: this doc is not finished!&lt;/p&gt;
&lt;h2 id="response-header"&gt;Response header&lt;/h2&gt;
&lt;p&gt;All Responses from etcd API have a &lt;a href="https://github.com/etcd-io/etcd/blob/v3.1.20/etcdserver/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;response header&lt;/a&gt; attached. The response header includes the metadata of the response.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-proto" data-lang="proto"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;message&lt;/span&gt; &lt;span style="color:#000"&gt;ResponseHeader&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;uint64&lt;/span&gt; &lt;span style="color:#000"&gt;cluster_id&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;;&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;uint64&lt;/span&gt; &lt;span style="color:#000"&gt;member_id&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;2&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;;&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;int64&lt;/span&gt; &lt;span style="color:#000"&gt;revision&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;;&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;uint64&lt;/span&gt; &lt;span style="color:#000"&gt;raft_term&lt;/span&gt; &lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;4&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;;&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#a40000"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Cluster_ID - the ID of the cluster that generates the response&lt;/li&gt;
&lt;li&gt;Member_ID - the ID of the member that generates the response&lt;/li&gt;
&lt;li&gt;Revision - the revision of the key-value store when the response is generated&lt;/li&gt;
&lt;li&gt;Raft_Term - the Raft term of the member when the response is generated&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An application may read the Cluster_ID (Member_ID) field to ensure it is communicating with the intended cluster (member).&lt;/p&gt;</description></item><item><title>etcd3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the etcd3 API&amp;rsquo;s central design. It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls. All etcd3 API&amp;rsquo;s are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/v3.2.32/etcdserver/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server. A full listing of all etcd RPCs are documented in markdown in the &lt;a href="../../dev-guide/api_reference_v3/"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>etcd3 API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/api/</guid><description>&lt;p&gt;This document is meant to give an overview of the etcd3 API&amp;rsquo;s central design. It is by no means all encompassing, but intended to focus on the basic ideas needed to understand etcd without the distraction of less common API calls. All etcd3 API&amp;rsquo;s are defined in &lt;a href="https://github.com/etcd-io/etcd/blob/v3.3.25/etcdserver/etcdserverpb/rpc.proto" target="_blank" rel="noopener"&gt;gRPC services&lt;/a&gt;, which categorize remote procedure calls (RPCs) understood by the etcd server. A full listing of all etcd RPCs are documented in markdown in the &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3"&gt;gRPC API listing&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Experimental APIs and features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/experimental_apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/experimental_apis/</guid><description>&lt;p&gt;For the most part, the etcd project is stable, but we are still moving fast! We believe in the release fast philosophy. We want to get early feedback on features still in development and stabilizing. Thus, there are, and will be more, experimental features and APIs. We plan to improve these features based on the early feedback from the community, or abandon them if there is little interest, in the next few releases. Please do not rely on any experimental features or APIs in production environment.&lt;/p&gt;</description></item><item><title>Experimental APIs and features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/experimental_apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/experimental_apis/</guid><description>&lt;p&gt;For the most part, the etcd project is stable, but we are still moving fast! We believe in the release fast philosophy. We want to get early feedback on features still in development and stabilizing. Thus, there are, and will be more, experimental features and APIs. We plan to improve these features based on the early feedback from the community, or abandon them if there is little interest, in the next few releases. Please do not rely on any experimental features or APIs in production environment.&lt;/p&gt;</description></item><item><title>Experimental APIs and features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/experimental_apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/experimental_apis/</guid><description>&lt;p&gt;For the most part, the etcd project is stable, but we are still moving fast! We believe in the release fast philosophy. We want to get early feedback on features still in development and stabilizing. Thus, there are, and will be more, experimental features and APIs. We plan to improve these features based on the early feedback from the community, or abandon them if there is little interest, in the next few releases. Please do not rely on any experimental features or APIs in production environment.&lt;/p&gt;</description></item><item><title>Failure modes</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/faq/</guid><description>&lt;h2 id="1-why-can-an-etcd-client-read-an-old-version-of-data-when-a-majority-of-the-etcd-cluster-members-are-down"&gt;1) Why can an etcd client read an old version of data when a majority of the etcd cluster members are down?&lt;/h2&gt;
&lt;p&gt;In situations where a client connects to a minority, etcd
favors by default availability over consistency. This means that even though
data might be “out of date”, it is still better to return something versus
nothing.&lt;/p&gt;
&lt;p&gt;In order to confirm that a read is up to date with a majority of the cluster,
the client can use the &lt;code&gt;quorum=true&lt;/code&gt; parameter on reads of keys. This means
that a majority of the cluster is checked on reads before returning the data,
otherwise the read will timeout and fail.&lt;/p&gt;</description></item><item><title>FreeBS</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/platforms/freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/platforms/freebsd/</guid><description>&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can
be installed either via packages or ports system. Their versions have been recently
updated to 0.2.0 so now you can enjoy using etcd and etcdctl on FreeBSD 10.0 (RC4 as
of now) and 9.x where they have been tested. They might also work when installed from
ports on earlier versions of FreeBSD, but your mileage may vary.&lt;/p&gt;</description></item><item><title>FreeBSD</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/platforms/freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/platforms/freebsd/</guid><description>&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can
be installed either via packages or ports system. Their versions have been recently
updated to 0.2.0 so now you can enjoy using etcd and etcdctl on FreeBSD 10.0 (RC4 as
of now) and 9.x where they have been tested. They might also work when installed from
ports on earlier versions of FreeBSD, but your mileage may vary.&lt;/p&gt;</description></item><item><title>FreeBSD</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/freebsd/</guid><description>&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can be installed either via packages or ports system. Their versions have been recently updated to 0.2.0 so now etcd and etcdctl can be enjoyed on FreeBSD 10.0 (RC4 as of now) and 9.x, where they have been tested. They might also work when installed from ports on earlier versions of FreeBSD, but it is untested; caveat emptor.&lt;/p&gt;</description></item><item><title>FreeBSD</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/platforms/freebsd/</guid><description>&lt;p&gt;Starting with version 0.1.2 both etcd and etcdctl have been ported to FreeBSD and can be installed either via packages or ports system. Their versions have been recently updated to 0.2.0 so now etcd and etcdctl can be enjoyed on FreeBSD 10.0 (RC4 as of now) and 9.x, where they have been tested. They might also work when installed from ports on earlier versions of FreeBSD, but it is untested; caveat emptor.&lt;/p&gt;</description></item><item><title>Frequently Asked Questions (FAQ)</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/faq/</guid><description>&lt;h3 id="etcd-general"&gt;etcd, general&lt;/h3&gt;
&lt;h4 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;
&lt;h3 id="configuration"&gt;Configuration&lt;/h3&gt;
&lt;h4 id="what-is-the-difference-between-advertise-urls-and-listen-urls"&gt;What is the difference between advertise-urls and listen-urls?&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;listen-urls&lt;/code&gt; specifies the local addresses etcd server binds to for accepting incoming connections. To listen on a port for all interfaces, specify &lt;code&gt;0.0.0.0&lt;/code&gt; as the listen IP address.&lt;/p&gt;</description></item><item><title>Frequently Asked Questions (FAQ)</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/faq/</guid><description>&lt;h3 id="etcd-general"&gt;etcd, general&lt;/h3&gt;
&lt;h4 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;
&lt;h3 id="configuration"&gt;Configuration&lt;/h3&gt;
&lt;h4 id="what-is-the-difference-between-listen-clientpeer-urls-advertise-client-urls-or-initial-advertise-peer-urls"&gt;What is the difference between listen-&amp;lt;client,peer&amp;gt;-urls, advertise-client-urls or initial-advertise-peer-urls?&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;listen-client-urls&lt;/code&gt; and &lt;code&gt;listen-peer-urls&lt;/code&gt; specify the local addresses etcd server binds to for accepting incoming connections. To listen on a port for all interfaces, specify &lt;code&gt;0.0.0.0&lt;/code&gt; as the listen IP address.&lt;/p&gt;</description></item><item><title>Frequently Asked Questions (FAQ)</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/faq/</guid><description>&lt;h2 id="etcd-general"&gt;etcd, general&lt;/h2&gt;
&lt;h3 id="do-clients-have-to-send-requests-to-the-etcd-leader"&gt;Do clients have to send requests to the etcd leader?&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://raft.github.io/raft.pdf" target="_blank" rel="noopener"&gt;Raft&lt;/a&gt; is leader-based; the leader handles all client requests which need cluster consensus. However, the client does not need to know which node is the leader. Any request that requires consensus sent to a follower is automatically forwarded to the leader. Requests that do not require consensus (e.g., serialized reads) can be processed by any cluster member.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;h3 id="what-is-the-difference-between-listen-clientpeer-urls-advertise-client-urls-or-initial-advertise-peer-urls"&gt;What is the difference between listen-&amp;lt;client,peer&amp;gt;-urls, advertise-client-urls or initial-advertise-peer-urls?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;listen-client-urls&lt;/code&gt; and &lt;code&gt;listen-peer-urls&lt;/code&gt; specify the local addresses etcd server binds to for accepting incoming connections. To listen on a port for all interfaces, specify &lt;code&gt;0.0.0.0&lt;/code&gt; as the listen IP address.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="node"&gt;Node&lt;/h2&gt;
&lt;p&gt;Node is an instance of raft state machine.&lt;/p&gt;
&lt;p&gt;It has a unique identification, and records other nodes&amp;rsquo; progress internally when it is the leader.&lt;/p&gt;
&lt;h2 id="member"&gt;Member&lt;/h2&gt;
&lt;p&gt;Member is an instance of etcd. It hosts a node, and provides service to clients.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/glossary/</guid><description>&lt;p&gt;This document defines the various terms used in etcd documentation, command line and source code.&lt;/p&gt;
&lt;h2 id="alarm"&gt;Alarm&lt;/h2&gt;
&lt;p&gt;The etcd server raises an alarm whenever the cluster needs operator intervention to remain reliable.&lt;/p&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Authentication manages user access permissions for etcd resources.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;/h2&gt;
&lt;p&gt;A client connects to the etcd cluster to issue service requests such as fetching key-value pairs, writing data, or watching for updates.&lt;/p&gt;
&lt;h2 id="cluster"&gt;Cluster&lt;/h2&gt;
&lt;p&gt;Cluster consists of several members.&lt;/p&gt;
&lt;p&gt;The node in each member follows raft consensus protocol to replicate logs. Cluster receives proposals from members, commits them and apply to local store.&lt;/p&gt;</description></item><item><title>gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="http://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;grpc-gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using grpc-gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON.&lt;/p&gt;</description></item><item><title>gRPC Gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="http://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;grpc-gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using grpc-gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="../api_reference_v3/"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;github.com/coreos/etcd/clientv3&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;github.com/coreos/etcd/clientv3/naming&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;google.golang.org/grpc&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;clientv3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewFromURL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;http://localhost:2379&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;GRPCResolver&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#000"&gt;Client&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;RoundRobin&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;conn&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;Dial&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;my-service&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBalancer&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;))&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="managing-service-endpoints"&gt;Managing service endpoints&lt;/h2&gt;
&lt;p&gt;The etcd resolver treats all keys under the prefix of the resolution target following a &amp;ldquo;/&amp;rdquo; (e.g., &amp;ldquo;my-service/&amp;rdquo;) with JSON-encoded go-grpc &lt;code&gt;naming.Update&lt;/code&gt; values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;github.com/coreos/etcd/clientv3&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;github.com/coreos/etcd/clientv3/naming&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;google.golang.org/grpc&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;clientv3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewFromURL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;http://localhost:2379&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;GRPCResolver&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#000"&gt;Client&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;RoundRobin&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;conn&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;Dial&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;my-service&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBalancer&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;))&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="managing-service-endpoints"&gt;Managing service endpoints&lt;/h2&gt;
&lt;p&gt;The etcd resolver treats all keys under the prefix of the resolution target following a &amp;ldquo;/&amp;rdquo; (e.g., &amp;ldquo;my-service/&amp;rdquo;) with JSON-encoded go-grpc &lt;code&gt;naming.Update&lt;/code&gt; values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3/naming&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;google.golang.org/grpc&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;clientv3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewFromURL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;http://localhost:2379&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;GRPCResolver&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#000"&gt;Client&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;RoundRobin&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;conn&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;Dial&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;my-service&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBalancer&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBlock&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="managing-service-endpoints"&gt;Managing service endpoints&lt;/h2&gt;
&lt;p&gt;The etcd resolver treats all keys under the prefix of the resolution target following a &amp;ldquo;/&amp;rdquo; (e.g., &amp;ldquo;my-service/&amp;rdquo;) with JSON-encoded go-grpc &lt;code&gt;naming.Update&lt;/code&gt; values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/grpc_proxy/</guid><description>&lt;p&gt;&lt;em&gt;This is an alpha feature, we are looking for early feedback.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>gRPC proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/grpc_proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/grpc_proxy/</guid><description>&lt;p&gt;The gRPC proxy is a stateless etcd reverse proxy operating at the gRPC layer (L7). The proxy is designed to reduce the total processing load on the core etcd cluster. For horizontal scalability, it coalesces watch and lease API requests. To protect the cluster against abusive clients, it caches key range requests.&lt;/p&gt;
&lt;p&gt;The gRPC proxy supports multiple etcd server endpoints. When the proxy starts, it randomly picks one etcd server endpoint to use. This endpoint serves all requests until the proxy detects an endpoint failure. If the gRPC proxy detects an endpoint failure, it switches to a different endpoint, if available, to hide failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Hardware recommendations</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/hardware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/hardware/</guid><description>&lt;p&gt;etcd usually runs well with limited resources for development or testing purposes; it’s common to develop with etcd on a laptop or a cheap cloud machine. However, when running etcd clusters in production, some hardware guidelines are useful for proper administration. These suggestions are not hard rules; they serve as a good starting point for a robust production deployment. As always, deployments should be tested with simulated workloads before running in production.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/install/</guid><description>&lt;h2 id="system-requirements"&gt;System requirements&lt;/h2&gt;
&lt;p&gt;The etcd performance benchmarks run etcd on 8 vCPU, 16GB RAM, 50GB SSD GCE instances, but any relatively modern machine with low latency storage and a few gigabytes of memory should suffice for most use cases. Applications with large v2 data stores will require more memory than a large v3 data store since data is kept in anonymous memory instead of memory mapped from a file. than For running etcd on a cloud provider, we suggest at least a medium instance on AWS or a standard-1 instance on GCE.&lt;/p&gt;</description></item><item><title>Install</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/install/</guid><description>&lt;h2 id="system-requirements"&gt;System requirements&lt;/h2&gt;
&lt;p&gt;The etcd performance benchmarks run etcd on 8 vCPU, 16GB RAM, 50GB SSD GCE instances, but any relatively modern machine with low latency storage and a few gigabytes of memory should suffice for most use cases. Applications with large v2 data stores will require more memory than a large v3 data store since data is kept in anonymous memory instead of memory mapped from a file. For running etcd on a cloud provider, we suggest at least a medium instance on AWS or a standard-1 instance on GCE.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;By default, etcdctl talks to the etcd server with the v2 API for backward compatibility. For etcdctl to speak to etcd using the v3 API, the API version must be set to version 3 via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;By default, etcdctl talks to the etcd server with the v2 API for backward compatibility. For etcdctl to speak to etcd using the v3 API, the API version must be set to version 3 via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Issue triage guidelines</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up issue management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; issues are listed at &lt;a href="https://github.com/etcd-io/etcd/issues" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/issues&lt;/a&gt;
and are identified with labels. For example, an issue that is identified
as a bug will eventually be set to label &lt;code&gt;area/bug &lt;/code&gt;. New issues will
start out without any labels, but typically &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors
add labels based on their findings. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few predetermined searches on issues for convenience:&lt;/p&gt;</description></item><item><title>Issue triage guidelines</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up issue management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; issues are listed at &lt;a href="https://github.com/etcd-io/etcd/issues" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/issues&lt;/a&gt;
and are identified with labels. For example, an issue that is identified
as a bug will eventually be set to label &lt;code&gt;area/bug &lt;/code&gt;. New issues will
start out without any labels, but typically &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors
add labels based on their findings. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few predetermined searches on issues for convenience:&lt;/p&gt;</description></item><item><title>Issue triage guidelines</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/triage/issues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/triage/issues/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up issue management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; issues are listed at &lt;a href="https://github.com/etcd-io/etcd/issues" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/issues&lt;/a&gt;
and are identified with labels. For example, an issue that is identified
as a bug will eventually be set to label &lt;code&gt;area/bug &lt;/code&gt;. New issues will
start out without any labels, but typically &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors
add labels based on their findings. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few predetermined searches on issues for convenience:&lt;/p&gt;</description></item><item><title>KV API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store with mini-transaction(TODO: link to txn doc when we have it) support. The key value store is exposed through the KV APIs. etcd tries to ensure the strongest consistency and durability guarantees for a distributed system. This specification enumerates the KV API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read APIs
&lt;ul&gt;
&lt;li&gt;range&lt;/li&gt;
&lt;li&gt;watch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write APIs
&lt;ul&gt;
&lt;li&gt;put&lt;/li&gt;
&lt;li&gt;delete&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Combination (read-modify-write) APIs
&lt;ul&gt;
&lt;li&gt;txn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="etcd-specific-definitions"&gt;etcd specific definitions&lt;/h3&gt;
&lt;h4 id="operation-completed"&gt;Operation completed&lt;/h4&gt;
&lt;p&gt;An etcd operation is considered complete when it is committed through consensus, and therefore “executed” -- permanently stored -- by the etcd storage engine. The client knows an operation is completed when it receives a response from the etcd server. Note that the client may be uncertain about the status of an operation if it times out, or there is a network disruption between the client and the etcd member. etcd may also abort operations when there is a leader election. etcd does not send &lt;code&gt;abort&lt;/code&gt; responses to clients’ outstanding requests in this event.&lt;/p&gt;</description></item><item><title>KV API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store with &lt;a href="../api/#transaction"&gt;mini-transaction&lt;/a&gt; support. The key value store is exposed through the KV APIs. etcd tries to ensure the strongest consistency and durability guarantees for a distributed system. This specification enumerates the KV API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read APIs
&lt;ul&gt;
&lt;li&gt;range&lt;/li&gt;
&lt;li&gt;watch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write APIs
&lt;ul&gt;
&lt;li&gt;put&lt;/li&gt;
&lt;li&gt;delete&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Combination (read-modify-write) APIs
&lt;ul&gt;
&lt;li&gt;txn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="etcd-specific-definitions"&gt;etcd specific definitions&lt;/h3&gt;
&lt;h4 id="operation-completed"&gt;Operation completed&lt;/h4&gt;
&lt;p&gt;An etcd operation is considered complete when it is committed through consensus, and therefore “executed” -- permanently stored -- by the etcd storage engine. The client knows an operation is completed when it receives a response from the etcd server. Note that the client may be uncertain about the status of an operation if it times out, or there is a network disruption between the client and the etcd member. etcd may also abort operations when there is a leader election. etcd does not send &lt;code&gt;abort&lt;/code&gt; responses to clients’ outstanding requests in this event.&lt;/p&gt;</description></item><item><title>KV API guarantees</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/api_guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/api_guarantees/</guid><description>&lt;p&gt;etcd is a consistent and durable key value store with &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/api#transaction"&gt;mini-transaction&lt;/a&gt; support. The key value store is exposed through the KV APIs. etcd tries to ensure the strongest consistency and durability guarantees for a distributed system. This specification enumerates the KV API guarantees made by etcd.&lt;/p&gt;
&lt;h3 id="apis-to-consider"&gt;APIs to consider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Read APIs
&lt;ul&gt;
&lt;li&gt;range&lt;/li&gt;
&lt;li&gt;watch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write APIs
&lt;ul&gt;
&lt;li&gt;put&lt;/li&gt;
&lt;li&gt;delete&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Combination (read-modify-write) APIs
&lt;ul&gt;
&lt;li&gt;txn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="etcd-specific-definitions"&gt;etcd specific definitions&lt;/h3&gt;
&lt;h4 id="operation-completed"&gt;Operation completed&lt;/h4&gt;
&lt;p&gt;An etcd operation is considered complete when it is committed through consensus, and therefore “executed” -- permanently stored -- by the etcd storage engine. The client knows an operation is completed when it receives a response from the etcd server. Note that the client may be uncertain about the status of an operation if it times out, or there is a network disruption between the client and the etcd member. etcd may also abort operations when there is a leader election. etcd does not send &lt;code&gt;abort&lt;/code&gt; responses to clients’ outstanding requests in this event.&lt;/p&gt;</description></item><item><title>Learner</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/learner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/learning/learner/</guid><description>&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Membership reconfiguration has been one of the biggest operational challenges. Let’s review common challenges.&lt;/p&gt;
&lt;p&gt;A newly joined etcd member starts with no data, thus demanding more updates from leader until it catches up with leader’s logs. Then leader’s network is more likely to be overloaded, blocking or dropping leader heartbeats to followers. In such case, a follower may election-timeout to start a new leader election. That is, a cluster with a new member is more vulnerable to leader election. Both leader election and the subsequent update propagation to the new member are prone to causing periods of cluster unavailability (see &lt;strong&gt;Figure 1&lt;/strong&gt; below).&lt;/p&gt;</description></item><item><title>Libraries and tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/libraries-and-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/libraries-and-tools/</guid><description>&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/v3.1.20/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/fanhattan/etcd-backup" target="_blank" rel="noopener"&gt;etcd-backup&lt;/a&gt; - A powerful command line utility for dumping/restoring etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/mickep76/etcdrest" target="_blank" rel="noopener"&gt;etcd-rest&lt;/a&gt; - Create generic REST API in Go using etcd as a backend with validation using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041250/https://github.com/kamilhark/etcdsh" target="_blank" rel="noopener"&gt;etcdsh&lt;/a&gt; - A command line client with support of command history and tab completion. Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sinsharat/etcdloadtest" target="_blank" rel="noopener"&gt;etcdloadtest&lt;/a&gt; - A command line load test client for etcd version 3.0 and above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Go libraries&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Libraries and Tools</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/libraries-and-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/libraries-and-tools/</guid><description>&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/tree/v2.3.8/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt; - A command line client for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/fanhattan/etcd-backup" target="_blank" rel="noopener"&gt;etcd-backup&lt;/a&gt; - A powerful command line utility for dumping/restoring etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/etcd-dump" target="_blank" rel="noopener"&gt;etcd-dump&lt;/a&gt; - Command line utility for dumping/restoring etcd.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xetorthio/etcd-fs" target="_blank" rel="noopener"&gt;etcd-fs&lt;/a&gt; - FUSE filesystem for etcd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rekby/etcddir" target="_blank" rel="noopener"&gt;etcddir&lt;/a&gt; - Realtime sync etcd and local directory. Work with windows and linux.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/henszey/etcd-browser" target="_blank" rel="noopener"&gt;etcd-browser&lt;/a&gt; - A web-based key/value editor for etcd using AngularJS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datawisesystems/etcd-lock" target="_blank" rel="noopener"&gt;etcd-lock&lt;/a&gt; - Master election &amp;amp; distributed r/w lock implementation using etcd - Supports v2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matishsiao/etcd-console" target="_blank" rel="noopener"&gt;etcd-console&lt;/a&gt; - A web-base key/value editor for etcd using PHP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikfoundas/etcd-viewer" target="_blank" rel="noopener"&gt;etcd-viewer&lt;/a&gt; - An etcd key-value store editor/viewer written in Java&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mickep76/etcdtool" target="_blank" rel="noopener"&gt;etcdtool&lt;/a&gt; - Export/Import/Edit etcd directory as JSON/YAML/TOML and Validate directory using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041300/https://github.com/mickep76/etcdrest" target="_blank" rel="noopener"&gt;etcd-rest&lt;/a&gt; - Create generic REST API in Go using etcd as a backend with validation using JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20190113041250/https://github.com/kamilhark/etcdsh" target="_blank" rel="noopener"&gt;etcdsh&lt;/a&gt; - A command line client with support of command history and tab completion. Supports v2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Go libraries&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/coreos/pkg/tree/master/capnslog" target="_blank" rel="noopener"&gt;capnslog&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;A failure to allocate disk space for WAL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/coreos/pkg/tree/master/capnslog" target="_blank" rel="noopener"&gt;capnslog&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;A failure to allocate disk space for WAL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.&lt;/p&gt;</description></item><item><title>Logging conventions</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-internal/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-internal/logging/</guid><description>&lt;p&gt;etcd uses the &lt;a href="https://github.com/coreos/pkg/tree/master/capnslog" target="_blank" rel="noopener"&gt;capnslog&lt;/a&gt; library for logging application output categorized into &lt;em&gt;levels&lt;/em&gt;. A log message&amp;rsquo;s level is determined according to these conventions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Examples:
&lt;ul&gt;
&lt;li&gt;A failure to allocate disk space for WAL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Maintenance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/maintenance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/maintenance/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;An etcd cluster needs periodic maintenance to remain reliable. Depending on an etcd application&amp;rsquo;s needs, this maintenance can usually be automated and performed without downtime or significantly degraded performance.&lt;/p&gt;
&lt;p&gt;All etcd maintenance manages storage resources consumed by the etcd keyspace. Failure to adequately control the keyspace size is guarded by storage space quotas; if an etcd member runs low on space, a quota will trigger cluster-wide alarms which will put the system into a limited-operation maintenance mode. To avoid running out of space for writes to the keyspace, the etcd keyspace history must be compacted. Storage space itself may be reclaimed by defragmenting etcd members. Finally, periodic snapshot backups of etcd member state makes it possible to recover any unintended logical data loss or corruption caused by operational error.&lt;/p&gt;</description></item><item><title>Members API</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/members_api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/members_api/</guid><description>&lt;h2 id="list-members"&gt;List members&lt;/h2&gt;
&lt;p&gt;Return an HTTP 200 OK response code and a representation of all members in the etcd cluster.&lt;/p&gt;
&lt;h3 id="request"&gt;Request&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /v2/members HTTP/1.1
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl http://10.0.0.10:2379/v2/members
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;members&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;272e204152&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;infra1&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;peerURLs&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;http://10.0.0.10:2380&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;clientURLs&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;http://10.0.0.10:2379&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;2225373f43&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;infra2&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;peerURLs&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;http://10.0.0.11:2380&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;clientURLs&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt; &lt;span style="color:#000;font-weight:bold"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4e9a06"&gt;&amp;#34;http://10.0.0.11:2379&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#000;font-weight:bold"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="add-a-member"&gt;Add a member&lt;/h2&gt;
&lt;p&gt;Returns an HTTP 201 response code and the representation of added member with a newly generated a memberID when successful. Returns a string describing the failure condition when unsuccessful.&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="http://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="http://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="http://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="http://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="http://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="http://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/metrics/</guid><description>&lt;p&gt;etcd uses &lt;a href="http://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; for metrics reporting. The metrics can be used for real-time monitoring and debugging. etcd does not persist its metrics; if a member restarts, the metrics will be reset.&lt;/p&gt;
&lt;p&gt;The simplest way to see the available metrics is to cURL the metrics endpoint &lt;code&gt;/metrics&lt;/code&gt;. The format is described &lt;a href="http://prometheus.io/docs/instrumenting/exposition_formats/" target="_blank" rel="noopener"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Follow the &lt;a href="http://prometheus.io/docs/introduction/getting_started/" target="_blank" rel="noopener"&gt;Prometheus getting started doc&lt;/a&gt; to spin up a Prometheus server to collect etcd metrics.&lt;/p&gt;
&lt;p&gt;The naming of metrics follows the suggested &lt;a href="http://prometheus.io/docs/practices/naming/" target="_blank" rel="noopener"&gt;Prometheus best practices&lt;/a&gt;. A metric name has an &lt;code&gt;etcd&lt;/code&gt; or &lt;code&gt;etcd_debugging&lt;/code&gt; prefix as its namespace and a subsystem prefix (for example &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;etcdserver&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Migrate applications from using API v2 to API v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/v2-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/v2-migration/</guid><description>&lt;p&gt;The data store v2 is still accessible from the API v2 after upgrading to etcd3. Thus, it will work as before and require no application changes. With etcd 3, applications use the new grpc API v3 to access the mvcc store, which provides more features and improved performance. The mvcc store and the old store v2 are separate and isolated; writes to the store v2 will not affect the mvcc store and, similarly, writes to the mvcc store will not affect the store v2.&lt;/p&gt;</description></item><item><title>Migrate applications from using API v2 to API v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/v2-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/v2-migration/</guid><description>&lt;p&gt;The data store v2 is still accessible from the API v2 after upgrading to etcd3. Thus, it will work as before and require no application changes. With etcd 3, applications use the new grpc API v3 to access the mvcc store, which provides more features and improved performance. The mvcc store and the old store v2 are separate and isolated; writes to the store v2 will not affect the mvcc store and, similarly, writes to the mvcc store will not affect the store v2.&lt;/p&gt;</description></item><item><title>Migrate applications from using API v2 to API v3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/v2-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/v2-migration/</guid><description>&lt;p&gt;The data store v2 is still accessible from the API v2 after upgrading to etcd3. Thus, it will work as before and require no application changes. With etcd 3, applications use the new grpc API v3 to access the mvcc store, which provides more features and improved performance. The mvcc store and the old store v2 are separate and isolated; writes to the store v2 will not affect the mvcc store and, similarly, writes to the mvcc store will not affect the store v2.&lt;/p&gt;</description></item><item><title>Miscellaneous APIs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/other_apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/other_apis/</guid><description>&lt;h2 id="getting-the-etcd-version"&gt;Getting the etcd version&lt;/h2&gt;
&lt;p&gt;The etcd version of a specific instance can be obtained from the &lt;code&gt;/version&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -L http://127.0.0.1:2379/version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;etcd 2.0.12
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="checking-health-of-an-etcd-member-node"&gt;Checking health of an etcd member node&lt;/h2&gt;
&lt;p&gt;etcd provides a &lt;code&gt;/health&lt;/code&gt; endpoint to verify the health of a particular member.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl http://10.0.0.10:2379/health
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;#34;health&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server exports metrics under the &lt;code&gt;/metrics&lt;/code&gt; path on its client port.&lt;/p&gt;
&lt;p&gt;The metrics can be fetched with &lt;code&gt;curl&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ curl -L http://localhost:2379/metrics
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# HELP etcd_debugging_mvcc_keys_total Total number of keys.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# TYPE etcd_debugging_mvcc_keys_total gauge&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd_debugging_mvcc_keys_total &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# HELP etcd_debugging_mvcc_pending_events_total Total number of pending events to be sent.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# TYPE etcd_debugging_mvcc_pending_events_total gauge&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etcd_debugging_mvcc_pending_events_total &lt;span style="color:#0000cf;font-weight:bold"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="prometheus"&gt;Prometheus&lt;/h2&gt;
&lt;p&gt;Running a &lt;a href="https://prometheus.io/" target="_blank" rel="noopener"&gt;Prometheus&lt;/a&gt; monitoring service is the easiest way to ingest and record etcd&amp;rsquo;s metrics.&lt;/p&gt;
&lt;p&gt;First, install Prometheus:&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Monitoring etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.4/op-guide/monitoring/</guid><description>&lt;p&gt;Each etcd server provides local monitoring information on its client port through http endpoints. The monitoring data is useful for both system health checking and cluster debugging.&lt;/p&gt;
&lt;h2 id="debug-endpoint"&gt;Debug endpoint&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;--debug&lt;/code&gt; is set, the etcd server exports debugging information on its client port under the &lt;code&gt;/debug&lt;/code&gt; path. Take care when setting &lt;code&gt;--debug&lt;/code&gt;, since there will be degraded performance and verbose logging.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/debug/pprof&lt;/code&gt; endpoint is the standard go runtime profiling endpoint. This can be used to profile CPU, heap, mutex, and goroutine utilization. For example, here &lt;code&gt;go tool pprof&lt;/code&gt; gets the top 10 functions where etcd spends its time:&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>Performance</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/performance/</guid><description>&lt;h2 id="understanding-performance"&gt;Understanding performance&lt;/h2&gt;
&lt;p&gt;etcd provides stable, sustained high performance. Two factors define performance: latency and throughput. Latency is the time taken to complete an operation. Throughput is the total operations completed within some time period. Usually average latency increases as the overall throughput increases when etcd accepts concurrent client requests. In common cloud environments, like a standard &lt;code&gt;n-4&lt;/code&gt; on Google Compute Engine (GCE) or a comparable machine type on AWS, a three member etcd cluster finishes a request in less than one millisecond under light load, and can complete more than 30,000 requests per second under heavy load.&lt;/p&gt;</description></item><item><title>PR management</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.5/triage/prs/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up PR management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; PRs are listed at &lt;a href="https://github.com/etcd-io/etcd/pulls" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;
A PR can have various labels, milestone, reviewer etc. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few example searches on PR for convenience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&amp;#43;milestone%3Aetcd-v3.4" target="_blank" rel="noopener"&gt;Open PRS for milestone etcd-v3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Investigating" target="_blank" rel="noopener"&gt;PRs under investigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scope"&gt;Scope&lt;/h2&gt;
&lt;p&gt;These guidelines serves as a primary document for managing PRs in &lt;code&gt;etcd&lt;/code&gt;. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document is created with &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors in mind.&lt;/p&gt;</description></item><item><title>PR management</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.6/triage/prs/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up PR management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; PRs are listed at &lt;a href="https://github.com/etcd-io/etcd/pulls" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;
A PR can have various labels, milestone, reviewer etc. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few example searches on PR for convenience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&amp;#43;milestone%3Aetcd-v3.4" target="_blank" rel="noopener"&gt;Open PRS for milestone etcd-v3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Investigating" target="_blank" rel="noopener"&gt;PRs under investigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scope"&gt;Scope&lt;/h2&gt;
&lt;p&gt;These guidelines serves as a primary document for managing PRs in &lt;code&gt;etcd&lt;/code&gt;. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document is created with &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors in mind.&lt;/p&gt;</description></item><item><title>PR management</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/triage/prs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.7/triage/prs/</guid><description>&lt;h2 id="purpose"&gt;Purpose&lt;/h2&gt;
&lt;p&gt;Speed up PR management.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;etcd&lt;/code&gt; PRs are listed at &lt;a href="https://github.com/etcd-io/etcd/pulls" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/pulls&lt;/a&gt;
A PR can have various labels, milestone, reviewer etc. The detailed list of labels can be found at
&lt;a href="https://github.com/kubernetes/kubernetes/labels" target="_blank" rel="noopener"&gt;https://github.com/kubernetes/kubernetes/labels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Following are few example searches on PR for convenience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr&amp;#43;is%3Aopen&amp;#43;milestone%3Aetcd-v3.4" target="_blank" rel="noopener"&gt;Open PRS for milestone etcd-v3.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/etcd-io/etcd/labels/Investigating" target="_blank" rel="noopener"&gt;PRs under investigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scope"&gt;Scope&lt;/h2&gt;
&lt;p&gt;These guidelines serves as a primary document for managing PRs in &lt;code&gt;etcd&lt;/code&gt;. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document is created with &lt;code&gt;etcd&lt;/code&gt; maintainers and active contributors in mind.&lt;/p&gt;</description></item><item><title>Production users</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/production-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/production-users/</guid><description>&lt;p&gt;This document tracks people and use cases for etcd in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various etcd applications, operation environments, and cluster sizes. The etcd development team may reach out periodically to check-in on how etcd is working in the field and update this list.&lt;/p&gt;
&lt;h2 id="discoveryetcdio"&gt;discovery.etcd.io&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Application&lt;/em&gt;: &lt;a href="https://github.com/etcd-io/discovery.etcd.io" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/discovery.etcd.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Launched&lt;/em&gt;: Feb. 2014&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cluster Size&lt;/em&gt;: 5 members, 5 discovery proxies&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Order of Data Size&lt;/em&gt;: 100s of Megabytes&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Operator&lt;/em&gt;: CoreOS, &lt;a href="mailto:brandon.philips@coreos.com"&gt;brandon.philips@coreos.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environment&lt;/em&gt;: AWS&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Backups&lt;/em&gt;: Periodic async to S3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;discovery.etcd.io is the longest continuously running etcd backed service that we know about. It is the basis of automatic cluster bootstrap and was launched in Feb. 2014: &lt;a href="https://coreos.com/blog/etcd-0.3.0-released/" target="_blank" rel="noopener"&gt;https://coreos.com/blog/etcd-0.3.0-released/&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Production users</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/production-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/production-users/</guid><description>&lt;p&gt;This document tracks people and use cases for etcd in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various etcd applications, operation environments, and cluster sizes. The etcd development team may reach out periodically to check-in on how etcd is working in the field and update this list.&lt;/p&gt;
&lt;h2 id="all-kubernetes-users"&gt;All Kubernetes Users&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Application&lt;/em&gt;: &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener"&gt;https://kubernetes.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environments&lt;/em&gt;: AWS, OpenStack, Azure, Google Cloud, Huawei Cloud, Bare Metal, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;This is a meta user; please feel free to document specific Kubernetes clusters!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Production users</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/production-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/production-users/</guid><description>&lt;p&gt;This document tracks people and use cases for etcd in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various etcd applications, operation environments, and cluster sizes. The etcd development team may reach out periodically to check-in on how etcd is working in the field and update this list.&lt;/p&gt;
&lt;h2 id="all-kubernetes-users"&gt;All Kubernetes Users&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Application&lt;/em&gt;: &lt;a href="https://kubernetes.io/" target="_blank" rel="noopener"&gt;https://kubernetes.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environments&lt;/em&gt;: AWS, OpenStack, Azure, Google Cloud, Huawei Cloud, Bare Metal, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;This is a meta user; please feel free to document specific Kubernetes clusters!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Production Users</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/production-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/production-users/</guid><description>&lt;p&gt;This document tracks people and use cases for etcd in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various etcd applications, operation environments, and cluster sizes. The etcd development team may reach out periodically to check-in on your experience and update this list.&lt;/p&gt;
&lt;h2 id="discoveryetcdio"&gt;discovery.etcd.io&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Application&lt;/em&gt;: &lt;a href="https://github.com/etcd-io/discovery.etcd.io" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/discovery.etcd.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Launched&lt;/em&gt;: Feb. 2014&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cluster Size&lt;/em&gt;: 5 members, 5 discovery proxies&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Order of Data Size&lt;/em&gt;: 100s of Megabytes&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Operator&lt;/em&gt;: CoreOS, &lt;a href="mailto:brandon.philips@coreos.com"&gt;brandon.philips@coreos.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environment&lt;/em&gt;: AWS&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Backups&lt;/em&gt;: Periodic async to S3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;discovery.etcd.io is the longest continuously running etcd backed service that we know about. It is the basis of automatic cluster bootstrap and was launched in Feb. 2014: &lt;a href="https://coreos.com/blog/etcd-0.3.0-released/" target="_blank" rel="noopener"&gt;https://coreos.com/blog/etcd-0.3.0-released/&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Proxy</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/proxy/</guid><description>&lt;p&gt;etcd can run as a transparent proxy. Doing so allows for easy discovery of etcd within your infrastructure, since it can run on each machine as a local service. In this mode, etcd acts as a reverse proxy and forwards client requests to an active etcd cluster. The etcd proxy does not participate in the consensus replication of the etcd cluster, thus it neither increases the resilience nor decreases the write performance of the etcd cluster.&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/reporting_bugs/</guid><description>&lt;p&gt;If any part of the etcd project has bugs or documentation mistakes, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Reporting Bugs</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/reporting_bugs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/reporting_bugs/</guid><description>&lt;p&gt;If you find bugs or documentation mistakes in the etcd project, please let us know by &lt;a href="https://github.com/etcd-io/etcd/issues/new" target="_blank" rel="noopener"&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make your bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc. You can also attach etcd log (the starting log with etcd configuration is especially important).&lt;/p&gt;</description></item><item><title>Role-based access control</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/authentication/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Authentication was added in etcd 2.1. The etcd v3 API slightly modified the authentication feature&amp;rsquo;s API and user interface to better fit the new data model. This guide is intended to help users set up basic authentication and role-based access control in etcd v3.&lt;/p&gt;
&lt;h2 id="special-users-and-roles"&gt;Special users and roles&lt;/h2&gt;
&lt;p&gt;There is one special user, &lt;code&gt;root&lt;/code&gt;, and one special role, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="user-root"&gt;User &lt;code&gt;root&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; user, which has full access to etcd, must be created before activating authentication. The idea behind the &lt;code&gt;root&lt;/code&gt; user is for administrative purposes: managing roles and ordinary users. The &lt;code&gt;root&lt;/code&gt; user must have the &lt;code&gt;root&lt;/code&gt; role and is allowed to change anything inside etcd.&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with rkt and Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rkt"&gt;rkt&lt;/h2&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;The following rkt run command will expose the etcd client API on port 2379 and expose the peer API on port 2380.&lt;/p&gt;
&lt;p&gt;Use the host IP address when configuring etcd.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export NODE1=192.168.1.21
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Trust the CoreOS &lt;a href="https://coreos.com/security/app-signing-key/" target="_blank" rel="noopener"&gt;App Signing Key&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rkt trust --prefix coreos.com/etcd
# gpg key fingerprint is: 18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run the &lt;code&gt;v3.0.6&lt;/code&gt; version of etcd or specify another release version.&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with rkt and Docker using the &lt;a href="../clustering/#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rkt"&gt;rkt&lt;/h2&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;The following rkt run command will expose the etcd client API on port 2379 and expose the peer API on port 2380.&lt;/p&gt;
&lt;p&gt;Use the host IP address when configuring etcd.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export NODE1=192.168.1.21
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Trust the CoreOS &lt;a href="https://coreos.com/security/app-signing-key/" target="_blank" rel="noopener"&gt;App Signing Key&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rkt trust --prefix coreos.com/etcd
# gpg key fingerprint is: 18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run the &lt;code&gt;v3.1.2&lt;/code&gt; version of etcd or specify another release version.&lt;/p&gt;</description></item><item><title>Run etcd clusters inside containers</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/container/</guid><description>&lt;p&gt;The following guide shows how to run etcd with rkt and Docker using the &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/clustering#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rkt"&gt;rkt&lt;/h2&gt;
&lt;h3 id="running-a-single-node-etcd"&gt;Running a single node etcd&lt;/h3&gt;
&lt;p&gt;The following rkt run command will expose the etcd client API on port 2379 and expose the peer API on port 2380.&lt;/p&gt;
&lt;p&gt;Use the host IP address when configuring etcd.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export NODE1=192.168.1.21
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Trust the CoreOS &lt;a href="https://coreos.com/security/app-signing-key/" target="_blank" rel="noopener"&gt;App Signing Key&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rkt trust --prefix quay.io/coreos/etcd
# gpg key fingerprint is: 18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run the &lt;code&gt;v3.2&lt;/code&gt; version of etcd or specify another release version.&lt;/p&gt;</description></item><item><title>Run etcd on Container Linux with systemd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/container-linux-systemd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/platforms/container-linux-systemd/</guid><description>&lt;p&gt;The following guide shows how to run etcd with &lt;a href="https://github.com/systemd/systemd" target="_blank" rel="noopener"&gt;systemd&lt;/a&gt; under &lt;a href="https://coreos.com/os/docs/latest" target="_blank" rel="noopener"&gt;Container Linux&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="provisioning-an-etcd-cluster"&gt;Provisioning an etcd cluster&lt;/h2&gt;
&lt;p&gt;Cluster bootstrapping in Container Linux is simplest with &lt;a href="https://github.com/coreos/docs/blob/master/ignition/what-is-ignition.md" target="_blank" rel="noopener"&gt;Ignition&lt;/a&gt;; &lt;code&gt;coreos-metadata.service&lt;/code&gt; dynamically fetches the machine&amp;rsquo;s IP for discovery. Note that etcd&amp;rsquo;s discovery service protocol is only meant for bootstrapping, and cannot be used with runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/coreos/container-linux-config-transpiler" target="_blank" rel="noopener"&gt;Container Linux Config Transpiler&lt;/a&gt; compiles etcd configuration files into Ignition configuration files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;etcd&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;version&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3.2.0&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;s1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;data_dir&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;/var/lib/etcd&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;advertise_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PUBLIC_IPV4}:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;initial_advertise_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_client_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://0.0.0.0:2379&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;listen_peer_urls&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;http://{PRIVATE_IPV4}:2380&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;discovery&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;https://discovery.etcd.io/&amp;lt;token&amp;gt;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ct&lt;/code&gt; would produce the following Ignition Config:&lt;/p&gt;</description></item><item><title>Running etcd under Docker</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/docker_guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/docker_guide/</guid><description>&lt;p&gt;The following guide will show you how to run etcd under Docker using the &lt;a href="../clustering#static"&gt;static bootstrap process&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="running-etcd-in-standalone-mode"&gt;Running etcd in standalone mode&lt;/h2&gt;
&lt;p&gt;In order to expose the etcd API to clients outside of the Docker host you&amp;rsquo;ll need use the host IP address when configuring etcd.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export HostIP=&amp;#34;192.168.12.50&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The following &lt;code&gt;docker run&lt;/code&gt; command will expose the etcd client API over ports 4001 and 2379, and expose the peer port over 2380.&lt;/p&gt;
&lt;p&gt;This will run the latest release version of etcd. You can specify version if needed (e.g. &lt;code&gt;quay.io/coreos/etcd:v2.2.0&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when the majority of the cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when a majority of cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not be able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Runtime Reconfiguration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/runtime-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/runtime-configuration/</guid><description>&lt;p&gt;etcd comes with support for incremental runtime reconfiguration, which allows users to update the membership of the cluster at run time.&lt;/p&gt;
&lt;p&gt;Reconfiguration requests can only be processed when the majority of the cluster members are functioning. It is &lt;strong&gt;highly recommended&lt;/strong&gt; to always have a cluster size greater than two in production. It is unsafe to remove a member from a two member cluster. The majority of a two member cluster is also two. If there is a failure during the removal process, the cluster might not able to make progress and need to &lt;a href="#restart-cluster-from-majority-failure"&gt;restart from majority failure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;p&gt;To get up and running, first have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.&lt;/p&gt;
&lt;p&gt;For convenience, the &lt;a href="https://github.com/cloudflare/cfssl" target="_blank" rel="noopener"&gt;cfssl&lt;/a&gt; tool provides an easy interface to certificate generation, and we provide an example using the tool &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/tls-setup" target="_blank" rel="noopener"&gt;here&lt;/a&gt;. Alternatively, try this &lt;a href="https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md" target="_blank" rel="noopener"&gt;guide to generating self-signed key pairs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;p&gt;To get up and running, first have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.&lt;/p&gt;
&lt;p&gt;For convenience, the &lt;a href="https://github.com/cloudflare/cfssl" target="_blank" rel="noopener"&gt;cfssl&lt;/a&gt; tool provides an easy interface to certificate generation, and we provide an example using the tool &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/tls-setup" target="_blank" rel="noopener"&gt;here&lt;/a&gt;. Alternatively, try this &lt;a href="https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md" target="_blank" rel="noopener"&gt;guide to generating self-signed key pairs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Security Model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/security/</guid><description>&lt;p&gt;etcd supports SSL/TLS as well as authentication through client certificates, both for clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;p&gt;To get up and running you first need to have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.&lt;/p&gt;
&lt;p&gt;For convenience, the &lt;a href="https://github.com/cloudflare/cfssl" target="_blank" rel="noopener"&gt;cfssl&lt;/a&gt; tool provides an easy interface to certificate generation, and we provide an example using the tool &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/tls-setup" target="_blank" rel="noopener"&gt;here&lt;/a&gt;. You can also examine this &lt;a href="https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md" target="_blank" rel="noopener"&gt;alternative guide to generating self-signed key pairs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to set up a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;p&gt;Deploying an etcd cluster as a standalone cluster is straightforward. Start it with just one command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The started etcd member listens on &lt;code&gt;localhost:2379&lt;/code&gt; for client requests.&lt;/p&gt;
&lt;p&gt;To interact with the started cluster by using etcdctl:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# use API version 3
$ export ETCDCTL_API=3

$ ./etcdctl put foo bar
OK

$ ./etcdctl get foo
bar
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="local-multi-member-cluster"&gt;Local multi-member cluster&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;Procfile&lt;/code&gt; at the base of this git repo is provided to easily set up a local multi-member cluster. To start a multi-member cluster go to the root of an etcd source tree and run:&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/clustering"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>Setup a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to set up a local cluster. For a production deployment, refer to the &lt;a href="../../op-guide/clustering/"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;p&gt;Deploying an etcd cluster as a standalone cluster is straightforward. Start it with just one command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The started etcd member listens on &lt;code&gt;localhost:2379&lt;/code&gt; for client requests.&lt;/p&gt;
&lt;p&gt;To interact with the started cluster by using etcdctl:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# use API version 3
$ export ETCDCTL_API=3

$ ./etcdctl put foo bar
OK

$ ./etcdctl get foo
bar
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="local-multi-member-cluster"&gt;Local multi-member cluster&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;Procfile&lt;/code&gt; at the base of this git repo is provided to easily set up a local multi-member cluster. To start a multi-member cluster go to the root of an etcd source tree and run:&lt;/p&gt;</description></item><item><title>Snapshot Migration</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/04_to_2_snapshot_migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/04_to_2_snapshot_migration/</guid><description>&lt;p&gt;You can migrate a snapshot of your data from a v0.4.9+ cluster into a new etcd 2.2 cluster using a snapshot migration. After snapshot migration, the etcd indexes of your data will change. Many etcd applications rely on these indexes to behave correctly. This operation should only be done while all etcd applications are stopped.&lt;/p&gt;
&lt;p&gt;To get started get the newest data snapshot from the 0.4.9+ cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl http://cluster.example.com:4001/v2/migration/snapshot &amp;gt; backup.snap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, import the snapshot into your new cluster:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Storage Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-storage-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-storage-memory-benchmark/</guid><description>&lt;!---todo: link storage to storage design doc--&gt;
&lt;p&gt;Two components of etcd storage consume physical memory. The etcd process allocates an &lt;em&gt;in-memory index&lt;/em&gt; to speed key lookup. The process&amp;rsquo;s &lt;em&gt;page cache&lt;/em&gt;, managed by the operating system, stores recently-accessed data from disk for quick re-use.&lt;/p&gt;
&lt;p&gt;The in-memory index holds all the keys in a &lt;a href="https://en.wikipedia.org/wiki/B-tree" target="_blank" rel="noopener"&gt;B-tree&lt;/a&gt; data structure, along with pointers to the on-disk data (the values). Each key in the B-tree may contain multiple pointers, pointing to different versions of its values. The theoretical memory consumption of the in-memory index can hence be approximated with the formula:&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/supported-platform/</guid><description>&lt;h3 id="current-support"&gt;Current support&lt;/h3&gt;
&lt;p&gt;The following table lists etcd support status for common architectures and operating systems,&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Architecture&lt;/th&gt;
 &lt;th&gt;Operating System&lt;/th&gt;
 &lt;th&gt;Status&lt;/th&gt;
 &lt;th&gt;Maintainers&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Darwin&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;386&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;etcd-maintainers are listed in &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/blob/main/OWNERS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Experimental platforms appear to work in practice and have some platform specific code in etcd, but do not fully conform to the stable support policy. Unstable platforms have been lightly tested, but less than experimental. Unlisted architecture and operating system pairs are currently unsupported; caveat emptor.&lt;/p&gt;</description></item><item><title>Supported platforms</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/supported-platform/</guid><description>&lt;h3 id="current-support"&gt;Current support&lt;/h3&gt;
&lt;p&gt;The following table lists etcd support status for common architectures and operating systems,&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Architecture&lt;/th&gt;
 &lt;th&gt;Operating System&lt;/th&gt;
 &lt;th&gt;Status&lt;/th&gt;
 &lt;th&gt;Maintainers&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Darwin&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;386&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ppc64le&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;etcd-maintainers are listed in &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/blob/main/OWNERS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Experimental platforms appear to work in practice and have some platform specific code in etcd, but do not fully conform to the stable support policy. Unstable platforms have been lightly tested, but less than experimental. Unlisted architecture and operating system pairs are currently unsupported; caveat emptor.&lt;/p&gt;</description></item><item><title>Supported systems</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/supported-platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/supported-platform/</guid><description>&lt;h2 id="current-support"&gt;Current support&lt;/h2&gt;
&lt;p&gt;The following table lists etcd support status for common architectures and operating systems:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Architecture&lt;/th&gt;
 &lt;th&gt;Operating System&lt;/th&gt;
 &lt;th&gt;Status&lt;/th&gt;
 &lt;th&gt;Maintainers&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Darwin&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amd64&lt;/td&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm64&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Experimental&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arm&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;386&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Unstable&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ppc64le&lt;/td&gt;
 &lt;td&gt;Linux&lt;/td&gt;
 &lt;td&gt;Stable&lt;/td&gt;
 &lt;td&gt;etcd maintainers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;etcd-maintainers are listed in &lt;a href="https://github.com/etcd-io/etcd/blob/main/OWNERS" target="_blank" rel="noopener"&gt;https://github.com/etcd-io/etcd/blob/main/OWNERS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Experimental platforms appear to work in practice and have some platform specific code in etcd, but do not fully conform to the stable support policy. Unstable platforms have been lightly tested, but less than experimental. Unlisted architecture and operating system pairs are currently unsupported; caveat emptor.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. For the time being, etcd guarantees to support RPC requests with up to 1MB of data. In the future, the size limit may be loosened or made it configurable.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2GB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag; supports up to 8GB.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. For the time being, etcd guarantees to support RPC requests with up to 1MB of data. In the future, the size limit may be loosened or made configurable.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2GB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag; supports up to 8GB.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2GB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8GB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>Transport security model</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/security/</guid><description>&lt;p&gt;etcd supports automatic TLS as well as authentication through client certificates for both clients to server as well as peer (server to server / cluster) communication.&lt;/p&gt;
&lt;p&gt;To get up and running, first have a CA certificate and a signed key pair for one member. It is recommended to create and sign a new key pair for every member in a cluster.&lt;/p&gt;
&lt;p&gt;For convenience, the &lt;a href="https://github.com/cloudflare/cfssl" target="_blank" rel="noopener"&gt;cfssl&lt;/a&gt; tool provides an easy interface to certificate generation, and we provide an example using the tool &lt;a href="https://github.com/etcd-io/etcd/tree/master/hack/tls-setup" target="_blank" rel="noopener"&gt;here&lt;/a&gt;. Alternatively, try this &lt;a href="https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md" target="_blank" rel="noopener"&gt;guide to generating self-signed key pairs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low.
However, when using etcd across multiple data centers or over networks with high latency you may need to tweak the heartbeat interval and election timeout settings.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Tuning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/tuning/</guid><description>&lt;p&gt;The default settings in etcd should work well for installations on a local network where the average network latency is low. However, when using etcd across multiple data centers or over networks with high latency, the heartbeat interval and election timeout settings may need tuning.&lt;/p&gt;
&lt;p&gt;The network isn&amp;rsquo;t the only source of latency. Each request and response may be impacted by slow disks on both the leader and follower. Each of these timeouts represents the total time from request to successful response from the other machine.&lt;/p&gt;</description></item><item><title>Understand failures</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Understand failures</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/failures/</guid><description>&lt;p&gt;Failures are common in a large deployment of machines. A machine fails when its hardware or software malfunctions. Multiple machines fail together when there are power failures or network issues. Multiple kinds of failures can also happen at once; it is almost impossible to enumerate all possible failure cases.&lt;/p&gt;
&lt;p&gt;In this section, we catalog kinds of failures and discuss how etcd is designed to tolerate these failures. Most users, if not all, can map a particular failure into one kind of failure. To prepare for rare or &lt;a href="../recovery/"&gt;unrecoverable failures&lt;/a&gt;, always &lt;a href="../maintenance/#snapshot-backup"&gt;back up&lt;/a&gt; the etcd cluster.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.1 to 2.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.0 to 2.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.0 processes and replace them with etcd v2.1 processes&lt;/li&gt;
&lt;li&gt;after you are running all v2.1 processes, new features in v2.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h2 id="upgrade-checklists"&gt;Upgrade Checklists&lt;/h2&gt;
&lt;h3 id="upgrade-requirements"&gt;Upgrade Requirements&lt;/h3&gt;
&lt;p&gt;To upgrade an existing etcd deployment to 2.1, you must be running 2.0. If you’re running a version of etcd before 2.0, you must upgrade to &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v2.0.13" target="_blank" rel="noopener"&gt;2.0&lt;/a&gt; before upgrading to 2.1.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.1 to 2.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.1 to 2.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.1 processes and replace them with etcd v2.2 processes&lt;/li&gt;
&lt;li&gt;after you are running all v2.2 processes, new features in v2.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h2 id="upgrade-checklists"&gt;Upgrade Checklists&lt;/h2&gt;
&lt;h3 id="upgrade-requirement"&gt;Upgrade Requirement&lt;/h3&gt;
&lt;p&gt;To upgrade an existing etcd deployment to 2.2, you must be running 2.1. If you’re running a version of etcd before 2.1, you must upgrade to &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v2.1.2" target="_blank" rel="noopener"&gt;2.1&lt;/a&gt; before upgrading to 2.2.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.2 to 2.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/upgrade_2_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.2 to 2.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.2 processes and replace them with etcd v2.3 processes&lt;/li&gt;
&lt;li&gt;after running all v2.3 processes, new features in v2.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade Checklists&lt;/h3&gt;
&lt;h4 id="upgrade-requirements"&gt;Upgrade Requirements&lt;/h4&gt;
&lt;p&gt;To upgrade an existing etcd deployment to 2.3, the running cluster must be 2.2 or greater. If it&amp;rsquo;s before 2.2, please upgrade to &lt;a href="https://github.com/etcd-io/etcd/releases/tag/v2.2.0" target="_blank" rel="noopener"&gt;2.2&lt;/a&gt; before upgrading to 2.3.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 2.3 to 3.0</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_0/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 2.3 to 3.0 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v2.3 processes and replace them with etcd v3.0 processes&lt;/li&gt;
&lt;li&gt;after running all v3.0 processes, new features in v3.0 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.0 to 3.1</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_1/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.0 to 3.1 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.0 processes and replace them with etcd v3.1 processes&lt;/li&gt;
&lt;li&gt;after running all v3.1 processes, new features in v3.1 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.1 to 3.2</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_2/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.1 to 3.2 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.1 processes and replace them with etcd v3.2 processes&lt;/li&gt;
&lt;li&gt;after running all v3.2 processes, new features in v3.2 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.2 to 3.3</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_3/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.2 to 3.3 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.2 processes and replace them with etcd v3.3 processes&lt;/li&gt;
&lt;li&gt;after running all v3.3 processes, new features in v3.3 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.3 to 3.4</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_4/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.3 to 3.4 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.3 processes and replace them with etcd v3.4 processes&lt;/li&gt;
&lt;li&gt;after running all v3.4 processes, new features in v3.4 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrade etcd from 3.4 to 3.5</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_5/</guid><description>&lt;p&gt;In the general case, upgrading from etcd 3.4 to 3.5 can be a zero-downtime, rolling upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one by one, stop the etcd v3.4 processes and replace them with etcd v3.5 processes&lt;/li&gt;
&lt;li&gt;after running all v3.5 processes, new features in v3.5 are available to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before &lt;a href="#upgrade-procedure"&gt;starting an upgrade&lt;/a&gt;, read through the rest of this guide to prepare.&lt;/p&gt;
&lt;h3 id="upgrade-checklists"&gt;Upgrade checklists&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When &lt;a href="https://github.com/etcd-io/etcd/issues/9480" target="_blank" rel="noopener"&gt;migrating from v2 with no v3 data&lt;/a&gt;, etcd server v3.2+ panics when etcd restores from existing snapshots but no v3 &lt;code&gt;ETCD_DATA_DIR/member/snap/db&lt;/code&gt; file. This happens when the server had migrated from v2 with no previous v3 data. This also prevents accidental v3 data loss (e.g. &lt;code&gt;db&lt;/code&gt; file might have been moved). etcd requires that post v3 migration can only happen with v3 data. Do not upgrade to newer v3 versions until v3.0 server contains v3 data.&lt;/p&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="moving-from-etcd-api-v2-to-api-v3"&gt;Moving from etcd API v2 to API v3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../op-guide/v2-migration/"&gt;Migrate applications from using API v2 to API v3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_1/"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="../upgrade_3_2/"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../upgrade_3_0/"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Upgrading etcd clusters and applications</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrading-etcd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrading-etcd/</guid><description>&lt;p&gt;This section contains documents specific to upgrading etcd clusters and applications.&lt;/p&gt;
&lt;h2 id="moving-from-etcd-api-v2-to-api-v3"&gt;Moving from etcd API v2 to API v3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/v2-migration"&gt;Migrate applications from using API v2 to API v3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-an-etcd-v3x-cluster"&gt;Upgrading an etcd v3.x cluster&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_1"&gt;Upgrade etcd from 3.0 to 3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_2"&gt;Upgrade etcd from 3.1 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_3"&gt;Upgrade etcd from 3.2 to 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_4"&gt;Upgrade etcd from 3.3 to 3.4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="upgrading-from-etcd-v23"&gt;Upgrading from etcd v2.3&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/upgrades/upgrade_3_0"&gt;Upgrade a v2.3 cluster to v3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>v2 Auth and Security</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/auth_api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/auth_api/</guid><description>&lt;h2 id="etcd-resources"&gt;etcd Resources&lt;/h2&gt;
&lt;p&gt;There are three types of resources in etcd&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;permission resources: users and roles in the user store&lt;/li&gt;
&lt;li&gt;key-value resources: key-value pairs in the key-value store&lt;/li&gt;
&lt;li&gt;settings resources: security settings, auth settings, and dynamic etcd cluster settings (election/heartbeat)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="permission-resources"&gt;Permission Resources&lt;/h3&gt;
&lt;h4 id="users"&gt;Users&lt;/h4&gt;
&lt;p&gt;A user is an identity to be authenticated. Each user can have multiple roles. The user has a capability (such as reading or writing) on the resource if one of the roles has that capability.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/internal-protocol-versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/internal-protocol-versioning/</guid><description>&lt;p&gt;Goal: We want to be able to upgrade an individual peer in an etcd cluster to a newer version of etcd.
The process will take the form of individual followers upgrading to the latest version until the entire cluster is on the new version.&lt;/p&gt;
&lt;p&gt;Immediate need: etcd is moving too fast to version the internal API right now.
But, we need to keep mixed version clusters from being started by a rolling upgrade process (e.g. the CoreOS developer alpha).&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/op-guide/versioning/</guid><description>&lt;h3 id="service-versioning"&gt;Service versioning&lt;/h3&gt;
&lt;p&gt;etcd uses &lt;a href="http://semver.org" target="_blank" rel="noopener"&gt;semantic versioning&lt;/a&gt;
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;Get the running etcd cluster version with &lt;code&gt;etcdctl&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt; etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;127.0.0.1:2379 endpoint status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="api-versioning"&gt;API versioning&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;v3&lt;/code&gt; API responses should not change after the 3.0.0 release but new features will be added over time.&lt;/p&gt;</description></item><item><title>Versioning</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/op-guide/versioning/</guid><description>&lt;h3 id="service-versioning"&gt;Service versioning&lt;/h3&gt;
&lt;p&gt;etcd uses &lt;a href="http://semver.org" target="_blank" rel="noopener"&gt;semantic versioning&lt;/a&gt;
New minor versions may add additional features to the API.&lt;/p&gt;
&lt;p&gt;Get the running etcd cluster version with &lt;code&gt;etcdctl&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;ETCDCTL_API&lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt; etcdctl --endpoints&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;127.0.0.1:2379 endpoint status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="api-versioning"&gt;API versioning&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;v3&lt;/code&gt; API responses should not change after the 3.0.0 release but new features will be added over time.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v2.3/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.2/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Watch Memory Usage Benchmark</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-3-watch-memory-benchmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/benchmarks/etcd-3-watch-memory-benchmark/</guid><description>&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: The watch features are under active development, and their memory usage may change as that development progresses. We do not expect it to significantly increase beyond the figures stated below.&lt;/p&gt;
&lt;p&gt;A primary goal of etcd is supporting a very large number of watchers doing a massively large amount of watching. etcd aims to support O(10k) clients, O(100K) watch streams (O(10) streams per client) and O(10M) total watchings (O(100) watching per stream). The memory consumed by each individual watching accounts for the largest portion of etcd&amp;rsquo;s overall usage, and is therefore the focus of current and future optimizations.&lt;/p&gt;</description></item><item><title>Why etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/why/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.1/learning/why/</guid><description>&lt;p&gt;The name &amp;ldquo;etcd&amp;rdquo; originated from two ideas, the unix &amp;ldquo;/etc&amp;rdquo; folder and &amp;ldquo;d&amp;quot;istributed systems. The &amp;ldquo;/etc&amp;rdquo; folder is a place to store configuration data for a single system whereas etcd stores configuration information for large scale distributed systems. Hence, a &amp;ldquo;d&amp;quot;istributed &amp;ldquo;/etc&amp;rdquo; is &amp;ldquo;etcd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;etcd stores metadata in a consistent and fault-tolerant way. Distributed systems use etcd as a consistent key-value store for configuration management, service discovery, and coordinating distributed work. Common distributed patterns using etcd include leader election, &lt;a href="https://pkg.go.dev/github.com/etcd-io/etcd/clientv3/concurrency" target="_blank" rel="noopener"&gt;distributed locks&lt;/a&gt;, and monitoring machine liveness.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item></channel></rss>