广告
返回顶部
首页 > 资讯 > 精选 >Docker微服务的ETCD集群搭建方法是什么
  • 658
分享到

Docker微服务的ETCD集群搭建方法是什么

2023-06-25 15:06:02 658人浏览 八月长安
摘要

这篇文章主要讲解了“Docker微服务的ETCD集群搭建方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker微服务的ETCD集群搭建方法是什么”吧!etcd是一个高可用的键值

这篇文章主要讲解了“Docker微服务的ETCD集群搭建方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker微服务的ETCD集群搭建方法是什么”吧!

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。Google的容器集群管理系统kubernetes开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。

    etcd的特性

        简单: curl可访问的用户的apiHttp+JSON)定义明确,面向用户的API(grpc

        安全: 可选的SSL客户端证书认证

        快速: 单实例每秒 1000 次写操作

        可靠: 使用Raft保证一致性

    Etcd构建自身高可用集群主要有三种形式

        1)静态发现: 预先已知 Etcd 集群中有哪些节点,在启动时直接指定好Etcd的各个node节点地址
        2)Etcd动态发现: 通过已有的Etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制
        3)DNS动态发现: 通过DNS查询方式获取其他节点地址信息

    本次搭建的基础环境

    底层OS:Centos7
    docker版本:Docker version 18.06.1-ce
    IP:
        服务器A:192.167.0.168
        服务器B:192.167.0.170
        服务器C:192.167.0.172
    首先在各个服务器上下载最新的etcd镜像

    # docker pull quay.io/coreos/etcd

    本人因机器有限,在一台机器配置了3个容器,在机器上创建了子网络,三台容器在一个网络里

    # docker network create --subnet=192.167.0.0/16 etcdnet

    接下来我采用了两种方式来创建集群:1、将三个服务器挨个添加进集群;2、将三个服务器统一添加进集群。以下命令标注A的代表在A机器上执行,同理B、C。

    1、将服务器挨个添加进集群

      A  在 容器/服务器 A上运行一个ETCD实例,取名为autumn-client0,注意其状态为new,“-initial-cluster”中只有自己的IP

    # docker run -d -p 2379:2379 -p 2380:2380 --net etcdnet --ip 192.167.0.168 --name etcd0 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client0 -advertise-client-urls http://192.167.0.168:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.168:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380" -initial-cluster-state new

    参数说明

    —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件;—wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。—name 节点名称—initial-advertise-peer-urls 告知集群其他节点url.— listen-peer-urls 监听URL,用于与其他节点通讯— advertise-client-urls 告知客户端url, 也就是服务的url— initial-cluster-token 集群的ID— initial-cluster 集群中所有节点

    配置文件说明,例如

    # [member]# 节点名称ETCD_NAME=node1# 数据存放位置ETCD_DATA_DIR="/var/lib/etcd/default.etcd"#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"# 监听其他 Etcd 实例的地址ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"# 监听客户端地址ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]# 通知其他 Etcd 实例地址ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380"# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."# 初始化集群内节点地址ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380,etcd2=http://etcd2:2380"# 初始化集群状态,new 表示新建ETCD_INITIAL_CLUSTER_STATE="new"# 初始化集群 tokenETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"# 通知 客户端地址ETCD_ADVERTISE_CLIENT_URLS=http://node1:2379,http://node1:4001

      A  在服务器A的ETCD服务上,通过调用API添加一个新的节点:192.167.0.170

    # curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.170:2480"]}'

      B  在容器/服务器B上运行一个ETCD实例,取名为autumn-client1,注意其状态为existing,“-initial-cluster”中有前一个IP及自己的IP

    # docker run -d -p 2479:2479 -p 2480:2480 --name etcd1 quay.io/coreos/etcd /usr/local/bin/etcd --name autumen-client1 -advertise-client-urls http://192.167.0.170:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.170:2380 -listen-peer-urls http://0.0.0.0:2480 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480" -initial-cluster-state existing

      A  在服务器A的ETCD服务上,通过调用API添加一个新的节点:192.168.7.172

    # curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.172:2580"]}'

      C 在服务器C上运行一个ETCD实例,取名为autumn-client2,注意其状态为existing,“-initial-cluster”中有之前所有节点的IP及自己的IP

    # docker run -d -p 2579:2579 -p 2580:2580 --name etcd quay.io/coreos/etcd -name autumn-client2 -advertise-client-urls http://192.167.0.172:2579 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.172:2580 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580" -initial-cluster-state existing

    2、将服务器统一添加进集群

    (“-initial-cluster”中包含所有节点的IP,状态均为new)

       A上执行

    # docker run -d -p 2379:2379 -p 2380:2380 --restart=always --net etcdnet --ip 192.167.0.168 --name etcd0 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client0 -advertise-client-urls http://192.167.0.168:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.168:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new

      B上执行

    # docker run -d -p 2479:2479 -p 2480:2480 --restart=always --net etcdnet --ip 192.167.0.170  --name etcd1 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client1 -advertise-client-urls http://192.167.0.170:2479 -listen-client-urls http://0.0.0.0:2479 -initial-advertise-peer-urls http://192.167.0.170:2480 -listen-peer-urls http://0.0.0.0:2480 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new

      C上执行

    # docker run -d -p 2579:2579 -p 2580:2580 --restart=always --net etcdnet --ip 192.167.0.172  --name etcd2 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client2 -advertise-client-urls http://192.167.0.172:2579 -listen-client-urls http://0.0.0.0:2579 -initial-advertise-peer-urls http://192.167.0.172:2580 -listen-peer-urls http://0.0.0.0:2580 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new

    集群验证。两种方法创建的集群可通过以下方式进行验证

      1、验证集群members。在集群中的每台机器上查看members,得出的结果应该是相同的

    [root@localhost ~]# curl -L http://127.0.0.1:2379/v2/members{"members":[{"id":"1a661f2b9997ba39","name":"autumn-client0","peerURLs":["http://192.167.0.168:2380"],"clientURLs":["http://192.168.7.168:2379"]},{"id":"4932c8ea462e079c","name":"autumn-client2","peerURLs":["http://192.167.0.172:2580"],"clientURLs":["http://192.167.0.172:2579"]},{"id":"c1dbdde07e61741e","name":"autumn-client1","peerURLs":["http://192.167.0.170:2480"],"clientURLs":[http://192.167.0.170:2479]}]}

      2、某台机器上添加数据,其他机器上查看数据,得出的结果应该是相同的
      A上执行

    [root@localhost ~]# curl -L http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello autumn"{"action":"set","node":{"key":"/message","value":"Hello autumn","modifiedIndex":13,"createdIndex":13},"prevNode":{"key":"/message","value":"Hello world1","modifiedIndex":11,"createdIndex":11}}

      B、C上执行

    [root@localhost ~]#  curl -L http://127.0.0.1:2379/v2/keys/message{"action":"get","node":{"key":"/message","value":"Hello autumn","modifiedIndex":13,"createdIndex":13}}

    etcd api接口

      基本操作api: https://GitHub.com/coreos/etcd/blob/6acb3D67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/api.md   集群配置api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/members_api.md   鉴权认证api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/auth_api.md   配置项:https://github.com/coreos/etcd/blob/master/Documentation/op-guide/configuration.md    https://coreos.com/etcd/docs/latest/runtime-configuration.html  https://coreos.com/etcd/docs/latest/clustering.html  https://coreos.com/etcd/docs/latest/runtime-configuration.html  https://coreos.com/etcd/docs/latest/  https://coreos.com/etcd/docs/latest/admin_guide.html#disaster-recovery  采用标准的restful 接口,支持http 和 https 两种协议。

    服务注册与发现

    传统的服务调用一般通过配置文件读取ip进行调用,这里有诸多限制,如不灵活,无法感知服务的状态,实现服务调用负载均衡复杂等缺点,而引入etcd后,问题将大大化简

    服务启动后向etcd注册,并上报自己的监听的端口以及当前的权重因子等信息,且对该信息设置ttl值。

    服务在ttl的时间内周期性上报权重因子等信息。

    client端调用服务时向etcd获取信息,进行调用,同时监听该服务是否变化(通过watch方法实现)。
    当新增服务时watch方法监听到变化,将服务加入代用列表,当服务挂掉时ttl失效,client端检测到变化,将服务踢出调用列表,从而实现服务的动态扩展。

    另一方面,client端通过每次变化获取到的权重因子来进行client端的加权调用策略,从而保证后端服务的负载均衡

    感谢各位的阅读,以上就是“Docker微服务的ETCD集群搭建方法是什么”的内容了,经过本文的学习后,相信大家对Docker微服务的ETCD集群搭建方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Docker微服务的ETCD集群搭建方法是什么

    本文链接: https://www.lsjlt.com/news/305650.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Docker微服务的ETCD集群搭建方法是什么
      这篇文章主要讲解了“Docker微服务的ETCD集群搭建方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker微服务的ETCD集群搭建方法是什么”吧!etcd是一个高可用的键值...
      99+
      2023-06-25
    • Docker微服务的ETCD集群搭建教程详解
      目录etcd的特性Etcd构建自身高可用集群主要有三种形式本次搭建的基础环境1、将服务器挨个添加进集群2、将服务器统一添加进集群etcd api接口服务注册与发现etcd是一个高可用...
      99+
      2022-11-12
    • docker搭建Mysql集群的方法是什么
      本文小编为大家详细介绍“docker搭建Mysql集群的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“docker搭建Mysql集群的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
      99+
      2022-10-19
    • docker redis集群搭建的方法是什么
      搭建Redis集群的方法有两种:官方提供的Redis集群模式和第三方工具提供的Redis集群模式。1. 官方提供的Redis集群模式...
      99+
      2023-09-16
      docker redis
    • docker mysql集群搭建的方法是什么
      搭建Docker MySQL集群可以通过以下方法实现:1. 使用Docker Compose:使用Docker Compose可以简...
      99+
      2023-09-22
      docker mysql
    • Docker Consul集群环境搭建的方法是什么
      本篇内容介绍了“Docker Consul集群环境搭建的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Docker ...
      99+
      2023-06-22
    • docker集群搭建的步骤是什么
      搭建Docker集群的步骤如下:1. 安装Docker:在每个节点上安装Docker引擎,可以根据不同的操作系统选择合适的安装方式进...
      99+
      2023-08-23
      docker
    • redis集群搭建的方法是什么
      要搭建Redis集群,可以按照以下步骤进行操作:1. 准备多台服务器,每台服务器上都安装Redis。2. 在每台服务器上的Redis...
      99+
      2023-09-09
      redis
    • ubuntu集群搭建的方法是什么
      要搭建Ubuntu集群,可以按照以下步骤进行:1. 安装Ubuntu操作系统:在每个节点上安装Ubuntu操作系统。可以选择最新版本...
      99+
      2023-09-21
      ubuntu
    • kubernetes集群搭建的方法是什么
      这篇文章主要介绍“kubernetes集群搭建的方法是什么”,在日常操作中,相信很多人在kubernetes集群搭建的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”kubernetes集群搭建的方法...
      99+
      2023-06-27
    • mariadb集群搭建的方法是什么
      这篇文章主要介绍了mariadb集群搭建的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mariadb集群搭建的方法是什么文章都会有所收获,下面我们一起来看看吧。一、Galera ClusterMar...
      99+
      2023-07-05
    • mongodb集群搭建的方法是什么
      搭建MongoDB集群有多种方法,以下是其中一种常用的方法:1. 安装MongoDB:首先需要在每个集群节点上安装MongoDB数据...
      99+
      2023-09-06
      mongodb
    • oracle rac集群搭建的方法是什么
      Oracle RAC集群搭建的方法如下:1. 准备环境:安装操作系统、设置网络、创建用户和组等。2. 安装Oracle软件:安装Or...
      99+
      2023-06-14
      oracle rac oracle
    • redis主从集群搭建的方法是什么
      搭建Redis主从集群的方法有以下几种:1. 使用Redis Sentinel(哨兵):Redis Sentinel是Redis官方...
      99+
      2023-09-09
      redis
    • windows server 2008群集搭建的方法是什么
      要搭建Windows Server 2008群集,可以按照以下步骤进行操作:1. 确保所有服务器满足最低系统要求,并安装Window...
      99+
      2023-08-18
      windows
    • docker集群管理的方法是什么
      Docker集群管理的方法有多种,以下是其中一些常用的方法:1. Docker Swarm:Docker Swarm是Docker官...
      99+
      2023-09-20
      docker
    • MySQL分布式集群搭建的方法是什么
      MySQL分布式集群可以通过以下几种方法来搭建:1. MySQL Replication(复制):使用MySQL的复制功能,将一个M...
      99+
      2023-09-21
      MySQL
    • docker安装hadoop集群的方法是什么
      要在Docker中安装Hadoop集群,可以按照以下步骤进行:1. 首先,确保已经安装了Docker和Docker Compose。...
      99+
      2023-08-16
      docker hadoop
    • docker搭建hadoop的方法是什么
      要在Docker上搭建Hadoop,需要按照以下步骤进行操作: 安装Docker:确保你的机器上已经安装了Docker。你可以访...
      99+
      2023-10-27
      docker hadoop
    • hadoop-2.7.3编译和搭建集群环境的方法是什么
      这篇文章主要讲解了“hadoop-2.7.3编译和搭建集群环境的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hadoop-2.7.3编译和搭建集群环境的方法是什么”吧!环境:Ce...
      99+
      2023-06-03
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作