一、简要说明

二、运行容器

三、验证集群

四、运行截图

五、参考链接

一、简要说明
     参考etcd官网文档, 在node1、node2、node3三个节点上,分别运行etcd容器,创建etcd集群,并通过另一台机器验证集群的可用性。集群信息如下:
     机器名     IP地址              角色
     node1    192.168.3.161   etcd节点
     node2    192.168.3.162   etcd节点
     node3    192.168.3.163   etcd节点
     nfs        192.168.3.167   验证节点

二、运行容器

# 在节点 node1 上运行:

REGISTRY=quay.io/coreos/etcd

ETCD_VERSION=v3.3.8

TOKEN=my-etcd-token

CLUSTER_STATE=new

NAME_1=node1

NAME_2=node2

NAME_3=node3

HOST_1=192.168.3.161

HOST_2=192.168.3.162

HOST_3=192.168.3.163

CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

DATA_DIR=/var/lib/etcd

# 以上变量,三个节点相同

THIS_NAME=${NAME_1}

THIS_IP=${HOST_1}

docker run \
   -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}

# 在节点 node2 上运行:

REGISTRY=quay.io/coreos/etcd

ETCD_VERSION=v3.3.8

TOKEN=my-etcd-token

CLUSTER_STATE=new

NAME_1=node1

NAME_2=node2

NAME_3=node3

HOST_1=192.168.3.161

HOST_2=192.168.3.162

HOST_3=192.168.3.163

CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

DATA_DIR=/var/lib/etcd

# 以上变量,三个节点相同

THIS_NAME=${NAME_2}

THIS_IP=${HOST_2}

docker run \
   -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}

# 在节点 node3 上运行:

REGISTRY=quay.io/coreos/etcd

ETCD_VERSION=v3.3.8

TOKEN=my-etcd-token

CLUSTER_STATE=new

NAME_1=node1

NAME_2=node2

NAME_3=node3

HOST_1=192.168.3.161

HOST_2=192.168.3.162

HOST_3=192.168.3.163

CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

DATA_DIR=/var/lib/etcd

# 以上变量,三个节点相同

THIS_NAME=${NAME_3}

THIS_IP=${HOST_3}

docker run \
   -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}

三、验证集群

#在测试验证节点NFS上,运行另一个etcd容器,

#以便使用其中的etcdctl命令行程序进行验证

REGISTRY=quay.io/coreos/etcd

ETCD_VERSION=v3.3.8

docker run \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd

#进入容器,查询集群状态,

#验证存入数据、读取数据

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table member list"

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table endpoint status"

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379 --write-out=table endpoint health"

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379  put url http://www.sina.com.cn"

docker exec etcd /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://192.168.3.161:2379,http://192.168.3.162:2379,http://192.168.3.163:2379  get url"

四、运行截图

图1-节点node1上etcd容器运行日志1

图2-节点node1上etcd容器运行日志2

图3-节点node1上etcd容器运行日志3

图4-节点node1上etcd容器运行日志4

图5-在测试节点上,验证集群的状态,存入、获取数据,一切正常

五、参考链接:

ETCD版本(v3.1.18/v3.2.23/v3.3.8)

https://quay.io/repository/coreos/etcd?tag=latest&tab=tags

ETCD文档(Run etcd clusters inside containers)

https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md#docker

使用Docker方式创建3节点的Etcd集群的更多相关文章

  1. docker镜像创建redis5.0.3容器集群

    拉取redis5.0.3镜像 # docker pull daocloud.io/library/redis:5.0.3 [root@localhost ~]# docker pull daoclou ...

  2. kubernetes之二 使用minikube创建单节点k8s本地集群

    使用Minikube来运行kubernetes集群是最简单.快捷的途径.Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用.官方安装minikube教程请 ...

  3. Centos7环境下etcd集群的搭建

    Centos7环境下etcd集群的搭建 一.简介 "A highly-available key value store for shared configuration and servi ...

  4. 彻底搞懂 etcd 系列文章(三):etcd 集群运维部署

    0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...

  5. Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...

  6. etcd集群部署与遇到的坑

    在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...

  7. etcd集群部署与遇到的坑(转)

    原文 https://www.cnblogs.com/breg/p/5728237.html etcd集群部署与遇到的坑 在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一 ...

  8. 配置安全证书的Etcd集群

    不知在哪篇技术文档中看到,kubernetes master和etcd分开部署模式,因为集群的状态都保存在etcd中,这样当kubernetes master挂掉后,通过API Server交互的Sc ...

  9. 利用ansible进行自动化构建etcd集群

    上一篇进行了手动安装etcd集群,此篇利用自动化工具ansible为三个节点构建etcd集群 环境: master:192.168.101.14,node1:192.168.101.15,node2: ...

随机推荐

  1. Python学习之旅(十七)

    Python基础知识(16):面向对象编程(Ⅰ) 类和实例 类是抽象的模板 实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法,但各自的数据可能不同. 类可以在创建实例的时候,把一些我们 ...

  2. python学习之旅(五)

    Python基础知识(4):基础数据类型之字符串(Ⅰ) 字符串是 Python 中最常用的数据类型.可以使用引号“ ”来创建字符串,只要为变量分配一个值即可.例如: name=“Alice” 注:字符 ...

  3. CLOSE_WAIT状态的原因与解决方法(转载留自己看)

    这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP ...

  4. https://stackoverflow.com/questions/10423781/sql-data-range-min-max-category

    select phone,count(order_id) as c from table_recordgroup by phoneorder by c desc SELECT CASEWHEN (ag ...

  5. GIS常用知识列举

    GIS知识分类 我认为GIS知识,大体可分为以下三类. G——测量学.地图学.误差理论等基础——测绘方面 I——数据库.开发——IS方面 S——GIS原理——结合前面两种知识的理念 第一类,是基础,有 ...

  6. Cookie:解决HTTP协议无保存状态

    客户端 Cookie会根据从服务器端发送的相应报文内一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值 ...

  7. axios实现拦截器

    项目中通常使用token进行用户权限认证,需要在请求的header中添加token信息进行验证,拦截返回的状态码进行跳转或重新登陆,在全局配置这些不妥,所以新建一个axios实例进行项目的配置. // ...

  8. 将python代码打包成一个app/exe

    前言 打包的代码通常都需要写一个简单的界面,一般用PyQt来写.用PyQt写界面的方法请戳这里:PyQt5的安装及基本配置    PyQt5教程 python提供了几个用来打包的模块,主要有py2ap ...

  9. 在ABP中使用linq

    private IQueryable<MembershipEntity> SelectOrScrrenMember(GetMemberInput input) { string[] use ...

  10. python-浅拷贝和深拷贝

    浅拷贝和深拷贝 浅拷贝 拷贝的副本共享内部对象的引用的拷贝为浅拷贝 举个栗子 list1 = [1, 2, [3, 4], (5, 6)] list2= list(list1) print(" ...