etcd入门

简介

etcd是什么

 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。

​ 官网描述:

A distributed, reliable key-value store for the most critical data of a distributed system:分布式系统中最关键数据的分布式、可靠的键值存储

etc是一个分布式,键值对存储系统,用于分布式的关键数据的存储。

etcd的基本特点

  • 简单的接口,通过标准的HTTP API进行调用,也可以使用官网提供的etcdctl操作储存的数据
    etcd入门

  • 键值对存储
    etcd入门

  • 有监听机制,可以监听特定的键的变化,并做出响应
    etcd入门

使用场景

  • 服务的发现(Service Discovery)
  • 消息的发布于订阅
  • 负载均衡
  • 分布式通知与协调
  • 分布式锁

关键字

  • Raf: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定位数据

工作原理

etcd入门

第一部分是HTTP Server:用于处理用户发送的API请求,以及其它etcd节点的同步与心跳信息请求

第二部分是store:用于处理etcd支持的各类功能事务,包括数据库索引,节点状态变更,监控与反馈,事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现

第三部分是Raft:Raft强一致性算法的具体实现,是etcd的核心

第四部分是WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。
在WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容

获取

在Centos中安装etcd

#### etcd安装前的介绍
  • etcd在生产环境中一般推荐集群方式部署

  • etcd使用默认的2个端口:2379和2380

    2379:用于客户端通信(类似于sqlserver的1433/oracle的1521/mysql的3306)

    2380:用于集群的Peer通信

  • 因为etcd是go语言编写的,安装只需要下载对应的二进制文件,并放到合适的路径就行。

安装

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

    mkdir /usr/local/mytools && cd /usr/local/mytools
    
  2. 下载

    wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz 
    

    下载的速度可能过慢,可以前往:https://pan.baidu.com/s/1xxB5EnHiN5hgeNaPh-u47Q 提取码:dbh1

  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目录, 这样系统中可以直接调用etcd/etcdctl这两个程序

    cp etcd etcdctl /usr/local/bin
    
  6. 查看etcd版本

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

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

    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  
    

    etcd入门

启动

​ 输入命令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服务

  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
    ## 对于那些严格要求 必须存在真实可用的网络连接的单元, 
    ## 应该在其单元文件中包含 Wants=network-online.target 
    ## 与 After=network-online.target 指令
    
    [Service]
    User=root
    Type=notify
    WorkingDirectory=/var/lib/etcd/
    ## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
    ## 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

常用的操作

  1. 获取帮助

    etcdctl -h
    
    1. put(存值)
    etcdctl put /testdir/testkey "Hello world"
    

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

    1. get(取值)
    etcdctl get /testdir/testkey
    

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

    1. del
    # 清空数据
    etcdctl del / --prefix
    
    #删除所有/test前缀的节点
    etcdctl del /test --prefix
    
    1. 监控key
    #1. 增加一个key,(客户端窗口1)
    etcdctl put key1 "hello"
    
    #2. 打开一个新的客户端窗口2,监听key1的变化
    etcdctl watch key1
    
    #3. 回到窗口1,向key1 中put新值
    etcdctl put key1 "hello work"
    
    # 4. 此时可以在窗口2中看到监听输出
    
    
    # 查看版本信息
    curl http://127.0.0.1:2379/version
    
上一篇:Flutter的AnimatedDefaultTextStyle实现文本样式的动画过渡切换效果


下一篇:一次etcd查看数据的报错