etcd快速入门

news2024/12/29 10:32:21
  1. etcd是什么
    etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。
    etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。

    etcd作为服务发现系统,有以下的特点:
    1.简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
    2.安全:支持SSL证书验证
    3.快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
    4.可靠:采用raft算法,实现分布式系统数据的可用性和一致性

    etcd项目地址:https://github.com/coreos/etcd/
    etcd下载地址:https://github.com/etcd-io/etcd/releases 根据需要查找对应版本下载即可

  2. etcd应用场景
    1.服务发现(重点)
    服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,
    即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接

    注1:etcd可以理解成springcloud中的注册中心,用于服务注册和发现
    注2:Kubernetes: 将docker集群的配置信息存储到etcd中,用于服务发现和集群管理;etcd 的一致性对于正确安排和运行服务至关重要。
    Kubernetes API 服务器将群集状态持久化在 etcd 中。它使用etcd的 watch API监视集群,并发布关键的配置更改

    2.消息发布与订阅
    3.负载均衡
    4.分布式通知与协调
    5.分布式锁

  3. etcd关键词
    Raft:etcd所采用的保证分布式系统强一致性的算法。
    Node:一个Raft状态机实例。
    Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
    Cluster:由多个Member构成可以协同工作的etcd集群。
    Peer:对同一个etcd集群中另外一个Member的称呼。
    Client: 向etcd集群发送HTTP请求的客户端。
    WAL:预写式日志,etcd用于持久化存储的日志格式。
    snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
    Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
    Leader(领导者):Raft算法中通过竞选而产生的处理所有数据提交的节点。
    Follower(跟随者):竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
    Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选。
    Term:某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term。
    Index:数据项编号。Raft中通过Term和Index来定位数据。

  4. etcd工作原理
    在这里插入图片描述

    从etcd的架构图中我们可以看到,etcd主要分为四个部分
    第1部分是HTTP Server: 用于处理用户发送的API请求,以及其它etcd节点的同步与心跳信息请求
    第2部分是Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现
    第3部分是Raft:Raft强一致性算法的具体实现,是etcd的核心
    第4部分是WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。
    在WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容

    通常,一个用户的请求发送过来,会经由HTTP Server转发给Store,以进行具体的事务处理。如果涉及到节点修改,则交给Raft模块进行状态变更、日志记录;
    然后,再同步给别的etcd节点,以确认数据提交;最后,进行数据提交,再次同步

  5. etcd安装前介绍
    1.etcd在生产环境中一般推荐集群方式部署
    2.etcd使用的2个默认端口号:2379和2380
    2379:用于客户端通信(类似于sqlserver的1433/oracle的1521/mysql的3306)
    2380:用于与集群中的Peer通信
    3.因为etcd是go语言编写的,安装只需要下载对应的二进制文件,并放到合适的路径就行。

  6. etcd安装(单节点)
    1.下载并安装

    1.创建并切换到下载目录

    mkdir /usr/local/mytools && cd /usr/local/mytools

    2.直接下载速度太慢,建议提前下载安装包再用rz上传

    附安装包:https://pan.baidu.com/s/1ZdEucW8R6M6zB2VmtVHitw
    提取码:b7bl
    #apt install lrzsz
    #wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz

    3.解压文件到当前目录

    tar xzvf etcd-v3.4.3-linux-amd64.tar.gz

    4.切换至etcd根目录,运行查看命令ls,里面会有一些文档和2个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端

    cd etcd-v3.4.3-linux-amd64 && ls

    5.将etcd和etcdctl二进制文件复制到/usr/local/bin目录,why?这样系统中可以直接调用etcd/etcdctl这两个程序

    cp etcd etcdctl /usr/local/bin

    6.查看etcd版本

    etcd --version
    ############## 注意:etct3.4.3默认使用v3命令所以步骤7可省略,之前版本此步骤不可少,例如:v3.3.10 ##############

    7.设置etcdctl版本(v2/v3)

    编辑环境变量

    vi /etc/profile

    最后一行指定etcdctl命令的版本为v3

    export ETCDCTL_API=3

    刷新环境变量

    source /etc/profile
    #查看当前etcdctl的版本信息
    #v2版本命令和v3命令是不一样的,例如:
    #v2查看版本号
    etcdctl -version或 etcdctl -v
    #v3查看版本号
    etcdctl version

    更多命令帮助可以查询

    etcdctl --help

    注1:重要注意事项,etcd版本不一样,命令是不一样,但可以通过etcdctl --help命令查看变化

    2.测试,输入命令etcd,即可启动一个单节点的etcd服务,ctrl+c即可停止服务
    etcd 哨兵 选举

    etcd服务启动成功后,控制台会输出很多信息,重要的几个参数说明如下:
    1.name表示节点名称,默认为default。
    2.data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。
    3.在http://localhost:2380和集群中其他节点通信。
    4.在http://localhost:2379提供客户端交互。
    5.heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms。
    6.election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms。
    7.snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
    8.集群和每个节点都会生成一个uuid。
    9.启动的时候会运行raft,选举出leader

    请注意,采用这种方式启动的etcd只是一个程序,如果启动etcd的窗口被关闭的话则etcd便会被关闭,
    所以如果要长期使用的话最好是为etcd开启一个服务,在后台运行

    3.创建一个etcd服务

    1.建立etcd相关目录(即数据文件和配置文件的保存位置)

    /etc目录是整个Linux系统的中心,其中包含所有系统管理和维护方面的配置文件,所以etcd的配置也放在这里

    mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/

    2.创建etcd配置文件

    vim /etc/etcd/etcd.conf

