etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,用于配置共享和服务发现

etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。

etcd作为服务发现系统,有以下的特点:

  • 简单:安装配置简单,HTTP+JSON的 API进行交互,使用curl命令可以轻松使用
  • 安全:支持SSL证书验证机制
  • 快速:根据官方提供的benchmark数据,单实例支持每秒1k+写操作
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
    • 分布式系统中数据分为控制数据和应用数据,etcd处理的数据为控制数据

同一个分布式集群中的进程或服务,互相感知并建立链接,这就是服务发现。解决服务发现问题的三大支柱:

  • 一个强一致性、高可用的服务存储目录

    • 基于Raft算法
  • 一种注册服务和监控服务健康状态的机制
  • 一种查找和链接服务的机制
  • 微服务协同工作架构中,服务动态添加 

etcd基本命令

集群搭建参考k8s集群搭建里的etcd

更新一个节点

#首先查看所有节点
[root@slave2 ~]# etcdctl member list
646ec025a72fc8a: name=etcd3 peerURLs=http://192.168.132.133:2380 clientURLs=http://192.168.132.133:2379 isLeader=true
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=false
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false#更新一个节点
[root@slave2 ~]# etcdctl member update 646ec025a72fc8a http://192.168.132.133:2380
Updated member with ID 646ec025a72fc8a in cluster

删除一个节点

#查看所有节点[root@slave2 ~]# etcdctl member list
646ec025a72fc8a: name=etcd3 peerURLs=http://192.168.132.133:2380 clientURLs=http://192.168.132.133:2379 isLeader=false
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=true
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false
#删除一个节点[root@slave2 ~]# etcdctl member remove 646ec025a72fc8a
Removed member 646ec025a72fc8a from cluster
#再次查看节点,使用当前命令报错[root@slave2 ~]# etcdctl member list
Error:  client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused
; error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused

error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused
error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused
#换一个命令[root@slave2 ~]#  etcdctl --endpoints "http://192.168.132.131:2379" member list
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=true
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false

添加节点

#将删除的节点添加回来[root@slave2 ~]# etcdctl --endpoints "http://192.168.132.132:2379" member add etcd3 http://192.168.132.133:2380
Added member named etcd3 with ID 7a6809311b4a3579 to clusterETCD_NAME="etcd3"
ETCD_INITIAL_CLUSTER="etcd3=http://192.168.132.133:2380,etcd1=http://192.168.132.131:2380,etcd2=http://192.168.132.132:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"#再次查看,状态为unstarted
[root@slave2 ~]# etcdctl --endpoints "http://192.168.132.132:2379" member list
7a6809311b4a3579[unstarted]: peerURLs=http://192.168.132.133:2380
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=true
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false

清空目标节点数据

目标节点从集群中删除后,成员信息会更新。新节点是作为一个全新的节点加入集群,如果data-dir有数据,etcd启动时会读取己经存在的数据,仍然用旧的memberID会造成无法加入集群,所以一定要清空新节点的data-dir。

#删除的节点的主机$ rm -rf /var/lib/etcd/etcd3

在目标节点上启动新增加的成员

修改配置文件中ETCD_INITIAL_CLUSTER_STATE标记为existing,如果为new,则会自动生成一个新的memberID,这和前面添加节点时生成的ID不一致,故日志中会报节点ID不匹配的错。

