[TOC]
## 概述
### 功能一: etcd 实现共享配置
* 理论上,应用唯一需要的配置的 `ETCD_HOST` 环境变量,用于指定ETCD地址。通常使用 docker。
* 应用启动时从 etcd 获取一次配置信息,(获取该 key 的 value)
* 同时系统在 etcd 节点上注册一个 Watcher,这样每次配置发生改变之后,应用都能通过 etcd 实时获取到最新配置。
### 功能二: etcd 服务注册与发现
因为 etcd 有以下特性:
* 强一致和高可用。 采用了 Raft 算法的 etcd 能勾为我们提供强一致性和高可用性的保证
* 提供了注册服务和监听服务状态的机制 etcd 可以对某个 key 设置 TTL,可以通过监听服务的心跳来检测服务状态。
* 提供了一种查找和连接服务的机制。当监听到添加了某个服务之后,可以去连接该服务。 有时候我们可以在每一台提供服务的机器上部署一个 proxy 模式的 etcd 节点。 每个服务只要访问自己的 etcd 节点即可。
* etcd 用来检测有来做代理的,监听某个路径,如果,某个etcd 下添加新的 server_ip 到路径下, etcd 就会监听到新的ip
![UTOOLS1575430934970.png](http://yanxuan.nosdn.127.net/8c05aac8dc9e65dde67f135b0f1c6cc8.png)
## 安装
```
$ wget https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz
$ tar xzvf etcd-v3.1.5-linux-amd64.tar.gz
$ mv etcd-v3.1.5-linux-amd64 /opt/etcd
```
## 单机启动
[详细配置](https://github.com/etcd-io/etcd/blob/master/etcd.conf.yml.sample)
配置 `etcd.conf`
```
name: 'idcpj'
# 开启远程监听
listen-client-urls: http://0.0.0.0:2379
```
启动
```
./etcd --config-file=etcd.conf
```
## 单机 etcd 集群
## 接口操作
etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:`testkey`,此时实际上放在根目录`/`下面,也可以为指定目录结构,如`/cluster1/node2/testkey`,则将创建相应的目录结构
### 操作值
#### set
`etcdctl set /testdir/testkey "Hello world"`
#### get
当键不存在时,则会报错
```
etcdctl get /testdir/testkey
```
#### update
当键不存在时,则会报错
`etcdctl update /testdir/testkey "Hello"`
#### rm
当键不存在时,则会报错
`etcdctl rm /testdir/testkey`
#### mk
如果给定的键不存在,则创建一个新的键值
当键存在的时候,执行该命令会报错
`etcdctl mk /testdir/testkey "Hello world"`
### 操作目录
#### mkdir
如果给定的键目录不存在,则创建一个新的键目录
当键目录存在的时候,执行该命令会报错
`etcdctl mkdir testdir2`
#### setdir - 创建一个键目录
创建一个键目录。如果目录不存在就创建,如果目录存在更新目录TTL。
```
etcdctl setdir testdir3
```
#### updatedir - 更新一个已经存在的目录
```
etcdctl updatedir testdir2
```
#### rmdir - 删除目录
若目录不空,会报错
```
etcdctl setdir dir1
etcdctl rmdir dir1
```
#### ls
```
$ etcdctl ls
---
/testdir
/testdir2
/dir
```
### backup - 备份数据
```
etcdctl backup --data-dir /var/lib/etcd --backup-dir /home/etcd_backup
--data-dir etcd的数据目录
--backup-dir 备份到指定路径
```
### watch 监听值
建立监听
```
./etcdctl watch /1/2 --forever
```
触发监听
```
./etcdctl set /1/2 "hello2"
```
### exec-watch 监测一键的变化就执行给定命令
`./etcdctl exec-watch /1/2 -- sh -c "ls"`
`./etcdctl set /1/2 "hello2"`
### member 集群操作
通过`list`、`add`、`remove`命令列出、添加、删除etcd实例到etcd集群中