22.2 安装和使用Etcd
Etcd基于Go语言实现,因此,用户可以从项目主页:https://github.com/coreos/etcd下载源代码自行编译(需要Go 1.4以上版本),也可以下载编译好的二进制文件,甚至直接使用制作好的Docker镜像文件来体验。
下面分别讲解基于二进制文件和Docker镜像的两种方式。
1.二进制文件方式
(1)下载和安装
编译好的二进制文件都在github.com/coreos/etcd/releases页面,用户可以选择需要的版本,或通过下载工具下载。
例如,下面的命令使用curl工具下载压缩包,并解压:
- $ curl -L https://github.com/coreos/etcd/releases/download/v3.0.4/etcd-v3.0.4-
- linux-amd64.tar.gz -o etcd-v3.0.4-linux-amd64.tar.gz
- $ tar xzvf etcd-v3.0.4-linux-amd64.tar.gz
- $ cd etcd-v3.0.4-linux-amd64
解压后,可以看到文件包括:
- $ ls
- Documentation etcd etcdctl README-etcdctl.md README.md
其中etcd是服务主文件,etcdctl是提供给用户的命令客户端,其他都是文档文件。
提示
某些版本中还含有etcd-migrate二进制文件,可以进行旧版本的迁移。
通过下面的命令将二进制文件都放到系统可执行目录/usr/local/bin/或/usr/bin/:
- $ sudo cp etcd* /usr/local/bin/
安装就已经完成了。
(2)使用Etcd
下面将先以单节点模式为例讲解Etcd支持的功能和操作。
查看etcd的版本:
- $ ./etcd --version
- Git SHA: d53923c
- Go Version: go1.6.3
- Go OS/Arch: linux/amd64
直接执行Etcd命令,将启动一个实例监听在本地的2379和4001端口。此时,客户端可以通过本地的2379和4001端口访问Etcd;其他Etcd本地实例可以通过2380和7001端口连接到新启动实例。
显示类似如下的信息:
- $ etcd
- 2016-09-29 16:23:21.071154 I | etcdmain: etcd Version: 3.0.4
- 2016-09-29 16:23:21.071260 I | etcdmain: Git SHA: d53923c
- 2016-09-29 16:23:21.071280 I | etcdmain: Go Version: go1.6.3…
- 2016-09-29 16:23:21.509092 I | etcdserver: setting up the initial cluster version
- to 2.2
- 2016-09-29 16:23:21.542046 N | etcdserver: set the initial cluster version to 2.2
- 2016-09-29 16:23:21.542226 I | etcdserver: published {Name:default ClientURLs:
- [http://localhost:2379 http://localhost:4001]} to cluster 7e27652122e8b2ae
此时,可以通过REST API直接查看集群健康状态:
- $ curl -L http://127.0.0.1:2379/health
- {"health": "true"}
当然,也可以使用自带的etcdctl命令进行查看(实际上是封装了REST API调用):
- $ etcdctl cluster-health
- member ce2a822cea30bfca is healthy: got healthy result from http://localhost:2379
- cluster is healthy
通过etcdctl设置和获取键值也十分方便,例如设置键值对testkey:"hello world":
- $ ./etcdctl set testkey "hello world"
- hello world
- $ ./etcdctl get testkey
- hello world
说明键值对已经设置成功了。
当然,除了etcdctl命令外,也可以直接通过HTTP访问本地2379端口的方式来进行操作,例如查看testkey的值:
- $ curl -L -X PUT http://localhost:2379/v2/keys/testkey -d value="hello world"
- {"action":"set","node":{"key":"/testkey","value":"hello world","modifiedIndex":
- 3,"createdIndex":3}}
- $ curl -L http://localhost:2379/v2/keys/testkey
- {"action":"get","node":{"key":"/testkey","value":"hello world","modifiedIndex":
- 3,"createdIndex":3}}
注意目前API版本为v2,将来出了新的版本后,API路径中则对应为对应版本号。
2.Docker镜像方式下载
镜像名称为quay.io/coreos/etcd:v3.0.4,可以通过下面的命令启动etcd服务监听到本地的2379和2380端口:
- $ docker run \
- -p 2379:2379 \
- -p 2380:2380 \
- -v /etc/ssl/certs/:/etc/ssl/certs/
- quay.io/coreos/etcd:v3.0.4
3.数据目录
作为数据库,最重要的自然是数据存放位置。可以通过—data-dir选项来指定存放的位置,默认为${name}.etcd,其中${name}为节点别名,默认为default。
例如,指定节点别名为test,则默认数据存放目录则为test.etcd:
- $ $ etcd --name "test"
- 2016-09-30 10:34:09.883714 I | etcdmain: etcd Version: 2.2.2
- 2016-09-30 10:34:09.883802 I | etcdmain: Git SHA: b4bddf6…
- 2016-09-30 10:34:09.884872 I | etcdserver: heartbeat = 100ms
- 2016-09-30 10:34:09.884887 I | etcdserver: election = 1000ms
- 2016-09-30 10:34:09.884901 I | etcdserver: snapshot count = 10000
查看数据目录下内容。
- $ tree test.etcd
- test.etcd└── member
- ├── snap
- │ └── 0000000000000366-0000000000002711.snap
- └── wal
- └── 0000000000000000-0000000000000000.wal
- 3 directories, 2 files
其中,snap目录下将定期记录节点的状态快照信息,wal目录下则记录数据库的操作日志信息(可以通过—wal-dir参数来指定存放到特定目录)。
4.服务启动参数
Etcd服务启动的时候支持一些参数,用户可以通过这些参数来调整服务和集群的行为。参数可以通过环境变量形式传入,命名全部为大写,并且加ETCD_前缀,例如ETCD_NAME='etcd-cluster'。主要参数包括:通用参数、集群参数、安全相关参数、代理参数。
(1)通用参数
这些参数主要跟节点自身配置相关,参见表22-1。
表22-1 Etcd通用参数

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

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

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

