一 etcd简介

1.1 概述

etcd 是 CoreOS 团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。
特点:
  • 简单:支持 REST 风格的 HTTP+JSON API
  • 安全:支持 HTTPS 方式的访问
  • 快速:支持并发 1k/s 的写操作
  • 可靠:支持分布式结构,基于 Raft 的一致性算法

延伸:ZooKeeper 是一套分布式系统中进行同步和一致性管理的工具,doozer 则是一个一致性分布式数据库。Raft 是一套通过选举主节点来实现分布式系统一致性的算法。

1.2 交互

etcd 对外通过 HTTP API 对外提供服务,这种方式方便测试(通过 curl 或者其他工具就能和 etcd 交互),也很容易集成到各种语言中(每个语言封装 HTTP API 实现自己的 client 就行)。

1.3 应用场景

一般情况下,用户使用 etcd 可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的 etcd 实例将会保持彼此信息的一致性。
提示:更多使用场景见《002.etcd使用场景》。

二 etcd安装及运行

2.1 下载并解压

 [root@etcdhost ~]# wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
[root@etcdhost ~]# tar xzvf etcd-v3.3.9-linux-amd64.tar.gz
[root@etcdhost ~]# cd etcd-v3.3.9-linux-amd64/
[root@etcdhost etcd-v3.3.9-linux-amd64]# ls
[root@etcdhost etcd-v3.3.9-linux-amd64]# cp etcd* /usr/local/bin/
 
提示: etcd为服务主文件,etcdctl为命令客户端,etcd-migrate负责进行迁移。
提示:二进制文件及源码https://github.com/coreos/etcd。
也可使用yum安装:
 [root@etcdhost ~]# yum -y install etcd
使用yum安装其默认配置文件为:/etc/etcd/etcd.conf

2.2 etcd运行

 [root@etcdhost ~]# etcd

三 etcd日常使用

3.1 etcd常见命令

 [root@etcdhost ~]# etcdctl set myname "xianghongying"			#设置键值
xianghongying
[root@etcdhost ~]# etcdctl get myname #获取键值
xianghongying
[root@etcdhost ~]# curl -L http://localhost:2379/v2/keys/myname #通过HTTP API获取
 

3.2 etcd数据库操作