[root@slave2 ~]# cat /etc/etcd/etcd.conf |grep -v "^#"
[Member]
ETCD_DATA_DIR="/var/lib/etcd/etcd3"
ETCD_LISTEN_PEER_URLS="http://192.168.132.133:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.132.133:2379,http://127.0.0.1:2379"
ETCD_NAME="etcd3"
[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.132.133:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.132.133:2379"
ETCD_INITIAL_CLUSTER_STATE="existing"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.132.131:2380,etcd2=http://192.168.132.132:2380,etcd3=http://192.168.132.133:2380"

重启服务,再次查看

[root@slave2 ~]# systemctl restart etcd
[root@slave2 ~]# etcdctl --endpoints "http://192.168.132.132:2379" member list
7a6809311b4a3579: name=etcd3 peerURLs=http://192.168.132.133:2380 clientURLs=http://192.168.132.133:2379 isLeader=false
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=true
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false
[root@slave2 ~]# etcdctl member list
7a6809311b4a3579: name=etcd3 peerURLs=http://192.168.132.133:2380 clientURLs=http://192.168.132.133:2379 isLeader=false
dde447f371b55f50: name=etcd1 peerURLs=http://192.168.132.131:2380 clientURLs=http://192.168.132.131:2379 isLeader=true
e96057c7f8ba5f4b: name=etcd2 peerURLs=http://192.168.132.132:2380 clientURLs=http://192.168.132.132:2379 isLeader=false

转载于:https://www.cnblogs.com/FRESHMANS/p/9268693.html

docker etcd相关推荐

  1. Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战

    kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...

  2. zookeeper和etcd有状态服务部署

    zookeeper和etcd有状态服务部署实践 docker etcd zookeeper kubernetes 4k 次阅读  ·  读完需要 78 分钟 0 一. 概述 kubernetes通过s ...

  3. k8s介绍及与docker搭建集群

    一.Kubernetes系列之介绍篇 •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快 ...

  4. k8s docker集群搭建

    一.Kubernetes系列之介绍篇 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 ...

  5. 在CENTOS7下安装kubernetes填坑教程(原创)

    kubernetes(以下简称"k8s")目前是公认的最先进的容器集群管理工具,在1.0版本发布后,k8s的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos ...

  6. 【k8s】记踩坑无数后的kubernetes二进制安装详细步骤

    前言:其实远在8月份的时候就尝试过二进制安装kubernetes,结果当时遇到的问题很多,奈何自己知识面也不够,所以最后不了了之.最近时间稍微比较宽裕,就再次重振旗鼓,重新开始安装,没想到整个过程还蛮 ...

  7. kubesphere多节点在线安装

    服务器信息 服务器IP 角色 192.168.233.201 master 192.168.233.202 worker 192.168.233.203 worker 安装前准备 配置主机名,ssh免 ...

  8. K8S多节点二进制部署

    目录 一.多 Maser 集群架构的了解 二.master2 节点部署 1.从 master01 节点上拷贝证书文件.各master组件的配置文件和服务管理文件到 master02 节点 2.修改配置 ...

  9. K8S实战集训第一课 Ansible自动化部署k8s、弹性伸缩、Helm包管理、k8s网络模型介绍

    Ansible自动化部署K8S集群 一.Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部 ...

最新文章

  1. 编程一万小时是种什么样的体验?
  2. HDU-3177 Crixalis's Equipment 贪心
  3. extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...
  4. 来兄弟连学习的经历和感受
  5. SQL中跨服务器查询
  6. 三、Express 路由
  7. 麦克纳姆轮全向移动机器人斜向直线运动分析
  8. USB 重定向库usbredir的移植到Android下使用的方法总结
  9. idea 安装 jclasslib
  10. GHOST恢复盘.维护盘关键词
  11. 诛仙手游 法宝属性道法性价比
  12. 停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?
  13. 【蓝桥杯】python进制转换16进制转8进制。16进制转10进制。10进制转16进制。
  14. JavaScript中classList属性和className的区别
  15. Laxcus大数据管理系统2.0(11)- 第九章 容错
  16. 计算机视觉岗实习面经
  17. 平台开发——skynet——⑤网关服务gate
  18. 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (1/3)
  19. 后浪青年的聊天,需要Python助威!
  20. mac 改键工具 keyremap4macbook or Karabiner

热门文章

  1. c++ 分页展示_分合相宜 Excel透视报表生成分页和汇总报表
  2. 福州java培训哪里好_南通java培训哪家好
  3. c遗传算法的终止条件一般_Matlab2 :Matlab遗传算法(GA)优4~-r-具箱是基于基本操作 联合开发网 - pudn.com...
  4. mysql 重置root密码 远程访问_重置mysql的root密码以及设置mysql远程登陆权限
  5. dig下载_DIG的完整形式是什么?
  6. python方法items_Python字典items()方法与示例
  7. Java——UPD输出及优化再优化
  8. php采集分页数据,如何通过php+wordpress实现分页获取数据
  9. win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...
  10. php ajax json post请求参数传递,javascript - ajax post 有个请求参数要用json 但请问js怎么转json的?...