🍁博主简介:
🏅云计算领域优质创作者
🏅2022年CSDN新星计划python赛道第一名🏅2022年CSDN原力计划优质作者
🏅阿里云ACE认证高级工程师
🏅阿里云开发者社区专家博主💊交流社区:CSDN云计算交流社区欢迎您的加入!
目录
1.Etcd简介
2. 安装和使用Etcd
2.1 二进制文件方式
2.1.1 下载和安装
2.1.2 使用Etcd
2. Docker镜像方式下载
3. 数据目录
4. 服务启动参数
4.1 通用参数
4.2 集群参数
4.3 安全相关参数
4.4 代理参数
Etcd是CoreOS团队(同时发起了CoreoS、Rocket等热门项目)发起的一个分布式键值数据库项目,可以用于分布式系统中的配置信息管理和服务发现,目前已经被广泛应用到大量开源项目中,包括 Kubernetes、CloudFoundry和CoreOS Fleet等。
在这接下来几节的博文里面里面,博主将详细介绍该项目的相关知识,包括安装和使用,以及集群管理等。
|
1.Etcd简介
Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于Go语言实现。
接触过分布式系统的读者应该知道,分布式系统中,最基本最重要的问题就是各种信息的一致性,包括对服务的配置信息的管理、服务的发现、更新、同步等等。而要解决这些问题,往往需要基于一套能保证一致性的分布式数据库系统,比如经典的Apache ZooKeeper项目,通过维护文件目录信息来实现数据的一致性。
|
Etcd就是专门为集群环境设计,可以很好地实现数据一致性,提供集群节点状态管理和服务自动发现等。
|
Etcd目前在github.com/coreos/etcd进行维护,已经发布3.0系列版本 |
受到Apache ZooKeeper项目和doozer项目
的启发,Etcd在进行设计的时候重点考虑了下面四个要素:
·简单:支持REST风格的HTTP+JSON API;
·安全:支持HTTPS方式的访问;
·快速:支持并发每秒一千次的写操作;
·可靠:支持分布式结构,基于Raft算法实现一致性。
|
通常情况下,用户使用Etcd可以在多个节点上启动多个实例,并将它们添加为一个集群。同一个集群中的Etcd实例将会自动保持彼此信息的一致性,这意味着分布在各个节点上的应用也将获取到一致的信息。
Apache ZooKeeper是一套知名的分布式系统中进行同步和一致性管理的工具。
doozer是一个一致性分布式数据库实现,主要面向少量数据。
Raft是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的Paxos算法,它的算法过程相对容易理解,由Stanford大学的Diego Ongaro和John Ousterhout提出。
|
2. 安装和使用Etcd
Etcd基于Go语言实现,因此,用户可以从项目主页:
https://github.com/coreos/etcd
下载源代码自行编译(需要Go 1.4以上版本),也可以下载编译好的二进制文件,甚至直接使用制作好的Docker镜像文件来体验。
下面分别讲解基于二进制文件和Docker镜像的两种方式。
|
2.1 二进制文件方式
2.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.1.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命令进行查看(实际上是封装了RESTAPI调用):
|
$ 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'。主要参数包括:通用参数、集群参数、安全相关参数、代理参数。
|
4.1 通用参数
这些参数主要跟节点自身配置相关,如下: |
4.2 集群参数
这些参数跟集群行为有关,如下: |
4.3 安全相关参数
这些参数主要用于指定通信时候的TLS证书、密钥配置,如下: |
4.4 代理参数
这些参数主要是当Etcd服务自身仅作为代理模式时候使用,即转发来自客户端的请求到指定的Etcd集群。此时,Etcd服务本身并不参与集群中去,不保存数据和参加选举。如下:
|
👑👑👑结束语👑👑👑