数据库操作围绕对键值和目录的 CRUD (符合 REST 风格的一套操作:Create)完整生命周期的管理。
etcd 在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如 myname,此时实际上放在根目录 / 下面,也可以为指定目录结构,如 cluster1/node2/testkey,则将创建相应的目录结构。
提示:CRUD 即 Create, Read, Update, Delete,是符合 REST 风格的一套 API 操作。
  • 创建键值
 [root@etcdhost ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
选项:
--ttl '0' #该键值的超时时间(单位为秒),不配置(默认为 0)则永不超时
--swap-with-value value #若该键现在的值是 value,则进行设置操作
--swap-with-index '0' #若该键现在的索引值是指定索引,则进行设置操作
 
  • 获取键值
 [root@etcdhost ~]# etcdctl get /etcdb/myself/name
选项:
--sort #对结果进行排序
--consistent #将请求发给主节点,保证获取内容的一致性
 
  • 获取键值,包含更详细的元数据
 [root@etcdhost ~]# etcdctl get -o extended /etcdb/myself/name
 
  • 设置TTL
获取ttl,过期后会自动删除
 [root@etcdhost ~]# etcdctl set /etcdb/myself/name --ttl 5
  • 更新键值
 [root@etcdhost ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"
[root@etcdhost ~]# etcdctl get /etcdb/myself/name
选项:
--ttl '0' #超时时间(单位为秒),不配置(默认为 0)则永不超时
 
  • 条件更新键值
如果/etcdb/myself/name键值为"Xiao XianNv",则更新为"Xiang HongYing"
 [root@etcdhost ~]# etcdctl set --swap-with-value "Xiao XianNv" /etcdb/myself/name "Xiang HongYing"
  • 更新ttl
 [root@etcdhost ~]# etcdctl update --ttl 3 /etcdb/myself/name "Xiao XianNv"
  • 删除键值
 [root@etcdhost ~]# etcdctl rm /etcdb/myself/name
选项:
--dir #如果键是个空目录或者键值对则删除
--recursive #删除目录和所有子键
--with-value #检查现有的值是否匹配
--with-index '0' #检查现有的 index 是否匹配
 
  • 条件删除键值
 [root@etcdhost ~]# etcdctl rm --with-value "Xiao XianNv" /etcdb/myself/name
  • 条件创建键值
 [root@etcdhost ~]# etcdctl mk /etcdb/myself/age ""
若设置的键不存在,则创建一个新的键值,当键存在的时候,执行该命令会报错。
选项:
 --ttl '0'			#超时时间(单位为秒),不配置(默认为 0)则永不超时
  • 自动创建排序的 key
 [root@etcdhost ~]# etcdctl mk --in-order /etcdb/myself/member zhangsan
[root@etcdhost ~]# etcdctl mk --in-order /etcdb/myself/member lisi
 
  • 创建目录
 [root@etcdhost ~]# etcdctl setdir testetcd2
选项:
--ttl '0' #超时时间(单位为秒),不配置(默认为 0)则永不超时
 
创建一个键目录,无论存在与否。
  • 更新目录
 [root@etcdhost ~]# etcdctl updatedir testetcd2
--ttl '0' #超时时间(单位为秒),不配置(默认为 0)则永不超时
 
  • 条件创建目录
若设置的键不存在,则创建一个新的键值,当键存在的时候,执行该命令会报错。
 [root@etcdhost ~]# etcdctl mkdir testetcd
选项:
--ttl '0' #超时时间(单位为秒),不配置(默认为 0)则永不超时
 
  • 删除空目录或键值
 [root@etcdhost ~]# etcdctl rmdir /testetcd2		#删除非空目录
[root@etcdhost ~]# etcdctl rmdir /etcdb/myself
Error: 108: Directory not empty (/etcdb/myself) [16]
[root@etcdhost ~]# etcdctl get /etcdb/myself/age #删除键值
 
提示:若目录不空,会报错。
  • 列出目录或键
 [root@etcdhost ~]# etcdctl ls
[root@etcdhost ~]# etcdctl ls etcdb
 
 选项:
--sort #将输出结果排序
--recursive #如果目录下有子目录,则递归输出其中的内容
-p #对于输出为目录,在最后添加 `/` 进行区分
 
提示:列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中内容。

3.3 非数据库操作

  • 备份etcd数据库
 [root@etcdhost ~]# etcdctl backup --data-dir /var/lib/etcd/default.etcd --backup-dir /tmp
选项:
--data-dir #etcd 的数据目录
--backup-dir #备份到指定路径
 
提示:etcd默认数据文件保存路径为:/var/lib/etcd/default.etcd。
  • 监控键值
监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。
 [root@etcdhost ~]# etcdctl watch /etcdb/myself/name
[root@etcdhost ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
[root@etcdhost ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"
 
选项:
 --forever				#一直监测,直到用户按 `CTRL+C` 退出
--after-index '0' #在指定 index 之前一直监测
--recursive #返回所有的键值和子键值
  • 条件监控键值
 [root@etcdhost ~]# etcdctl exec-watch /etcdb/myself/name -- sh -c 'etcdctl ls'
[root@etcdhost ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
[root@etcdhost ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"
 
监测一个键值的变化,一旦键值发生更新,就执行给定命令。
 选项:
--after-index '0' #在指定 index 之前一直监测
--recursive #返回所有的键值和子键值
 
  • 一直监控
一直监听,除非 `CTL + C` 导致退出监听
 [root@etcdhost ~]# etcdctl watch --forever /etcdb/myself/name

3.4 成员管理

  • 查看成员
 [root@etcdhost ~]# etcdctl member list
  • 添加成员
 [root@etcdhost ~]# etcdctl member add node2 http://172.24.8.101:2380
  • 删除成员
 [root@etcdhost ~]# etcdctl member remove 8e9e05c52164694d
  • 更新成员peerURLS
 [root@etcdhost ~]# etcdctl member update node2 http://172.24.8.102:2380

四 其他命令

 [root@etcdhost ~]# etcdctl cluster-health		#集群健康检查
[root@etcdhost ~]# etcdctl --version #查看etcd版本
[root@etcdhost ~]# etcdctl --help #获取帮助
[root@etcdhost ~]# etcdctl cluster-health #查看集群状态
 
  • --debug #输出 cURL 命令,显示执行命令的时候发起的请求
  • --no-sync            #发出请求之前不同步集群信息
  • --output, -o 'simple' #输出内容的格式 (simple 为原始信息,json 为进行json格式解码,易读性更佳)
  • --peers, -C            #指定集群中的同伴信息,用逗号隔开 (默认为: “127.0.0.1:4001”)
  • --cert-file                   #HTTPS 下客户端使用的 SSL 证书文件
  • --key-file            #HTTPS 下客户端使用的 SSL 密钥文件
  • --ca-file #服务端使用 HTTPS 时,使用 CA 文件进行验证
  • --help, -h            #显示帮助命令信息
  • --version, -v #打印版本信息

五 常见配置

5.1 设置配置

默认配置文件为/etc/etcd/etcd.conf。
配置参数
参数说明
--name
etcd集群中的节点名,默认为 default,可自定义,
在集群中该名称必须唯一,建议使用 hostname。
--data-dir
服务运行数据保存的路径,保存日志和快照的目录,默认为 ${name}.etcd。
--snapshot-count
指定有多少事务(transaction)被提交时,触发截取快照保存到磁盘。
--heartbeat-interval
leader 多久发送一次心跳到 followers。默认值是 100ms。
--eletion-timeout
重新投票的超时时间,如果 follow 在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000 ms。
--addr
公布的ip地址和端口。 默认为127.0.0.1:2379
--bind-addr
用于客户端连接的监听地址,默认为-addr配置
--peers
集群成员逗号分隔的列表,例如 127.0.0.1:2380,127.0.0.1:2381
--peer-addr
集群服务通讯的公布的IP地址,默认为 127.0.0.1:2380.
--peer-bind-addr
集群服务通讯的监听地址,默认为-peer-addr配置
--wal-dir
指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储
--listen-client-urls
监听的用于客户端通信的url,对外提供服务的地址,客户端会连接到这里和 etcd 交互,同样可以监听多个。
--listen-peer-urls
监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等),需要所有节点都能够访问,集群中不能为localhost。
--initial-advertise-peer-urls
建议用于节点之间通信的url,节点间将以该值进行通信。
--advertise-client-urls
建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信,即服务的url。
--initial-cluster-token
集群的ID,创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误.
--initial-cluster
集群中所有节点的信息,即集群中所有的initial-advertise-peer-urls 的合集。
--initial-cluster-state
-initial-cluster-state=new 表示从无到有搭建etcd集群。
新建集群时,值为 new;若已经存在的集群,值为 existing
--discovery-srv
用于DNS动态服务发现,指定DNS SRV域名。
--discovery
用于etcd动态发现,指定etcd发现服务的URL [https://discovery.etcd.io/],用环境变量表示。
提示:
所有以 --init 开头的配置都是在 bootstrap 集群的时候才会用到,后续节点的重启会被忽略;
所有的参数也可以通过环境变量进行设置,如--my-flag 对应环境变量的 ETCD_MY_FLAG;
命令行指定的参数会覆盖环境变量对应的值。

六 v2和v3的区别

 export ETCDCTL_API=3					#声明API版本为v3
v3相关不一致命令如下:
  • 创建、更新key
 etcdctl put /etcdb/myself/name "Xiao XianNv"
etcdctl put /etcdb/myself/name Xiang HongYing"
 
  • 删除key
 etcdctl del /etcdb/myself/name
etcdctl del /etcdb/myself/name --prefix #删除所有name前缀的节点
 
  • 查询key
 etcdctl get /etcdb/myself/name
etcdctl get /etcdb/myself/name --prefix #查询所有name前缀的键值
 
  • 监控键值
 etcdctl watch  /etcdb/myself/name
etcdctl watch /etcdb/myself --prefix #监听子节点
 
  • 申请租约
 etcdctl lease grant 40					#从申请开始计算时间
  • 授权租约
 etcdctl put --lease=4e5e5b853f528859 /etcdb/myself/name Xiang HongYing"    #节点的生命伴随着租约到期将会被DELETE
 
  • 撤销租约
 etcdctl lease revoke 4e5e5b853f5286cc			#撤销租约和租约到期一样,节点都会被删除
 
  • 租约续约
 etcdctl lease keep-alive 4e5e5b853f52892b		#每当到期将会续约

001.etcd简介及单节点使用的更多相关文章

  1. ETCD:单机单节点

    原文地址:Setting up local clusters 设置单节点集群 对于测试环境与开发环境,最快速与简单的方式是配置一个本地集群.对于生产环境,参考集群部分. 本地单节点集群 启动一个集群 ...

  2. 部署k8s集群之环境搭建和etcd单节点安装

    环境搭建以及etcd 单节点安装过程 安装之前的环境搭建 在进行k8s安装之前先把虚拟机准备好,这里准备的是三台虚拟机 主机名 ip地址 角色 master 172.16.163.131 master ...

  3. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  4. ETCD 简介 + 使用

    etcd简介 etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单: ...

  5. 01 . etcd简介原理,应用场景及部署,简单使用

    etcd简介 Etcd是CoreOS团队于2013年6月发起的开源项目,他的目标是构建一个高可用的分布式键值(key-value)数据库,etcd内部采用raft协议作为一致性算法,etcd基于Go语 ...

  6. Hbase入门教程--单节点伪分布式模式的安装与使用

    Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ...

  7. kubernetes 单节点和多节点环境搭建

    kubernetes单节点环境搭建: 1.在VMWare Workstation中建立一个centos 7虚拟机.虚拟机的配置尽量调大一些 2.操作系统安装完成后,关闭centos 自带的防火墙服务 ...

  8. apache kylin的单节点及多节点安装

    Kylin的使用安装文档Kylin简介Kylin是什么Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区.它提供Hadoop之上的SQL查询接口及多维分析(OLAP) ...

  9. 手动部署一个单节点kubernetes

    目录 简要说明 安装环境说明 部署 生成相关证书 证书类型说明 安装cfssl证书生成工具 生成CA证书 生成Kubernetes master节点使用的证书 生成kubectl证书 生成kube-p ...

随机推荐

  1. python 用Threading创建多线程

    #-*-coding:utf-8-*- '''python标准库提供了两个多线程模块,分别为thread和threading, 其中thread模块是低级模块,threading是高级模块,对thre ...

  2. [APIO2018] Duathlon 铁人两项

    不经过重点,考虑点双 点双,考虑圆方树 两个点s,t,中间路径上,所有点双里的点都可以经过,特别地,s,t作为割点的时候,不能往后走,也就是不能经过身后的方点 也就是,(s,t)经过树上路径上的所有圆 ...

  3. (转)Maven学习总结(八)——使用Maven构建多模块项目

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(八)——使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为doma ...

  4. Openstack 网络服务 Neutron计算节点部署(十)

    Neutron计算节点部署 安装组件,安装的服务器是192.168.137.12 1.安装软件包 yum install -y openstack-neutron-linuxbridge ebtabl ...

  5. windows10 升级1803后,远程错误提示“出现身份验证错误,要求的函数不受支持 CredSSP 加密 Oracle修正”的解决办法

    远程出现错误提示:出现身份验证错误,要求的函数不受支持 CredSSP 加密 Oracle修正 运行 gpedit.msc 本地组策略: 计算机配置>管理模板>系统>凭据分配> ...

  6. 浅谈 JSON 那些被转义的字符们

    其实,之前我一直以为 JSON 会把 ASCII 可显示字符以外的统统转义为 Unicode,直到有一次我用 JSON.stringify 才发现,其实是 PHP 为我们想的太周到了. 我以前是一位 ...

  7. 前三章 man手册 查看文件

    1 – 3章 1.1 man手册: 分1 - 9个区域,可以认为是一个一个小节 把man手册理解为一本书 第一节:可执行程序或shell命令 第二节:系统调用 第三节:库调用 第四节:特殊文件 第五节 ...

  8. html5 canvas贝塞尔曲线篇(上)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. ML—机器学习常用包(持续更新….)

    机器学习是计算机科学和统计学的边缘交叉领域,R关于机器学习的包主要包括以下几个方面: 1)神经网络(Neural Networks): nnet.AMORE以及neuralnet,nnet提供了最常见 ...

  10. Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小

    原始表数据: