【云原生 | 46】高可用的开源键值数据库Etcd的安装与使用
创始人
2024-03-18 14:54:30

🍁博主简介
        🏅云计算领域优质创作者
        🏅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服务本身并不参与集群中去,不保存数据和参加选举。如下:

 👑👑👑结束语👑👑👑




相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...