22.2 安装和使用Etcd

Etcd基于Go语言实现,因此,用户可以从项目主页:https://github.com/coreos/etcd下载源代码自行编译(需要Go 1.4以上版本),也可以下载编译好的二进制文件,甚至直接使用制作好的Docker镜像文件来体验。

下面分别讲解基于二进制文件和Docker镜像的两种方式。

1.二进制文件方式

(1)下载和安装

编译好的二进制文件都在github.com/coreos/etcd/releases页面,用户可以选择需要的版本,或通过下载工具下载。

例如,下面的命令使用curl工具下载压缩包,并解压:


  1. $ curl -L https://github.com/coreos/etcd/releases/download/v3.0.4/etcd-v3.0.4-
  2. linux-amd64.tar.gz -o etcd-v3.0.4-linux-amd64.tar.gz
  3. $ tar xzvf etcd-v3.0.4-linux-amd64.tar.gz
  4. $ cd etcd-v3.0.4-linux-amd64

解压后,可以看到文件包括:


  1. $ ls
  2. Documentation etcd etcdctl README-etcdctl.md README.md

其中etcd是服务主文件,etcdctl是提供给用户的命令客户端,其他都是文档文件。

22.2 安装和使用Etcd - 图1提示

某些版本中还含有etcd-migrate二进制文件,可以进行旧版本的迁移。

通过下面的命令将二进制文件都放到系统可执行目录/usr/local/bin/或/usr/bin/:


  1. $ sudo cp etcd* /usr/local/bin/

安装就已经完成了。

(2)使用Etcd

下面将先以单节点模式为例讲解Etcd支持的功能和操作。

查看etcd的版本:


  1. $ ./etcd --version
  2. Git SHA: d53923c
  3. Go Version: go1.6.3
  4. Go OS/Arch: linux/amd64

直接执行Etcd命令,将启动一个实例监听在本地的2379和4001端口。此时,客户端可以通过本地的2379和4001端口访问Etcd;其他Etcd本地实例可以通过2380和7001端口连接到新启动实例。

显示类似如下的信息:


  1. $ etcd
  2. 2016-09-29 16:23:21.071154 I | etcdmain: etcd Version: 3.0.4
  3. 2016-09-29 16:23:21.071260 I | etcdmain: Git SHA: d53923c
  4. 2016-09-29 16:23:21.071280 I | etcdmain: Go Version: go1.6.3
  5. 2016-09-29 16:23:21.509092 I | etcdserver: setting up the initial cluster version
  6. to 2.2
  7. 2016-09-29 16:23:21.542046 N | etcdserver: set the initial cluster version to 2.2
  8. 2016-09-29 16:23:21.542226 I | etcdserver: published {Name:default ClientURLs:
  9. [http://localhost:2379 http://localhost:4001]} to cluster 7e27652122e8b2ae

此时,可以通过REST API直接查看集群健康状态:


  1. $ curl -L http://127.0.0.1:2379/health
  2. {"health": "true"}

当然,也可以使用自带的etcdctl命令进行查看(实际上是封装了REST API调用):


  1. $ etcdctl cluster-health
  2. member ce2a822cea30bfca is healthy: got healthy result from http://localhost:2379
  3. cluster is healthy

通过etcdctl设置和获取键值也十分方便,例如设置键值对testkey:"hello world":


  1. $ ./etcdctl set testkey "hello world"
  2. hello world
  3. $ ./etcdctl get testkey
  4. hello world

说明键值对已经设置成功了。

当然,除了etcdctl命令外,也可以直接通过HTTP访问本地2379端口的方式来进行操作,例如查看testkey的值:


  1. $ curl -L -X PUT http://localhost:2379/v2/keys/testkey -d value="hello world"
  2. {"action":"set","node":{"key":"/testkey","value":"hello world","modifiedIndex":
  3. 3,"createdIndex":3}}
  4. $ curl -L http://localhost:2379/v2/keys/testkey
  5. {"action":"get","node":{"key":"/testkey","value":"hello world","modifiedIndex":
  6. 3,"createdIndex":3}}

注意目前API版本为v2,将来出了新的版本后,API路径中则对应为对应版本号。

2.Docker镜像方式下载

镜像名称为quay.io/coreos/etcd:v3.0.4,可以通过下面的命令启动etcd服务监听到本地的2379和2380端口:


  1. $ docker run \
  2. -p 2379:2379 \
  3. -p 2380:2380 \
  4. -v /etc/ssl/certs/:/etc/ssl/certs/
  5. quay.io/coreos/etcd:v3.0.4

3.数据目录

作为数据库,最重要的自然是数据存放位置。可以通过—data-dir选项来指定存放的位置,默认为${name}.etcd,其中${name}为节点别名,默认为default。

例如,指定节点别名为test,则默认数据存放目录则为test.etcd:


  1. $ $ etcd --name "test"
  2. 2016-09-30 10:34:09.883714 I | etcdmain: etcd Version: 2.2.2
  3. 2016-09-30 10:34:09.883802 I | etcdmain: Git SHA: b4bddf6
  4. 2016-09-30 10:34:09.884872 I | etcdserver: heartbeat = 100ms
  5. 2016-09-30 10:34:09.884887 I | etcdserver: election = 1000ms
  6. 2016-09-30 10:34:09.884901 I | etcdserver: snapshot count = 10000

查看数据目录下内容。


  1. $ tree test.etcd
  2. test.etcd└── member
  3. ├── snap
  4. └── 0000000000000366-0000000000002711.snap
  5. └── wal
  6. └── 0000000000000000-0000000000000000.wal
  7. 3 directories, 2 files

其中,snap目录下将定期记录节点的状态快照信息,wal目录下则记录数据库的操作日志信息(可以通过—wal-dir参数来指定存放到特定目录)。

4.服务启动参数

Etcd服务启动的时候支持一些参数,用户可以通过这些参数来调整服务和集群的行为。参数可以通过环境变量形式传入,命名全部为大写,并且加ETCD_前缀,例如ETCD_NAME='etcd-cluster'。主要参数包括:通用参数、集群参数、安全相关参数、代理参数。

(1)通用参数

这些参数主要跟节点自身配置相关,参见表22-1。

表22-1 Etcd通用参数

22.2 安装和使用Etcd - 图2

(2)集群参数

这些参数跟集群行为有关,参见表22-2。

表22-2 Etcd集群参数

22.2 安装和使用Etcd - 图3

(3)安全相关参数

这些参数主要用于指定通信时候的TLS证书、密钥配置,参见表22-3。

表22-3 Etcd安全相关参数

22.2 安装和使用Etcd - 图4

(4)代理参数

这些参数主要是当Etcd服务自身仅作为代理模式时候使用,即转发来自客户端的请求到指定的Etcd集群。此时,Etcd服务本身并不参与集群中去,不保存数据和参加选举。其中的参数参见表22-4。

表22-4 Etcd代理参数

22.2 安装和使用Etcd - 图5