https://www.hi-linux.com/posts/19457.html

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

1
2
$ 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同理):

1
2
3
4
5
6
7
8
9
10
# 编辑etcd配置文件
$ vim /opt/etcd/config/etcd.confETCD_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。

1
$ systemctl start etcd

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

1
2
$ 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注册成功。

查看集群成员

1
2
3
4
$ 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,方法如下:

1
2
3
$ 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 集群相关推荐

  1. 通过静态发现方式部署 Etcd 集群

    https://www.hi-linux.com/posts/49138.html 在「etcd使用入门」一文中对etcd的基本知识点和安装做了一个简要的介绍,这次我们来说说如何部署一个etcd集群. ...

  2. 二进制包方式部署k8s集群

    1.准备环境 虚拟机操作系统: Centos7 角色 IP 组件 Master 192.168.150.20 kube-apiserver,kube-controller-manager,kube - ...

  3. K8S_Google工作笔记0011---通过二进制方式_部署etcd集群

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一步咱们生成了,这4个证书文件,ca-key.pem ca.pem server-key.pem ...

  4. Kubernetes(k8s)部署etcd集群

    Kubernetes(k8s)部署etcd集群 目录 Kubernetes(k8s)部署etcd集群 一.实验环境 二.ETCD集群部署 2.1 master 节点部署 2.1.1 定义两个脚本文件 ...

  5. centos6.5环境基于conga的web图形化界面方式配置rhcs集群

    一.简介 RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件.红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用 ...

  6. 一键部署ETCD集群脚本

    #!/bin/bash set -x set -e#更改这里的IP, 只支持部署3个节点etcd集群 declare -A NODE_MAP=(["etcd0"]="19 ...

  7. ansible安装部署CDH集群,与手动安装部署CDH集群,及CM配置和用户权限配置

    前言 CDH大数据平台 CDH是Cloudera发布的一个自己封装的Hadoop商业版软件发行包,里面不仅包含了Cloudera的商业版Hadoop,能够十分方便地对Hadoop集群进行安装,部署和管 ...

  8. RKE方式部署Kubernetes集群

    ####1.配置要求link 参考节点要求 https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/requirements ####2 ...

  9. kubeadm方式部署k8s集群(1.18版本,亲测可用)

    文章目录 一.系统环境 1.设置系统主机名以及Host文件 2.关闭防火墙 3.关闭系统Swap 二.安装Docker 1.安装docker 2.所需镜像 三.安装kubelet.kubeadm 和 ...

最新文章

  1. vs安装一直在提取文件_Visual Studio 2019下载及安装教程
  2. Cache总义Cache用法之页面声明
  3. 机器学习笔记:非负矩阵分解问题 NMF
  4. GraphPad Prism 平均值的标准误差
  5. 常见计算机英语,常见计算机英语词汇
  6. CMMI 项目监督与控制(PMC)
  7. 周志华《机器学习》读书笔记与习题答案(持续更新)
  8. asp.net MD5数据加密和解密
  9. 首旅如家仍计划全年开店800-1000家;万豪旗下双品牌酒店“帆船”于宁夏银川启幕 | 美通企业日报...
  10. 【软件自动化测试】基于自设网站的软件测试与分析
  11. Oracle快速入门(1)——ORACLE数据库简介
  12. 海尔智慧电视如何进入工厂模式
  13. Vue检测web端和移动端,并强制手机横屏
  14. 高质量外链的十大特性
  15. python实现离散沃尔什变换_【图像处理】沃尔什变换与 python 实现
  16. 防火墙访问控制Access Control
  17. PTA 离散数学-数理逻辑自测
  18. 解决在uniapp项目中小程序调用获取微信绑定手机号
  19. OSChina 周日乱弹 —— 进入读图时代
  20. 帮你快速拿Offer!Android攒了一个月的面试题及解答,含BATJM大厂

热门文章

  1. Java set的区别_Java Set集合详解及Set与List的区别
  2. liunx 中mysql 远程连不上_linux中MySQL本地可以连接,远程连接不上问题
  3. input type=date 移动端显示placeholder失效问题
  4. snmpset对象不可写_别再问了,好吗?Java字符串一定是不可变的
  5. 计算指数函数的和的对数
  6. Linux安装MySQL-MariaDB版本
  7. C++开发 面试问题总结(中兴、CVTE、瑞晟、华为、YY)
  8. TensorFlow模型保存和提取方法
  9. js中的浅拷贝深拷贝深入理解
  10. Linux命令解释之chmod