docker etcd
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相关推荐
- Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战
kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...
- zookeeper和etcd有状态服务部署
zookeeper和etcd有状态服务部署实践 docker etcd zookeeper kubernetes 4k 次阅读 · 读完需要 78 分钟 0 一. 概述 kubernetes通过s ...
- k8s介绍及与docker搭建集群
一.Kubernetes系列之介绍篇 •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快 ...
- k8s docker集群搭建
一.Kubernetes系列之介绍篇 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 ...
- 在CENTOS7下安装kubernetes填坑教程(原创)
kubernetes(以下简称"k8s")目前是公认的最先进的容器集群管理工具,在1.0版本发布后,k8s的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos ...
- 【k8s】记踩坑无数后的kubernetes二进制安装详细步骤
前言:其实远在8月份的时候就尝试过二进制安装kubernetes,结果当时遇到的问题很多,奈何自己知识面也不够,所以最后不了了之.最近时间稍微比较宽裕,就再次重振旗鼓,重新开始安装,没想到整个过程还蛮 ...
- kubesphere多节点在线安装
服务器信息 服务器IP 角色 192.168.233.201 master 192.168.233.202 worker 192.168.233.203 worker 安装前准备 配置主机名,ssh免 ...
- K8S多节点二进制部署
目录 一.多 Maser 集群架构的了解 二.master2 节点部署 1.从 master01 节点上拷贝证书文件.各master组件的配置文件和服务管理文件到 master02 节点 2.修改配置 ...
- K8S实战集训第一课 Ansible自动化部署k8s、弹性伸缩、Helm包管理、k8s网络模型介绍
Ansible自动化部署K8S集群 一.Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部 ...
最新文章
- 编程一万小时是种什么样的体验?
- HDU-3177 Crixalis's Equipment 贪心
- extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...
- 来兄弟连学习的经历和感受
- SQL中跨服务器查询
- 三、Express 路由
- 麦克纳姆轮全向移动机器人斜向直线运动分析
- USB 重定向库usbredir的移植到Android下使用的方法总结
- idea 安装 jclasslib
- GHOST恢复盘.维护盘关键词
- 诛仙手游 法宝属性道法性价比
- 停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?
- 【蓝桥杯】python进制转换16进制转8进制。16进制转10进制。10进制转16进制。
- JavaScript中classList属性和className的区别
- Laxcus大数据管理系统2.0(11)- 第九章 容错
- 计算机视觉岗实习面经
- 平台开发——skynet——⑤网关服务gate
- 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (1/3)
- 后浪青年的聊天,需要Python助威!
- mac 改键工具 keyremap4macbook or Karabiner
热门文章
- c++ 分页展示_分合相宜 Excel透视报表生成分页和汇总报表
- 福州java培训哪里好_南通java培训哪家好
- c遗传算法的终止条件一般_Matlab2 :Matlab遗传算法(GA)优4~-r-具箱是基于基本操作 联合开发网 - pudn.com...
- mysql 重置root密码 远程访问_重置mysql的root密码以及设置mysql远程登陆权限
- dig下载_DIG的完整形式是什么?
- python方法items_Python字典items()方法与示例
- Java——UPD输出及优化再优化
- php采集分页数据,如何通过php+wordpress实现分页获取数据
- win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...
- php ajax json post请求参数传递,javascript - ajax post 有个请求参数要用json 但请问js怎么转json的?...