💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 使用 etcdctl `etcdctl` 是一个命令行客户端,它能提供一些简洁的命令,供用户直接跟 `etcd` 服务打交道,而无需基于 `HTTP API` 方式。这在某些情况下将很方便,例如用户对服务进行测试或者手动修改数据库内容。我们也推荐在刚接触 `etcd` 时通过 `etcdctl` 命令来熟悉相关的操作,这些操作跟 `HTTP API` 实际上是对应的。 `etcd` 项目二进制发行包中已经包含了 `etcdctl` 工具,没有的话,可以从 [github.com/coreos/etcd/releases](https://github.com/coreos/etcd/releases) 下载。 `etcdctl` 支持如下的命令,大体上分为数据库操作和非数据库操作两类,后面将分别进行解释。 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">NAME</span><span class="pun">:</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> etcdctl </span><span class="pun">-</span><span class="pln"> A simple command line client </span><span class="kwd">for</span><span class="pln"> etcd3</span><span class="pun">.</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">USAGE</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> etcdctl</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">VERSION</span><span class="pun">:</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="lit">3.2</span><span class="pun">.</span><span class="lit">10</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">API VERSION</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="lit">3.2</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">COMMANDS</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> the key </span><span class="kwd">or</span><span class="pln"> a range of keys</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> put </span><span class="typ">Puts</span><span class="pln"> the given key </span><span class="kwd">into</span><span class="pln"> the store</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">del</span><span class="pln"> </span><span class="typ">Removes</span><span class="pln"> the specified key </span><span class="kwd">or</span><span class="pln"> range of keys </span><span class="pun">[</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> range_end</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> txn </span><span class="typ">Txn</span><span class="pln"> processes all the requests </span><span class="kwd">in</span><span class="pln"> one transaction</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> compaction </span><span class="typ">Compacts</span><span class="pln"> the </span><span class="kwd">event</span><span class="pln"> history </span><span class="kwd">in</span><span class="pln"> etcd</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> alarm disarm </span><span class="typ">Disarms</span><span class="pln"> all alarms</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> alarm list </span><span class="typ">Lists</span><span class="pln"> all alarms</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> defrag </span><span class="typ">Defragments</span><span class="pln"> the storage of the etcd members </span><span class="kwd">with</span><span class="pln"> given endpoints</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> endpoint health </span><span class="typ">Checks</span><span class="pln"> the healthiness of endpoints specified </span><span class="kwd">in</span><span class="pln"> </span><span class="str">`--endpoints`</span><span class="pln"> flag</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> endpoint status </span><span class="typ">Prints</span><span class="pln"> </span><span class="kwd">out</span><span class="pln"> the status of endpoints specified </span><span class="kwd">in</span><span class="pln"> </span><span class="str">`--endpoints`</span><span class="pln"> flag</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> watch </span><span class="typ">Watches</span><span class="pln"> events stream on keys </span><span class="kwd">or</span><span class="pln"> prefixes</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> version </span><span class="typ">Prints</span><span class="pln"> the version of etcdctl</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease grant </span><span class="typ">Creates</span><span class="pln"> leases</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease revoke </span><span class="typ">Revokes</span><span class="pln"> leases</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease timetolive </span><span class="typ">Get</span><span class="pln"> lease information</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease keep</span><span class="pun">-</span><span class="pln">alive </span><span class="typ">Keeps</span><span class="pln"> leases alive </span><span class="pun">(</span><span class="pln">renew</span><span class="pun">)</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member add </span><span class="typ">Adds</span><span class="pln"> a member </span><span class="kwd">into</span><span class="pln"> the cluster</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member remove </span><span class="typ">Removes</span><span class="pln"> a member </span><span class="kwd">from</span><span class="pln"> the cluster</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member update </span><span class="typ">Updates</span><span class="pln"> a member </span><span class="kwd">in</span><span class="pln"> the cluster</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member list </span><span class="typ">Lists</span><span class="pln"> all members </span><span class="kwd">in</span><span class="pln"> the cluster</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot save </span><span class="typ">Stores</span><span class="pln"> an etcd node backend snapshot to a given file</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot restore </span><span class="typ">Restores</span><span class="pln"> an etcd member snapshot to an etcd directory</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot status </span><span class="typ">Gets</span><span class="pln"> backend snapshot status of a given file</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> make</span><span class="pun">-</span><span class="pln">mirror </span><span class="typ">Makes</span><span class="pln"> a mirror at the destination etcd cluster</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> migrate </span><span class="typ">Migrates</span><span class="pln"> keys </span><span class="kwd">in</span><span class="pln"> a v2 store to a mvcc store</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">lock</span><span class="pln"> </span><span class="typ">Acquires</span><span class="pln"> a named </span><span class="kwd">lock</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> elect </span><span class="typ">Observes</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> participates </span><span class="kwd">in</span><span class="pln"> leader election</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> auth enable </span><span class="typ">Enables</span><span class="pln"> authentication</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> auth disable </span><span class="typ">Disables</span><span class="pln"> authentication</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user add </span><span class="typ">Adds</span><span class="pln"> a </span><span class="kwd">new</span><span class="pln"> user</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user </span><span class="kwd">delete</span><span class="pln"> </span><span class="typ">Deletes</span><span class="pln"> a user</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> detailed information of a user</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user list </span><span class="typ">Lists</span><span class="pln"> all users</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user passwd </span><span class="typ">Changes</span><span class="pln"> password of user</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user grant</span><span class="pun">-</span><span class="pln">role </span><span class="typ">Grants</span><span class="pln"> a role to a user</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user revoke</span><span class="pun">-</span><span class="pln">role </span><span class="typ">Revokes</span><span class="pln"> a role </span><span class="kwd">from</span><span class="pln"> a user</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role add </span><span class="typ">Adds</span><span class="pln"> a </span><span class="kwd">new</span><span class="pln"> role</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role </span><span class="kwd">delete</span><span class="pln"> </span><span class="typ">Deletes</span><span class="pln"> a role</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> detailed information of a role</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role list </span><span class="typ">Lists</span><span class="pln"> all roles</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role grant</span><span class="pun">-</span><span class="pln">permission </span><span class="typ">Grants</span><span class="pln"> a key to a role</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role revoke</span><span class="pun">-</span><span class="pln">permission </span><span class="typ">Revokes</span><span class="pln"> a key </span><span class="kwd">from</span><span class="pln"> a role</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> check perf </span><span class="typ">Check</span><span class="pln"> the performance of the etcd cluster</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> help </span><span class="typ">Help</span><span class="pln"> about any command</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OPTIONS</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">cacert</span><span class="pun">=</span><span class="str">""</span><span class="pln"> verify certificates of TLS</span><span class="pun">-</span><span class="pln">enabled secure servers </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> CA bundle</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">cert</span><span class="pun">=</span><span class="str">""</span><span class="pln"> identify secure client </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> TLS certificate file</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">command</span><span class="pun">-</span><span class="pln">timeout</span><span class="pun">=</span><span class="lit">5s</span><span class="pln"> timeout </span><span class="kwd">for</span><span class="pln"> </span><span class="kwd">short</span><span class="pln"> running command </span><span class="pun">(</span><span class="pln">excluding dial timeout</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">debug</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> enable client</span><span class="pun">-</span><span class="pln">side debug logging</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">dial</span><span class="pun">-</span><span class="pln">timeout</span><span class="pun">=</span><span class="lit">2s</span><span class="pln"> dial timeout </span><span class="kwd">for</span><span class="pln"> client connections</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">endpoints</span><span class="pun">=[</span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pun">:</span><span class="lit">2379</span><span class="pun">]</span><span class="pln"> gRPC endpoints</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">hex</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="kwd">byte</span><span class="pln"> strings </span><span class="kwd">as</span><span class="pln"> hex encoded strings</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">insecure</span><span class="pun">-</span><span class="pln">skip</span><span class="pun">-</span><span class="pln">tls</span><span class="pun">-</span><span class="pln">verify</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> skip server certificate verification</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">insecure</span><span class="pun">-</span><span class="pln">transport</span><span class="pun">[=</span><span class="kwd">true</span><span class="pun">]</span><span class="pln"> disable transport security </span><span class="kwd">for</span><span class="pln"> client connections</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">key</span><span class="pun">=</span><span class="str">""</span><span class="pln"> identify secure client </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> TLS key file</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">user</span><span class="pun">=</span><span class="str">""</span><span class="pln"> username</span><span class="pun">[:</span><span class="pln">password</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> authentication </span><span class="pun">(</span><span class="pln">prompt </span><span class="kwd">if</span><span class="pln"> password </span><span class="kwd">is</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> supplied</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">-</span><span class="pln">w</span><span class="pun">,</span><span class="pln"> </span><span class="pun">--</span><span class="pln">write</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">=</span><span class="str">"simple"</span><span class="pln"> </span><span class="kwd">set</span><span class="pln"> the output format </span><span class="pun">(</span><span class="pln">fields</span><span class="pun">,</span><span class="pln"> json</span><span class="pun">,</span><span class="pln"> protobuf</span><span class="pun">,</span><span class="pln"> simple</span><span class="pun">,</span><span class="pln"> table</span><span class="pun">)</span></code></li> </ol> ``` ### 数据库操作 数据库操作围绕对键值和目录的 CRUD (符合 REST 风格的一套操作:Create)完整生命周期的管理。 etcd 在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如 `testkey`,此时实际上放在根目录 `/` 下面,也可以为指定目录结构,如 `cluster1/node2/testkey`,则将创建相应的目录结构。 > 注:CRUD 即 Create, Read, Update, Delete,是符合 REST 风格的一套 API 操作。 #### put ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl put </span><span class="pun">/</span><span class="pln">testdir</span><span class="pun">/</span><span class="pln">testkey </span><span class="str">"Hello world"</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OK</span></code></li> </ol> ``` #### get 获取指定键的值。例如 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl put testkey hello</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OK</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl get testkey</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">testkey</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">hello</span></code></li> </ol> ``` 支持的选项为 `--sort` 对结果进行排序 `--consistent` 将请求发给主节点,保证获取内容的一致性 #### del 删除某个键值。例如 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl del testkey</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">1</span></code></li> </ol> ``` ### 非数据库操作 #### watch 监测一个键值的变化,一旦键值发生更新,就会输出最新的值。 例如,用户更新 `testkey` 键值为 `Hello world`。 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl watch testkey</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">PUT</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">testkey</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">2</span></code></li> </ol> ``` #### member 通过 `list`、`add`、`update`、`remove` 命令列出、添加、更新、删除 etcd 实例到 etcd 集群中。 例如本地启动一个 `etcd` 服务实例后,可以用如下命令进行查看。 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl member list</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">422a74f03b622fef</span><span class="pun">,</span><span class="pln"> started</span><span class="pun">,</span><span class="pln"> node1</span><span class="pun">,</span><span class="pln"> http</span><span class="pun">://</span><span class="lit">172.16</span><span class="pun">.</span><span class="lit">238.100</span><span class="pun">:</span><span class="lit">2380</span><span class="pun">,</span><span class="pln"> http</span><span class="pun">://</span><span class="lit">172.16</span><span class="pun">.</span><span class="lit">238.100</span><span class="pun">:</span><span class="lit">23</span></code></li> </ol> ```