001.etcd简介及单节点使用

一 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 下载并解压

  1 [[email protected] ~]# wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
  2 [[email protected] ~]# tar xzvf etcd-v3.3.9-linux-amd64.tar.gz
  3 [[email protected] ~]# cd etcd-v3.3.9-linux-amd64/
  4 [[email protected] etcd-v3.3.9-linux-amd64]# ls
  5 [[email protected] etcd-v3.3.9-linux-amd64]# cp etcd* /usr/local/bin/

提示: etcd为服务主文件,etcdctl为命令客户端,etcd-migrate负责进行迁移。

提示:二进制文件及源码https://github.com/coreos/etcd。

也可使用yum安装:

  1 [[email protected] ~]# yum -y install etcd

使用yum安装其默认配置文件为:/etc/etcd/etcd.conf

2.2 etcd运行

  1 [[email protected] ~]# etcd

三 etcd日常使用

3.1 etcd常见命令

  1 [[email protected] ~]# etcdctl set myname "xianghongying"			#设置键值
  2 xianghongying
  3 [[email protected] ~]# etcdctl get myname					#获取键值
  4 xianghongying
  5 [[email protected] ~]# 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 操作。

  • 创建键值
  1 [[email protected] ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
  2 选项:
  3 --ttl ‘0‘			#该键值的超时时间(单位为秒),不配置(默认为 0)则永不超时
  4 --swap-with-value value		#若该键现在的值是 value,则进行设置操作
  5 --swap-with-index ‘0‘		#若该键现在的索引值是指定索引,则进行设置操作
  • 获取键值
  1 [[email protected] ~]# etcdctl get /etcdb/myself/name
  2 选项:
  3 --sort				#对结果进行排序
  4 --consistent			#将请求发给主节点,保证获取内容的一致性
  • 获取键值,包含更详细的元数据
  1 [[email protected] ~]# etcdctl get -o extended /etcdb/myself/name
  • 设置TTL

获取ttl,过期后会自动删除

  1 [[email protected] ~]# etcdctl set /etcdb/myself/name --ttl 5
  • 更新键值
  1 [[email protected] ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"
  2 [[email protected] ~]# etcdctl get /etcdb/myself/name
  3 选项:
  4 --ttl ‘0‘			#超时时间(单位为秒),不配置(默认为 0)则永不超时
  • 条件更新键值

如果/etcdb/myself/name键值为"Xiao XianNv",则更新为"Xiang HongYing"

  1 [[email protected] ~]# etcdctl set --swap-with-value "Xiao XianNv" /etcdb/myself/name "Xiang HongYing"
  • 更新ttl
  1 [[email protected] ~]# etcdctl update --ttl 3 /etcdb/myself/name "Xiao XianNv"
  • 删除键值
  1 [[email protected] ~]# etcdctl rm /etcdb/myself/name
  2 选项:
  3 --dir			#如果键是个空目录或者键值对则删除
  4 --recursive			#删除目录和所有子键
  5 --with-value		#检查现有的值是否匹配
  6 --with-index ‘0‘		#检查现有的 index 是否匹配
  • 条件删除键值
  1 [[email protected] ~]# etcdctl rm --with-value "Xiao XianNv" /etcdb/myself/name
  • 条件创建键值
  1 [[email protected] ~]# etcdctl mk /etcdb/myself/age "25"

若设置的键不存在,则创建一个新的键值,当键存在的时候,执行该命令会报错。

选项:

  1 --ttl ‘0‘			#超时时间(单位为秒),不配置(默认为 0)则永不超时
  • 自动创建排序的 key
  1 [[email protected] ~]# etcdctl mk --in-order /etcdb/myself/member zhangsan
  2 [[email protected] ~]# etcdctl mk --in-order /etcdb/myself/member lisi
  • 创建目录
  1 [[email protected] ~]# etcdctl setdir testetcd2
  2 选项:
  3 --ttl ‘0‘			#超时时间(单位为秒),不配置(默认为 0)则永不超时

创建一个键目录,无论存在与否。

  • 更新目录
  1 [[email protected] ~]# etcdctl updatedir testetcd2
  2 --ttl ‘0‘			#超时时间(单位为秒),不配置(默认为 0)则永不超时
  • 条件创建目录

若设置的键不存在,则创建一个新的键值,当键存在的时候,执行该命令会报错。

  1 [[email protected] ~]# etcdctl mkdir testetcd
  2 选项:
  3 --ttl ‘0‘			#超时时间(单位为秒),不配置(默认为 0)则永不超时

  • 删除空目录或键值
  1 [[email protected] ~]# etcdctl rmdir /testetcd2		#删除非空目录
  2 [[email protected] ~]# etcdctl rmdir /etcdb/myself
  3 Error:  108: Directory not empty (/etcdb/myself) [16]
  4 [[email protected] ~]# etcdctl get /etcdb/myself/age	#删除键值

提示:若目录不空,会报错。

  • 列出目录或键
  1 [[email protected] ~]# etcdctl ls
  2 [[email protected] ~]# etcdctl ls etcdb

  1 选项:
  2 --sort				#将输出结果排序
  3 --recursive				#如果目录下有子目录,则递归输出其中的内容
  4 -p					#对于输出为目录,在最后添加 `/` 进行区分

提示:列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中内容。

3.3 非数据库操作

  • 备份etcd数据库
  1 [[email protected] ~]# etcdctl backup --data-dir /var/lib/etcd/default.etcd --backup-dir /tmp
  2 选项:
  3 --data-dir				#etcd 的数据目录
  4 --backup-dir			#备份到指定路径

提示:etcd默认数据文件保存路径为:/var/lib/etcd/default.etcd。

  • 监控键值

监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。

  1 [[email protected] ~]# etcdctl watch /etcdb/myself/name
  2 [[email protected] ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
  3 [[email protected] ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"

选项:

  1 --forever				#一直监测,直到用户按 `CTRL+C` 退出
  2 --after-index ‘0‘			#在指定 index 之前一直监测
  3 --recursive				#返回所有的键值和子键值
  • 条件监控键值
  1 [[email protected] ~]# etcdctl exec-watch /etcdb/myself/name -- sh -c ‘etcdctl ls‘
  2 [[email protected] ~]# etcdctl set /etcdb/myself/name "Xiang HongYing"
  3 [[email protected] ~]# etcdctl update /etcdb/myself/name "Xiao XianNv"

监测一个键值的变化,一旦键值发生更新,就执行给定命令。

  1 选项:
  2 --after-index ‘0‘			#在指定 index 之前一直监测
  3 --recursive				#返回所有的键值和子键值
  • 一直监控

一直监听,除非 `CTL + C` 导致退出监听

  1 [[email protected] ~]# etcdctl watch --forever /etcdb/myself/name

3.4 成员管理

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

四 其他命令

  1 [[email protected] ~]# etcdctl cluster-health		#集群健康检查
  2 [[email protected] ~]# etcdctl --version		#查看etcd版本
  3 [[email protected] ~]# etcdctl --help			#获取帮助
  4 [[email protected] ~]# 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的区别

  1 export ETCDCTL_API=3					#声明API版本为v3

v3相关不一致命令如下:

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

原文地址:https://www.cnblogs.com/itzgr/p/9920725.html

时间: 2024-07-31 05:06:14

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

如何将Rancher 2.1.x 从单节点安装迁移到高可用安装

Rancher提供了两种安装方法,即单节点安装和高可用安装.单节点安装可以让用户快速部署适用于短期开发或PoC的Rancher 2.x,而高可用部署则明显更适合Rancher的长期部署.  要点须知 针对开源用户,对于从单个节点迁移到HA的工作,Rancher Labs不提供官方技术支持. 以防在此过程中出现问题,您应该熟悉Rancher架构以及故障排除的方法. 前期准备 为了顺利将单个节点Rancher安装迁移到高可用性安装,您必须做如下准备: 您需要运行Rancher的2.1.x版本以及RK

Etcd单节点扩容为三节点集群

参考文档 http://www.cnblogs.com/breg/p/5728237.html 开始环境是单节点,存储数据一段时间后发现需要集群高可用环境,幸亏etcd支持在线扩容 1,修改单节点配置并重启etcd [[email protected] etcd]# cat /etc/etcd/etcd.conf ETCD_NAME=k8s1 ETCD_DATA_DIR="/data/etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:

小试牛刀之Kolla单节点部署

写在前面的话,笔者目的是为了尝试用Kolla来方便快捷的部署OpenStack,为以后多节点部署打下基础. Kola简介: kolla项目起源于TripleO项目,聚焦于使用Docker容器部署OpenStack服务.该项目由Cisco于2014年9月提出,是OpenStack 社区Big Tent开发模式下的孵化项目. Kolla项目是一个支持Openstack服务以容器的方式部署,借助ansible部署工具可以简单的扩展到多个节点.同时,又借助于使用 heat 来编排 Kolla 集群. 环

k8s Kubernetes v1.10 单节点 kubeadm 快速安装

k8s Kubernetes v1.10 单节点 kubeadm 快速安装 # Master 单节点快速安装 # 傻瓜式安装,只为快速部署测试环境 #测试环境centos 7.4 #ubuntu环境应该也可以,没测验证过 #1 初始化环境 curl -s http://elven.vip/ks/k8s/oneinstall/0.set.sh |bash #2 下载镜像,安装kubeadm工具 curl http://elven.vip/ks/k8s/oneinstall/1.download.s

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

Kylin的使用安装文档Kylin简介Kylin是什么Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区.它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发.简单来说,Kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成Cube,供查询时直接访问.把高复杂度的聚合运算.多表连接等操作转换成对预计算结果的查询,这决定

跟我一起学docker(16)--单节点mesos集群

Mesos简介 什么是MESOS? Apache Mesos 是一个集群管理器,提供了有效的.跨分布式应用或框架的资源隔离和共享,可以运行 Hadoop.MPI.Hypertable.Spark. 几个基本概念: Mesos master:负责任务调度的节点. Mesos slave:负责执行任务的节点. Mesos 框架:需要由mesos调度的应用程序,比如hadoop.spark.marathon.chronos等. Mesos实现了两级调度架构,它可以管理多种类型的应用程序.第一级调度是M

一、hadoop单节点安装测试

一.hadoop简介 相信你或多或少都听过hadoop这个名字,hadoop是一个开源的.分布式软件平台.它主要解决了分布式存储(hdfs)和分布式计算(mapReduce)两个大数据的痛点问题,在hadoop平台上你可以轻易地使用和扩展数千台的计算机而不用关心底层的实现问题.而现在的hadoop更是形成了一个生态体系,如图: 上图大体展示了hadoop的生态体系,但并不完整.总而言之,随着hadoop越来越成熟,也会有更多地成员加入hadoop生态体系中. hadoop官方网站:http://

kolla快速集成openstack-ocata和opencontrail-4.0.1.0单节点

参考链接: kolla快速集成openstack-ocata和opencontrail-4.0.1.0单节点 https://github.com/Juniper/contrail-docker/wiki/OpenContrail-Kolla docker images 下载: [[email protected] kolla]# cat ocata_4.0.0.sh #!/usr/bin/bash image_tag=4.0.0 # delete images #docker images |

纯手工搭建K8s(单节点)

准备说明: 因为为纯手动搭建,所以针对安装时需要的一些安装包需提前下载好 cfssl_linux-amd64. cfssljson_linux-amd64. cfssl-certinfo_linux-amd64. etcd-v3.3.10-linux-amd64.tar.gz. flannel-v0.11.0-linux-amd64.tar.gz. kubernetes-server-linux-amd64.tar.gz(网络环境原因可以上github上下载或者找台vps下载好然后再从vps上拉