• 欢迎访问蜷缩的蜗牛博客 蜷缩的蜗牛
  • 微信搜索: 蜷缩的蜗牛 | 联系站长 kbsonlong@qq.com
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

基于已有集群动态发现方式部署etcd集群

Docker 蜷缩的蜗牛 4个月前 (06-22) 112次浏览 已收录

etcd 提供了多种部署集群的方式,在「通过静态发现方式部署 etcd 集群」 一文中我们介绍了如何通过静态发现方式部署集群。

不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知道这几个节点的 ip,从而无法使用--initial-cluster参数。

这个时候,你就需要使用 discovery 的方式来搭建 etcd 集群。discovery 方式有两种:etcd discoveryDNS discovery

这里我们先介绍下etcd discovery方式。这种启动方式依赖另外一个 ETCD 集群,在该集群中创建一个目录,并在该目录中创建一个 _config 的子目录,并且在该子目录中增加一个 size 节点,指定集群的节点数目。在这种情况下,将该目录在 ETCD 中的 URL 作为节点的启动参数,即可完成集群启动。

etcd discovery集群方式分为两种:自定义的 etcd discovery 和公共 etcd discovery。

  • 公共 etcd discovery 服务

公共的 discovery 就是通过 CoreOS 提供的公共 discovery 服务申请 token。

获取集群标识

集群标识可以从已有的 etcd 集群中创建,这里通过 CoreOS 提供的公共 discovery 服务申请 token

$ curl -w "\n" 'https://discovery.etcd.io/new?size=3'
https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420

以上命令会生成一个链接样式的 token,参数 size 代表要创建的集群大小。

修改 etcd 配置

依次编辑三个节点的 etcd 配置文件,删除ETCD_INITIAL_CLUSTERETCD_INITIAL_CLUSTER_STATEETCD_INITIAL_CLUSTER_TOKEN配置参数并加上ETCD_DISCOVERY参数为获取的集群标识即可。

这里以 etcd1 节点为例(etcd2、etcd3 同理):

# 编辑 etcd 配置文件
$ vim /opt/etcd/config/etcd.conf

ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/etcd1"
ETCD_LISTEN_PEER_URLS="http://192.168.2.210:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.2.210:2379,http://192.168.2.210:4001"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.2.210:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.2.210:2379,http://192.168.2.210:4001"
ETCD_DISCOVERY="https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420"

测试 etcd 集群

按上面配置好各集群节点后,分别在各节点启动 etcd。

$ systemctl start etcd

启动完成后,执行以下命令:

$ curl -w '\n' https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420
{"action":"get","node":{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420","dir":true,"nodes":[{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/a44795c1770e34ec","value":"etcd1=http://192.168.2.210:2380","modifiedIndex":1301600912,"createdIndex":1301600912},{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/a085e7281cb15be2","value":"etcd2=http://192.168.2.211:2380","modifiedIndex":1301601030,"createdIndex":1301601030},{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/173070ace158b9d1","value":"etcd3=http://192.168.2.212:2380","modifiedIndex":1301601101,"createdIndex":1301601101}],"modifiedIndex":1301571633,"createdIndex":1301571633}}

从输出结果看,说明集群已在discovery.etcd.io注册成功。

查看集群成员

$ etcdctl --endpoints "http://192.168.2.210:2379" member list
173070ace158b9d1: name=etcd3 peerURLs=http://192.168.2.212:2380 clientURLs=http://192.168.2.212:2379,http://192.168.2.212:4001 isLeader=false
a085e7281cb15be2: name=etcd2 peerURLs=http://192.168.2.211:2380 clientURLs=http://192.168.2.211:2379,http://192.168.2.211:4001 isLeader=false
a44795c1770e34ec: name=etcd1 peerURLs=http://192.168.2.210:2380 clientURLs=http://192.168.2.210:2379,http://192.168.2.210:4001 isLeader=true

更多集群使用方法可参考「通过静态发现方式部署 etcd 集群」一文。

自定义的 etcd discovery 服务

这种方式就是利用一个已有的etcd集群来提供 discovery 服务,从而搭建一个新的etcd集群。

假设已有的etcd集群的一个访问地址是:192.168.2.210,那么我们首先需要在已有etcd中创建一个特殊的 key,方法如下:

$ curl http://192.168.2.210:2379/v2/keys/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size -d value=3

{"action":"create","node":{"key":"/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size/00000000000000000011","value":"3","modifiedIndex":11,"createdIndex":11}}

其中value=3表示本集群的大小,即: 有多少集群节点。而 8ebee6723eaf3f5c7724e879f8797e85 就是用来做 discovery 的 token。

值得注意的是:如果实际启动的 etcd 节点个数大于 discovery token 创建时指定的 size,多余的节点会自动变为 proxy 节点。

etcd proxy 模式简介:

作为反向代理把客户的请求转发给可用的 etcd 集群,新节点加入集群如果核心节点数已满足要求,则自动转化为 proxy 模式,此项不会在节点不足时逆向转化为实际节点。

接下来的配置就和公共etcd discovery服务中的方法类似,就不再重复阐述了。

参考文档

http://www.google.com
http://t.cn/RXzZrI9
https://www.zhangluya.com/?p=147
https://segmentfault.com/a/1190000003852735

本文转载自 基于已有集群动态发现方式部署 etcd 集群


蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明基于已有集群动态发现方式部署 etcd 集群
喜欢 (0)
[]
分享 (0)