# 节点名称
ETCD_NAME="etcd0"
# 指定数据文件存放位置
ETCD_DATA_DIR="/var/lib/etcd/"

3.创建systemd配置文件

vim /etc/systemd/system/etcd.service

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
User=root
Type=notify
WorkingDirectory=/var/lib/etcd/
## 根据实际情况修改EnvironmentFileExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

4.启动/停止/查看etcd服务

1.重新加载systemd服务

systemctl daemon-reload

2.设置开机自启动

systemctl enable etcd

3.启动etcd

 systemctl start etcd

4.查看etcd运行状态

systemctl status etcd

5.停止服务

systemctl stop etcd

6.重启etcd

systemctl restart etcd

systemctl daemon-reload && systemctl enable etcd && systemctl start etcd && systemctl status etcd

systemctl daemon-reload && systemctl restart etcd

至此单机版etcd安装及测试成功成功,但如果启动失败,可通过如下两个命令查看原因
systemctl status etcd.service
## 详细查看命令
journalctl -xe

  1. etcd基本使用
    etcdctl是一个命令行客户端,可以对etcd服务进行测试或者手动修改数据库内容。另外,etcdctl还支持HTTP API(之后介绍)。
    etcdctl支持的命令大体上分为数据库操作和非数据库操作两类
    1.数据库操作
    数据库操作围绕对键值和目录的CRUD完整生命周期的管理
    etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:testkey,
    此时实际上放在根目录/下面,也可以为指定目录结构,如/cluster1/node2/testkey,则将创建相应的目录结构

    0.帮助命令
    etcdctl -h

    1.put
    指定某个键的值。例如
    etcdctl put /testdir/testkey “Hello world”
    ##控制台输出
    Hello world

    支持的选项包括
    --ttl '0' 该键值的超时时间(单位为秒),不配置(默认为0)则永不超时
    --swap-with-value value 若该键现在的值是value,则进行设置操作
    --swap-with-index '0'   若该键现在的索引值是指定索引,则进行设置操作
    

    2.get
    获取指定键的值。例如:
    etcdctl get /testdir/testkey

    支持的选项为:
    --sort 对结果进行排序
    --consistent 将请求发给主节点,保证获取内容的一致性。
    

    3.del
    清空数据
    etcdctl del / --prefix
    删除所有/test前缀的节点
    etcdctl del /test --prefix

    4.其它命令
    update/rm/mk/mkdir/setdir/updatedir/rmdir/ls/

    2.非数据库操作
    非数据库操作包括:备份、监测、节点管理等
    1.backup
    备份etcd的数据
    2.watch
    监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出
    1.在一个终端运行
    etcdctl watch key1
    2.在第2个终端运行put/get/del命令
    etcdctl put key1 “zzz”
    #因为get操作值无变化,所以watch命令是没有任何反应的
    etcdctl get key1
    etcdctl del key1
    3.exec-watch
    监测一个键值的变化,一旦键值发生更新,就执行给定命令
    4.member
    通过list、add、remove命令列出、添加、删除etcd实例到etcd集群中

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

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

