Docker搭建ETCD集群总结

    应开发要求,部署ETCD集群,作为服务发现使用;考虑再三,决定使用Docker方式来进行安装。好处嘛,谁用谁知道;

一般来说,每种工具的官网都会有安装的方式,于是百度官网看到用docker的安装方式;

ETCD官网安装方式

考虑到网上另外乱七八糟,误人不浅的文章,故打算从新整理一份,供有需要的弟兄参考,如有错漏,也望多多指正


部署步骤:

1.环境描述

   集群含有三个节点(etcd集群节点数只能为奇数)

主机名IP地址系统版本
etcd-node110.1.1.35centos7.6
etcd-node210.1.1.36
etcd-node310.1.1.37

2.通过hostnamectl跟setip修改主机名跟IP地址

注:setip为脚本文件,用于修改IP,需要自己编写,

3.修改3个节点的hosts文件

#vim /etc/hosts

10.1.1.35 etcd-node1
10.1.1.36 etcd-node2
10.1.1.37 etcd-node3

wq!

 注:这个步骤不是必须的,但是如果要搭建集群的话,要养成配置hosts的习惯

4.配置docker安装环境及部署docker

略(网上大把,可以百度,后续有空再来修改)

5.拉取etcd的镜像:

docker pull quay.io/coreos/etcd

6.编写脚本:

vim buildEtcd.sh

具体内容如下所示,每个节点一份脚本,共3份

##etcd-node1节点
REGISTRY=quay.io/coreos/etcd
# available from v3.2.5

# For each machine
ETCD_VERSION=latest
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=etcd-node1  #节点hostname
NAME_2=etcd-node2
NAME_3=etcd-node3
HOST_1=10.1.1.35   #节点ip
HOST_2=10.1.1.36
HOST_3=10.1.1.37
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd

# For node 1
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
docker run -d\
  -p 2379:2379 \
  -p 2380:2380 \
  --volume=${DATA_DIR}:/etcd-data \
  --name etcd ${REGISTRY}:${ETCD_VERSION} \
  /usr/local/bin/etcd \
  --data-dir=/etcd-data --name ${THIS_NAME} \
  --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
  --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
  --initial-cluster ${CLUSTER} \
  --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
##etcd-node2节点
REGISTRY=quay.io/coreos/etcd
# available from v3.2.5

# For each machine
ETCD_VERSION=latest
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=etcd-node1  #节点hostname
NAME_2=etcd-node2
NAME_3=etcd-node3
HOST_1=10.1.1.35   #节点ip
HOST_2=10.1.1.36
HOST_3=10.1.1.37
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd

# For node 2
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
docker run -d\
  -p 2379:2379 \
  -p 2380:2380 \
  --volume=${DATA_DIR}:/etcd-data \
  --name etcd ${REGISTRY}:${ETCD_VERSION} \
  /usr/local/bin/etcd \
  --data-dir=/etcd-data --name ${THIS_NAME} \
  --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
  --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
  --initial-cluster ${CLUSTER} \
  --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

 

##etcd-node3节点
REGISTRY=quay.io/coreos/etcd
# available from v3.2.5

# For each machine
ETCD_VERSION=latest
TOKEN=my-etcd-token
CLUSTER_STATE=new
NAME_1=etcd-node1  #节点hostname
NAME_2=etcd-node2
NAME_3=etcd-node3
HOST_1=10.1.1.35   #节点ip
HOST_2=10.1.1.36
HOST_3=10.1.1.37
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd

# For node 3
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
docker run -d\
  -p 2379:2379 \
  -p 2380:2380 \
  --volume=${DATA_DIR}:/etcd-data \
  --name etcd ${REGISTRY}:${ETCD_VERSION} \
  /usr/local/bin/etcd \
  --data-dir=/etcd-data --name ${THIS_NAME} \
  --initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://0.0.0.0:2380 \
  --advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://0.0.0.0:2379 \
  --initial-cluster ${CLUSTER} \
  --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

针对脚本中的etcd参数,进行逐一解释:

  --data-dir:服务运行数据保存的路径,默认为${name}.etcd。
  --initial-advertise-peer-urls:该节点同伴监听地址,这个值会告诉集群中其他节点。(告诉其他节点监听的地址)
  --listen-peer-urls:和同伴通信的地址,如http://ip:2380,如多个,使用逗号分隔.需要所有节点都能够访问,所以不要使用localhost! 
  --advertise-client-urls:对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点。
  --listen-client-urls:对外提供服务的地址:比如http://ip:2379,http://127.0.0.1:2379,客户端会连接到这里和 etcd 交互。 
  --initial-cluster:集群中所有节点的信息,格式为node1=http://ip1:2380,node2=http://ip2:2380,…,注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值。
  --initial-cluster-state:新建集群的时候,这个值为 new;假如已经存在的集群,这个值为 existing。 
  --initial-cluster-token:创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误。

7.依次执行脚本

sh buildEtcd.sh

8.等待创建完成

需要注意的是,由于在脚本内配置的是3个节点,故创建第一个节点后,集群不会创建完成,而是等待其他两个节点创建后,才会初始化完成;

怎么验证是否安装成功呢?

9.执行命令

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl member list"

图片是由于偷懒,把export ETCDCTL_API=3给去掉了,这个就是表示etcdctl的版本为3版本;

另外,通过观察后可看到,ip地址为10.1.1.35的节点,在isLeader的属性等于true。也就是可以推断出,第一个创建的节点,默认初始化为主节点,也就是Leader。

部署完成了,现在需要对etcd集群进行操作,市面上文章也都是部署的,没有使用的,所以也就一并写出来,供后来者参考


使用部分

etcd集群的操作方式,据目前学习到的,存在两种,一种是通过客户端工具:etcdctl,一种是通过api接口;

在介绍两种方式的之前,先说明下etcd的关键字,目前学习到的也就三个:

get:获取键值

put:设置键值

del:删除键值

注:可能还有更多,留在后面学习再补充。

etcdctl操作方式

ETCDCTL_API=3 etcdctl member list

如前面所说:需要etcdctl_api=3来表明etcdctl的版本。所以是必带的,后面加关键字,get,put同理

API接口方式

curl -X PUT http://10.1.1.35:2379/v2/keys/name -d value=fangpb
curl -X GET http://10.1.1.35:2379/v2/keys/name 
curl -X GET http://10.1.1.35:2379/v2/keys/name 
curl -X GET http://10.1.1.35:2379/v2/keys/name 

 这个例子展示的是通过 -X指定curl的访问方式,从而实现对etcd的api接口进行键值操作;

思考一个问题,删除键值应该怎么弄呢?


以上,为今天搭建etcd集群步骤及相关运用,同时也分享今天所看到的部分资料:

一、ETCD集群与服务发现:入口链接   (介绍了etcd的组件及原理部分)

二、ETCD集群安装实验:入口链接       (介绍了通过其他方式安装etcd集群及命令使用)

三、ETCD集群之常见问题:入口链接    (介绍了常见的etcd集群的问题集)

四、使用docker安装etcd集群:入口链接 

(也是通过docker安装etcd,但是感觉不适合新人,太复杂,写上来的原因是,有关于TLS及调优的介绍,挺好)

 

由于在乡下的缘故,网络及笔记本用得不习惯,所以简陋的总结了下,后面随着研究深入后再进行修正;

下一篇文章应该是集群高可用方向了,如果没来得及写,希望有看到的大佬,手里刚好有,那么私信我啊。感谢感谢

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值