001.etcd简介及单节点使用
一 etcd简介
1.1 概述
- 简单:支持 REST 风格的 HTTP+JSON API
- 安全:支持 HTTPS 方式的访问
- 快速:支持并发 1k/s 的写操作
- 可靠:支持分布式结构,基于 Raft 的一致性算法
延伸:ZooKeeper 是一套分布式系统中进行同步和一致性管理的工具,doozer 则是一个一致性分布式数据库。Raft 是一套通过选举主节点来实现分布式系统一致性的算法。
1.2 交互
1.3 应用场景
二 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/

[root@etcdhost ~]# yum -y install etcd
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数据库操作
- 创建键值
[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
[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)则永不超时
- 条件更新键值
[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 #备份到指定路径
- 监控键值
[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 #返回所有的键值和子键值
- 一直监控
[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 设置配置
| 配置参数 | 参数说明 | 
| --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/],用环境变量表示。 | 
六 v2和v3的区别
export ETCDCTL_API=3 #声明API版本为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简介及单节点使用的更多相关文章
- ETCD:单机单节点
		原文地址:Setting up local clusters 设置单节点集群 对于测试环境与开发环境,最快速与简单的方式是配置一个本地集群.对于生产环境,参考集群部分. 本地单节点集群 启动一个集群 ... 
- 部署k8s集群之环境搭建和etcd单节点安装
		环境搭建以及etcd 单节点安装过程 安装之前的环境搭建 在进行k8s安装之前先把虚拟机准备好,这里准备的是三台虚拟机 主机名 ip地址 角色 master 172.16.163.131 master ... 
- K8s二进制部署单节点 etcd集群,flannel网络配置   ——锥刺股
		K8s 二进制部署单节点 master --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ... 
- ETCD 简介 + 使用
		etcd简介 etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单: ... 
- 01 . etcd简介原理,应用场景及部署,简单使用
		etcd简介 Etcd是CoreOS团队于2013年6月发起的开源项目,他的目标是构建一个高可用的分布式键值(key-value)数据库,etcd内部采用raft协议作为一致性算法,etcd基于Go语 ... 
- Hbase入门教程--单节点伪分布式模式的安装与使用
		Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ... 
- kubernetes 单节点和多节点环境搭建
		kubernetes单节点环境搭建: 1.在VMWare Workstation中建立一个centos 7虚拟机.虚拟机的配置尽量调大一些 2.操作系统安装完成后,关闭centos 自带的防火墙服务 ... 
- apache kylin的单节点及多节点安装
		Kylin的使用安装文档Kylin简介Kylin是什么Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区.它提供Hadoop之上的SQL查询接口及多维分析(OLAP) ... 
- 手动部署一个单节点kubernetes
		目录 简要说明 安装环境说明 部署 生成相关证书 证书类型说明 安装cfssl证书生成工具 生成CA证书 生成Kubernetes master节点使用的证书 生成kubectl证书 生成kube-p ... 
随机推荐
- java执行shell脚本并输出执行情况
			1.脚本test.sh,置于/Users/hdwang目录下 #!/bin/sh cd /Users/hdwang echo ls:`ls` ;i<=;i++)); do + ); sleep ... 
- [JSOI2008]魔兽地图
			Description DotR里面的英雄只有一个属性——力量. 他们需要购买装备来提升自己的力量值,每件装备都可以使佩戴它的英雄的力量值提高固定的点数,所以英雄的力量值等于它购买的所有装备的力量值之 ... 
- 域名、ip、以及通过域名访问网站、虚拟主机
			ip 是一个网站的id,是它的地址. 域名是为了解决ip比较难记住才引出的. 利用nginx来配置虚拟主机,通过域名可以访问该网站. 具体实现详见前面文章. 虚拟主机:可以实现在一台服务器虚拟出多个网 ... 
- HTML培训课程-------Day02(表格和框架)
			表格 在网页中表格是一种经常使用到得设计结构,就像表格的内容中可以包含任何的数据,如文字.图像.表单.超链接.表格等等,所有在HTML中可以使用的数据,都可以被设置在表格中,所以有关表格设置的标记与属 ... 
- python数字转换为字符串的两种方式
			主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ... 
- xen  list_domains stat 解析
			XenServer中可以使用list_domains命令来查看所有VM以及Dom0的运行状态以及简单的资源消耗,如下: [root@xenserver ~]# list_domains id | uu ... 
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
			http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ... 
- bzoj千题计划192:bzoj1569: [JSOI2008]Blue Mary的职员分配
			http://www.lydsy.com/JudgeOnline/problem.php?id=1569 dp[i][j][a][b] 表示i个职员,发广告状态为j,已有金钱a,声誉b的最少天数 j= ... 
- Kafka 温故(一):Kafka背景及架构介绍
			一.Kafka简介 Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,多订阅者,冗余 ... 
- [转载]AngularJS之Factory vs Service vs Provider
			http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider http://tylermcginnis.com/a ... 