相关文章

分享67个PHP源码,总有一款适合您

链接:https://pan.baidu.com/s/1MzKN0bLDRv0i290R2erMHQ?pwdbo2i 提取码:bo2i PHP源码 分享67个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载…

寒假每日一题W1D3——上课睡觉

题目描述 有 N 堆石子,每堆的石子数量分别为 a1,a2,…,aN。 你可以对石子堆进行合并操作,将两个相邻的石子堆合并为一个石子堆,例如,如果 a[1,2,3,4,5],合并第 2,3 堆石子,则石子堆集合变为 a[1,5,4,5]。…

【学习】backdoor attacks、Adversarial Attack on Images、Adversarial Attack on Audio

文章目录一、后门攻击backdoor attacks1、data poisoning2、backdoored PLM3、defenseONION4、后门攻击:绕过ONION防御5、摘要二、Adversarial Attack on Imagesone pixel attackdifferential evolution三、Adversarial Attack on Audio一、后门攻击backdoor attacks 什么是后…

进程的终止和等待

目录 进程终止 如何获取退出码呢? 进程退出方法有哪些? 对于进程退出,内核OS做了什么? 进程等待 为什么要进行进程等待? 如何进行进程等待? 什么是阻塞和非阻塞等待? 进程终止 对于进程…

飞依诺冲刺科创板上市:上半年出现亏损,因商业秘密纠纷被起诉

近日,飞依诺科技股份有限公司(下称“飞依诺”)在上海证券交易所递交招股书,准备在科创板上市。本次冲刺上市,飞依诺计划募资11.22亿元,将用于生产基地升级项目、新产品研发与总部基地建设项目、营销网络建设…

【Linux】一文掌握Linux基本指令(下)

本章命令大致总结命令功能cat打印文件内容echo打印文件内容> 输出重定向 >>追加重定向< 输入重定向 more 查看文本内容 less等价于morehead打印文本前n行tail 打印文本后n行 |管道date时间相关cal日历sort文本排序uniq相邻文本降重zip打包压缩unzip解包tar打包/解包…

蓝桥杯寒假集训第四天(全球变暖DFS)

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 有一个正方形区域&#xff0c;里面有大陆和海洋&#xff0c;暂且用‘.’表示海洋&#xff0c;用‘#’表示大陆。我们把上下左右都连在一起的大陆称之为岛屿。但是随着气温…

07 来自于网友的 retrieveFileStream 的一个问题, 导致系统程序异常

前言 可以先参考前面一篇文章 retrieveFileStream 之后需要调用 completePendingCommand 否则业务代码会存在问题 retrieveFileStream 之后需要调用 completePendingCommand 否则业务代码会存在问题 这里的问题 主要是来自于 某 qq 交流群的网友 呵呵 当然 这里测试用例代码…

新鲜速递:Spring Data JPA 3.0快速入门、进阶到精通

第一章、安装Spring Data JPA 第一步&#xff0c;先确保你使用的是Spring Boot 3.0或以上环境&#xff0c;可以在pom.xml里加入Spring Data JPA依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-…

【ROS】—— ROS通信机制——话题通信(二)

