本文章主要讲解实操与重要知识点,理论知识较少,若不清楚etcd是什么,请自觉百度初步认识以下。
如下图所示:Etcd充当服务注册方的角色。
当请求方—>提供方—>注册方,发现2宕机了,服务注册方会删掉2,且选择改成1,3。请求方会继续查找注册方的服务。
实际上就是实现了热加载,时时更新数据,不需要先关闭网络,在更新数据,然后再启动网络。只需要直接时时启动,修改即可。
这时候就要问了,那为什么要用etcd,而不去用zookeeper?
etcd使用的好处又在哪?
开始尝试使用etcd:(连接etcd)
注意:(如果使用的etcd是v3版本)[默认的etcdctl使用的是v2版本的命令。]
我们需要设置环境变量ETCDCTL_API=3来让他使用3的API
export ETCDCTL_API=3
github下载etcd:https://github.com/etcd-io/etcd
下载完之后进行解压即可使用,里面有etcd、etcdctl的工具,【这里我使用的是ubuntu版本】
启动etcd工具:
然后另外启动终端启动etcdctl。
这就表明启动etcd成功。
我们怎么将etcd装到docker中:https://blog.csdn.net/ucmir183/article/details/84454575
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--name etcd etcd /usr/local/bin/etcd \
-name etcd0 \
--listen-client-urls http://0.0.0.0:2379 \
--advertise-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd0=http://0.0.0.0:2380 \
--initial-cluster-token tkn \
--initial-cluster-state new
查看etcd Server版本
docker exec etcd /bin/sh -c "/usr/local/bin/etcd --version"
docker exec etcd /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
docker exec etcd /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
Docker操作etcd进行读写:
docker exec etcd /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put zwx "zwx" "
docker exec etcd /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get zwx"
安装goreman:go get github.com/mattn/goreman
开发中使用则推荐轻量级小工具goreman。goreman用于多线程管理工具
有关goreman网址:https://studygolang.com/articles/01373
在etcd中编写local-cluster-profile文件
etcd1:
etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new
etcd2:
etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new
ectd3:
etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new
通过goreman启动三个etcd服务:goreman -f local-cluster-profile start
用户可以使用 etcd 的命令行工具 etcdctl 与启动的集群进行交互,例如,访 问任意一个 etcd server 获取集群 member 信息, 对应的命令就是 member listo
etcdctl 默认访问 localhost:2379,我们可以通过“–endpoints ”参数来指定etcd server的地址。
etcdctl --endpoints=localhost 12379 member list
如果 etcd1 和 etcd2 要与 etcd3 通信,使用的 URL 就是 http://localhost:32380。 而 clientURLs 指的就是该 etcd server 向客户端暴露的通信地址。 例如,如果客户
端要与 etcd2 进行通信,使用的 URL 则是 http://127.0.0.1:32379
当我们向etcd2写入数据时:
这时我们尝试下让ectd1宕机,再对etcd1操作,再让etcd1恢复看看效果:
记得先打开启动etcd工具。也就是启动etcd客户端。
将三个节点集体设置不同地址,同一个端口。
建议去网上观看电子书或者买书:云原生分布式存储基石 etcd深入解析
第一章 初步学习etcdRaft
第三章 介绍etcdctl的命令代码