golang etcd安装
1.Linux安装
curl -L https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz -o etcd-v3.3.2-linux-amd64.tar.gz
tar zxf etcd-v3.3.2-linux-amd64.tar.gz
etcd源码安装
git clone https://github.com/etcd-io/etcd.git
cd etcd
./build
cd bin
cp etcd etcdctl /usr/local/bin
#或者
brew install etcd
#启动etcd
etcd
2.查看版本
./etcd -version
3.后台启动
nohup ./etcd >/tmp/etcd.log 2>&1 & // 日志文件输出到/tmp/etcd.log目录
3.1 设置环境变量
root@localhost etcd]# echo 'export ETCDCTL_API=3' >> /etc/profile ## 环境变量添加 ETCDCTL_API=3
[root@localhost etcd]# source /etc/profile # 是profile中修改的文件生效
[root@localhost etcd]# ./etcdctl get mykey # 可以直接使用./etcdctl get key 命令了
mykey
this is awesome # 刚添加的内容
4.添加key
./etcdctl put mykey "this is awesome"
5.其他操作
./etcdctl –version –api版本
./etcdctl ls -p / –列出目录下所有目录或节点,-p参数会自动用/标识出节点还是目录
./etcdctl set /p1/p2/v1 hello –创建一个节点,并给他一个value
./etcdctl get /p1/p2/v1 –获取一个节点的value
# 删除某个 key
➜ ./etcdctl mk /foo bar
bar
➜ ./etcdctl rm /foo
PrevNode.Value: bar
➜ ./etcdctl get /foo
Error: 100: Key not found (/foo) [1062]
# 只有当 key 的值匹配的时候,才进行删除
➜ ./etcdctl mk /foo bar
bar
➜ ./etcdctl rm --with-value wrong /foo
Error: 101: Compare failed ([wrong != bar]) [1063]
➜ ./etcdctl rm --with-value bar /foo
# 创建一个目录
➜ ./etcdctl mkdir /dir
# 删除空目录
➜ ./etcdctl mkdir /dir/subdir/
➜ ./etcdctl rmdir /dir/subdir/
# 删除非空目录
➜ ./etcdctl rmdir /dir
Error: 108: Directory not empty (/dir) [1071]
➜ ./etcdctl rm --recursive /dir
# 列出目录的内容
➜ ./etcdctl ls /
/queue
/anotherdir
/message
# 递归列出目录的内容
➜ ./etcdctl ls --recursive /
/anotherdir
/message
/queue
/queue/00000000000000001053
/queue/00000000000000001054
# 监听某个 key,当 key 改变的时候会打印出变化
➜ ./etcdctl watch /message
changed
# 监听某个目录,当目录中任何 node 改变的时候,都会打印出来
➜ ./etcdctl watch --recursive /
[set] /message
changed
# 一直监听,除非 `CTL + C` 导致退出监听
➜ ./etcdctl watch --forever /message
new value
chaned again
Wola
# 监听目录,并在发生变化的时候执行一个命令
➜ ./etcdctl exec-watch --recursive / -- sh -c "echo change detected."
change detected.
简单:易于部署,易使用。基于 HTTP+JSON 的 API 让你用 curl 就可以轻松使用。
安全:可选 SSL 客户认证机制。
快速:每个实例每秒支持一千次写操作。
可信:使用一致性 Raft 算法充分实现了分布式。
6.使用etcd作为服务发现
# 启动 srv 注册到etcd
cd user/srv
./user-srv --registry etcd
#启动 api 注册到etcd
cd /user/api
./user-api --registry etcd
#启动 micro-api api网关,注册到etcd
cd micro-examples/
micro --registry etcd api --namespace=io.github.entere.api --handler=api
#查看服务是否正常启动
micro --registry etcd list services
#获取指定名的服务
micro --registry etcd get service io.github.entere.srv.user
micro --registry etcd get service io.github.entere.api.user
#测试
curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "user_id=f546e78a46284765" http://localhost:8080/user/info
etcdctl --debug member list
etcdctl --debug --endpoints http://127.0.0.1:2379 ls
etcdctl cluster-health
7.etcdkeeper安装
docker run -it -d --name etcdkeeper \
-p 8080:8080 \
deltaprojects/etcdkeeper
访问http://IP:8080/etcdkeeper/
// etcdkeeper二进制下载
https://github.com/evildecay/etcdkeeper/releases
./etcdkeeper -p 12349 //启动etcd
//浏览器查看:
http://127.0.0.1:12379/etcdkeeper/
8.etcd-browser安装
docker run --rm -d --name etcd-browser \
-p 8000:8000 \
--env ETCD_HOST=IP \
--env ETCD_PORT=2379 \
buddho/etcd-browser
运行后访问http://IP:8000/
9.实践案例
// 设置 etcdctl的API版本
export ETCDCTL_API=3
// 查询所有注册的微服务
etcdctl --endpoints=127.0.0.1:2379 get / --prefix --keys-only
// 查看前缀为xx到key
etcdctl --endpoints=$ENDPOINTS get xxx --prefix
// 查询对应的值
etcdctl --write-out="json" get /micro/registry/xxx | python -m json.tool
// 证书的访问
ETCDCTL_API=3 etcdctl --endpoints=$ENDPOINTS --cacert=<ca-file> --cert=<cert-file> --key=<key-file> <command>
backup[备份 etcd 的数据]
etcdctl backup
watch[监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出]
etcdctl watch key
exec-watch[监测一个键值的变化,一旦键值发生更新,就执行给定命令]
etcdctl exec-watch key --sh -c "ls"
member[通过 list、add、remove、update 命令列出、添加、删除 、更新etcd 实例到 etcd 集群中]
etcdctl member list;etcdctl member add 实例;etcdctl member remove 实例;etcdctl member update 实例。
etcdctl cluster-health[检查集群健康状态]
https://www.huweihuang.com/kubernetes-notes/etcd/etcdctl-v2.html
相关链接
https://www.jianshu.com/p/2966b6ef5d10
https://juejin.im/post/5dabc50ef265da5b591b761a
【励志篇】:
古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。