文章目录前言1. 话题通信1.1 话题通讯理论模型1.2 话题通信基本操作&#xff08;C&#xff09;1.2.1 简单发布框架的实现1.2.2 发布逻辑的实现1.2.3 订阅方的实现1.3 话题通信基本操作&#xff08;python&#xff09;1.3.1 发布的实现1.3.2 订阅的实现1.4 话题通信自定义msg1.4…

五问补盲(五)| 想要长得好看又好用,补盲激光雷达应该怎么做?

上期&#xff0c;我们聊了好用的补盲激光雷达&#xff0c;得满足哪些条件&#xff1f; 好用是必备素质&#xff0c;属于补盲激光雷达的底线。好用之外&#xff0c;补盲激光雷达还有一种更直观的竞争力&#xff0c;那就是——外型。 有句话说的好&#xff0c;很多时候&#xff0…

2022跟学尚硅谷Maven入门(二)IDEA操作

2022跟学尚硅谷Maven入门二 IDEA操作第四章 使用Maven&#xff1a;IDEA环境第一节 创建父工程1.创建 Project2.开启自动导入第二节 配置 Maven 信息第三节 创建 Java 模块工程第四节 创建Web模块工程1.创建模块2.修改打包方式3.Web 设定4.借助IDEA生成web.xml5.设置 Web 资源的…

数据库,计算机网络、操作系统刷题笔记21

数据库&#xff0c;计算机网络、操作系统刷题笔记21 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

基于thinkphp6搭建的 admin后台管理基础框架,方便快速进行二次开发

小牛Admin v2.1 完整代码下载地址&#xff1a;基于thinkphp6搭建的 admin后台管理基础框架 使用thinkphp6 layui 搭建的 admin后台管理基础框架&#xff0c;方便快速进行二次开发 该项目是在 http://www.xnadmin.cn/ 小牛Admin 开源项目的基础上进行个人优化的产物 运行环境…

Redis-用户签到UV统计

一、用户签到 1.1 BitMap用法 我们按月来统计用户签到信息&#xff0c;签到记录为1,未签到记录为0 把每一个bit位对应当月的每一天&#xff0c;形成了映射关系。用0和1表示业务状态&#xff0c;这种思路就称为位。Redis中是用利用string类型数据结构实现BitMap&#xff0c;因…

使用pip命令时,报错:_sysconfigdata_x86_64_conda_cos7_linux_gnu.py

问题&#xff1a; 在linux服务器中想使用pip命令pip show list查看安装了哪些包时&#xff0c;报错 ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_cos7_linux_gnu’ 问题原因 原因是&#xff1a;在当前的环境下的python中丢失了一个备份文件&#xf…

经典算法之常用排序

目录❤️前言&#x1f498;一、分治思想&#x1f49e;二、归并排序1.实现方法2.动图分析3.代码模板&#x1f496;三、快速排序1.实现方法2.动图分析3.代码模板❤️前言 本文介绍两种基于分治思想的经典排序算法&#xff1a; 归并排序与快速排序 &#x1f498;一、分治思想 分…

【Python从入门到进阶】1、初识Python

一、Python的起源 1989年&#xff0c;为了打发圣诞节假期&#xff0c;荷兰程序员Gudio van Rossum吉多●范罗苏姆(龟叔&#xff0c;下图穿“人生苦短&#xff0c;我用Python”T恤衫的老哥)决心开发一个新的解释程序&#xff08;Python维形&#xff09;; 1991年&#xff0c;第一…

机器学习中的数学原理——向量内积

今天是2023年的第一天&#xff0c;祝大家新年快乐&#xff01;这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数学——…

【C语言】指针

文章目录指针作为参数的指针访问某个地址上的变量*指针的应用数组和指针数组变量是特殊的指针指针常量和常量指针数组指针和指针数组常见错误指针运算动态内存分配指针 一般用p来表示一个指针&#xff0c;来自pointer 一个指针类型的变量就是保存地址的变量。 变量的值是内存…