【云原生 | 46】高可用的开源键值数据库Etcd的安装与使用

news2024/9/20 7:49:42

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

 👑👑👑结束语👑👑👑




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券|超300家机构关注两大赛道龙头,透露市场增长及发展方向

中科创达、奥普特成为本周调研组织数量最多的两家公司。 智能操作体系龙头获365家组织调研 证券时报数据宝计算,11月27日至12月3日,组织算计调研上市公司291家。被调研方多属于电子、机械设备、医药生物、电力设备、计算机、国防军工等板块,…

安卓属性动画

​ 一.三种安卓动画 Tween Animation(补间动画、视图动画):通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生的动画效果,即是一种渐变动画。 Frame Animation(帧动画):顺序播放事先做好的图像&…

基于PLC的工业晾晒架系统

目录 前言 6 第一章 工业晾晒架的发展现状及趋势 7 1.1自动工业晾晒架的基本介绍 7 1.2自动工业晾晒架发展史和发展现状 8 第二章 自动晾晒架的智能模块 9 2.1自动晾晒架的结构框图 9 2.2自动晾晒架的机械理论 10 第三章 自动晾晒架的硬件设计 11 3.1电源设计部分 12 3.2 PLC的…

组合模式

文章目录思考组合模式1.组合模式的本质2.何时选用组合模式3.优缺点4.实现思考组合模式 组合模式实际上就是让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。 1.组合模式的本质 组合模式的本质:统一叶子对象和组合对象。 组合模式通过把叶…

No.179 念念随风上九霄

引言有人跟老梁说,你挺忙的吧,更新变少了。害,可不是嘛?时间不太够,凑不出来了。凑不出来就不凑它了,扯扯其他的吧。在大城市生活节奏是快,个人也被裹挟着运转,无处可逃。从早到晚&a…

[附源码]计算机毕业设计基于SpringBoot动漫电影网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何用 7 分钟击破 Serverless 落地难点?

当前,Serverless 覆盖的技术场景正在不断变广。Serverless 已在微服务、在线应用、事件驱动、任务处理等众多场景被验证且广泛应用 。当你想要部署一个网站时,需要自己购买服务器并花费时间去维护,造成资源浪费不说,还要耗费精力。…

【NR 物理资源】

NR中与物理资源相关的概念主要包括天线端口、资源网格、资源单元、资源块RB和BWP等。 文章目录天线端口(Antenna Ports)资源网格Resource grid和资源单元RE资源块Resource Block部分带宽BWP天线端口(Antenna Ports) 天线端口定义 …

qmake source code 解读

qmake的主要功能执行入口在main.cpp中的runQMake(int argc, char **argv)中。其主要框架如下: runQMake(int argc, char **argv){QMakeVfs vfs; //初始化qmake的文件系统。virtual file system。vfs会为每个文件赋予一个id,并提供根据id进行操作的函数。Option::vfs &v…

交通流的微观模型(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

用好单例设计模式,代码性能提升300%

目录 一次请求执行流程java代码是如何运行的?堆内存满了后怎么办?用单例模式如何优化系统性能? 大家好,今天给大家分享一个写代码的设计模式,就是我们最最耳熟能详的单例设计模式。 可能很多人都听说过这个单例设计模…

基于Dijkstra和A*算法的机器人路径规划(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 网络分析是GIS中非常重要的空间分析功能之一, 最短路径分析又是网络分析的核心算法, 该算法的效率决定了网络分析的功能和效率…

【CSDN】官方Markdown示例教程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Docker学习系列3:常用命令之容器命令

本文是Docker学习系列教程中的第三篇。前几篇教程如下: 「图文教程」Windows11下安装Docker Desktop 「填坑」在windows系统下安装Docker Desktop后迁移镜像位置 Docker学习系列1-如何安装docker? 【Docker学习系列】Docker学习2-docker设置阿里云镜像加速器 【Doc…

简单宠物网页设计作业 静态HTML动物介绍网页作业 DW宠物网站模板下载 大学生简单野生动物网页作品代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ADSP-21569/ADSP-21593的开发入门(下)

开始调试 软硬件都准备好了,该插的JTAG头,2根usb线都插好了,我们就开始进入调试,首先是要搭建软件环境。 软件用的是CCES,这个软件是基于Eclipse的,基本操作跟他都一样,我们首先打开软件。 他…

阿里资深架构师钟华曰:中台战略思想与架构实战;含内部实施手册

​ 编辑 添加图片注释,不超过 140 字(可选) 最近在读一本书,叫做《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》,在写此文时本书还没有看完,因为担心如果把书全部看完后再来写这篇文…

Android轮播图控件com.github.pinguo-zhouwei:MZBannerView:v2.0.2

build.gradle 配置&#xff1a; dependencies { compile com.github.pinguo-zhouwei:MZBannerView:v2.0.2}xml布局&#xff1a; <com.zhouwei.mzbanner.MZBannerViewandroid:id"id/banner"android:layout_width"match_parent"android:layout_height&quo…

SpringBoot项目实现发布订阅模式,真的很简单

大家好&#xff0c;我是老三&#xff0c;在项目里&#xff0c;经常会有一些主线业务之外的其它业务&#xff0c;比如&#xff0c;下单之后&#xff0c;发送通知、监控埋点、记录日志…… 这些非核心业务&#xff0c;如果全部一梭子写下去&#xff0c;有两个问题&#xff0c;一…

python中的集合详解

目录 一.思考 二.集合 基本语法 集合的常用操作——修改 1.添加新元素 2.移除元素 3.从集合中随机取出元素 4.清空集合 5. 消除两个集合的差集 6.两个集合的合并 注意&#xff1a;集合的遍历 三.集合总结 一.思考 为什么使用集合&#xff1f; 我们目前接触到了列表、元…