基于Docker的Etcd分布式部署的方法步骤

下面我将详细讲解基于Docker的Etcd分布式部署的方法步骤。

准备工作

在进行Etcd分布式部署前,需要先准备以下环境:

  • 安装了Docker和Docker Compose的Linux服务器节点,建议使用Ubuntu 18.04及以上版本。
  • 至少三台Linux服务器节点,建议使用3台或其倍数个节点。

步骤一:编写Docker Compose文件

  1. 在任意一台Linux服务器上创建一个文件夹,用于存放Docker Compose文件。可以使用如下命令:
mkdir etcd_compose && cd etcd_compose
  1. 在该文件夹下创建一个空白的Docker Compose文件,可以使用如下命令:
touch docker-compose.yml
  1. 使用文本编辑器(如vim、nano等)打开Docker Compose文件,编写如下代码:
version: '3'

services:
  etcd1:
    image: quay.io/coreos/etcd:v3.5.0-rc.3
    volumes:
      - etcd_data:/etcd-data
    command: etcd --name etcd1 --initial-advertise-peer-urls http://etcd1:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://etcd1:2379 --listen-client-urls http://0.0.0.0:2379 --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --initial-cluster-token my-etcd-token --initial-cluster-state new --auto-compaction-retention 1
    ports:
      - "2379:2379"
      - "2380:2380"
    networks:
      - etcd-network

  etcd2:
    image: quay.io/coreos/etcd:v3.5.0-rc.3
    volumes:
      - etcd_data:/etcd-data
    command: etcd --name etcd2 --initial-advertise-peer-urls http://etcd2:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://etcd2:2379 --listen-client-urls http://0.0.0.0:2379 --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --initial-cluster-token my-etcd-token --initial-cluster-state new --auto-compaction-retention 1
    ports:
      - "2381:2380"
      - "2379:2379"
    networks:
      - etcd-network

  etcd3:
    image: quay.io/coreos/etcd:v3.5.0-rc.3
    volumes:
      - etcd_data:/etcd-data
    command: etcd --name etcd3 --initial-advertise-peer-urls http://etcd3:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://etcd3:2379 --listen-client-urls http://0.0.0.0:2379 --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 --initial-cluster-token my-etcd-token --initial-cluster-state new --auto-compaction-retention 1
    ports:
      - "2382:2380"
      - "2379:2379"
    networks:
      - etcd-network

volumes:
  etcd_data:

networks:
  etcd-network:

该文件定义了三个Etcd节点,分别是etcd1、etcd2和etcd3。每个节点都使用quay.io/coreos/etcd:v3.5.0-rc.3镜像作为容器镜像,并挂载一个名为etcd_data的卷用于存放Etcd数据。以etcd1为例,其命令行参数说明如下:

  • --name etcd1:指定节点名称为etcd1。
  • --initial-advertise-peer-urls http://etcd1:2380:指定节点地址和端口。
  • --listen-peer-urls http://0.0.0.0:2380:指定节点监听地址和端口。
  • --advertise-client-urls http://etcd1:2379:指定客户端地址和端口。
  • --listen-client-urls http://0.0.0.0:2379:指定客户端监听地址和端口。
  • --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380:指定初始集群成员列表。
  • --initial-cluster-token my-etcd-token:指定初始集群标识符。
  • --initial-cluster-state new:指定初始集群状态为new。
  • --auto-compaction-retention 1:指定自动压缩保留时间为1天。

步骤二:启动Docker容器

  1. 在Linux服务器上运行以下命令来启动所有Etcd节点的Docker容器。
docker-compose up -d
  1. 等待一段时间,使用以下命令查看Docker容器的状态。
docker-compose ps

如果所有三个节点的状态均为Up,则表示容器已成功启动。

示例:使用Etcd集群存储配置信息

在本示例中,我们将使用Etcd分布式集群存储一个简单的键值对:name=etcd_test。

  1. 在任意一台Linux服务器节点上安装etcdctl命令行工具,可以使用以下命令:
sudo apt-get update && sudo apt-get install etcd-client -y
  1. 使用etcdctl工具连接到Etcd分布式集群,并在其中添加一个名为name的键,并设置其值为etcd_test。可以使用以下命令:
export ETCDCTL_ENDPOINTS="http://localhost:2379,http://localhost:2381,http://localhost:2382"
etcdctl put name "etcd_test"
  1. 使用etcdctl工具从Etcd分布式集群中获取刚才添加的键值对。可以使用以下命令:
etcdctl get name

结果应该为:name=etcd_test。

示例:使用Etcd集群实现服务发现

在本示例中,我们将使用Etcd分布式集群来实现一个简单的服务发现功能。

  1. 在任意一台Linux服务器节点上安装nginx,并启动nginx服务。
sudo apt-get update && sudo apt-get install nginx -y
sudo systemctl start nginx
  1. 配置nginx监听8080端口,并用以下内容替换默认的index.html文件。
<!DOCTYPE html>
<html>
  <head>
    <title>ETCD Sample Page</title>
  </head>
  <body>
    <ul>
      {{range $key, $value := .}}
      <li>{{$key}} - {{$value}}</li>
      {{end}}
    </ul>
  </body>
</html>
  1. 重启nginx服务
sudo systemctl restart nginx
  1. 使用etcdctl工具连接到Etcd分布式集群,并添加一个名为web的服务,同时将nginx监听的地址和端口添加到该服务的值中。可以使用以下命令:
export ETCDCTL_ENDPOINTS="http://localhost:2379,http://localhost:2381,http://localhost:2382"
etcdctl put service/web "http://<nginx-ip-address>:8080"

其中,<nginx-ip-address>须替换为nginx所在Linux服务器节点的IP地址。

  1. 在任意一台Linux服务器节点上安装curl工具,并使用curl工具连接到Etcd分布式集群,查询名为web的服务。可以使用以下命令:
curl http://<etcd-ip-address>:2379/v2/keys/service/web

其中,<etcd-ip-address>须替换为任意一台运行Etcd分布式集群的Linux服务器节点的IP地址。结果应该为:{"action":"get","node":{"key":"/service/web","value":"http://<nginx-ip-address>:8080","modifiedIndex":3,"createdIndex":3}}

  1. 在任意一台Linux服务器节点上使用curl工具连接到Etcd分布式集群查询名为web的服务的值,并将其输出到前面所配置的index.html文件中。可以使用以下命令:
export ETCDCTL_ENDPOINTS="http://localhost:2379,http://localhost:2381,http://localhost:2382"
etcdctl get service/web -w json | jq -r '.node.value' | curl -sL -D - -X GET -H "Content-Type: text/html" -H 'Accept: text/html' -o /usr/share/nginx/html/index.html -K -

接下来,可以在任意一台Linux服务器上使用浏览器访问该服务所在的nginx地址和端口(如http://:8080/),就可以看到服务发现的结果了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Docker的Etcd分布式部署的方法步骤 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Docker安装(Ubuntu 64bit)的方法步骤

    下面是Docker安装(Ubuntu 64bit)的方法步骤的完整攻略。 安装Docker 1. 卸载旧版本 如果您之前安装过旧版本的Docker,需要卸载以前版本的Docker: sudo apt-get remove docker docker-engine docker.io containerd runc 2. 更新软件包 确保更新软件包: sudo…

    Docker 2023年5月15日
    00
  • Docker 网络工作原理详解

    Docker 网络工作原理详解 Docker 网络是 Docker 中比较核心、也比较复杂的一个部分,本篇文章就来详细讲解 Docker 网络的工作原理。我们将先介绍 Docker 网络中的一些基本概念、网络模式,然后讲解 Docker 内置网络的实现原理、Docker 容器间的通信方式,最后通过两个示例演示 Docker 容器间的通信方式。 Docker …

    Docker 2023年5月16日
    00
  • centos 下docker 安装方法

    下面我将详细讲解CentOS下Docker安装方法的完整攻略,包含两条示例说明。 安装 Docker 1. 卸载旧版本 Docker 首先,如果您的系统中已经安装了旧版本的 Docker,请先卸载旧版本。 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common…

    Docker 2023年5月16日
    00
  • docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph — cluster集群

    话不多说上菜:  现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph-node3 192.168.100.25  ceph-node5 #已经部署好一个ceph cluster 集群    四个 osd  三个mon   没有…

    Docker 2023年4月16日
    00
  • CentOS 7.5下 安装Docker 教程 详解

    CentOS 7.5下安装Docker教程详解 准备工作 在开始安装之前,请确保你的系统已经更新到最新的版本。可以通过以下命令来更新系统: $ sudo yum update 安装Docker 配置Docker的yum源 $ sudo tee /etc/yum.repos.d/docker-ce.repo <<-‘EOF’ [docker-ce-…

    Docker 2023年5月16日
    00
  • [Docker]Docker拉取,上传镜像到Harbor仓库

    需求 因为项目的需求,需要制作一个基于tomcat的镜像.那么前提就是,需要有tomcat的基础镜像. 怎么做 我的思路跑偏了,本来以为是需要将tomcat下载下来,然后通过docker命令,让它成为镜像的.结果后来和老大一沟通,才发现自己的思路偏的不是一点儿半点儿如果需要tomcat镜像,可以从Docker Hub仓库上面直接拉取就OK,拉取下来的本身就是…

    Docker 2023年4月13日
    00
  • 详解Docker中容器的备份、恢复和迁移

    详解Docker中容器的备份、恢复和迁移 备份容器 容器的备份方式 在Docker中,我们可以通过两种方式来备份容器: 基于Docker image的备份 基于Docker container的备份 基于Docker image的备份 我们可以通过以下命令来备份一个Docker image: docker commit <container_id&gt…

    Docker 2023年5月16日
    00
  • docker search命令如何使用

    本文小编为大家详细介绍“docker search命令如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“docker search命令如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 一、docker search 命令选项 命令选项 描述 &ndash;filter , -f 根据给定的条件进行过滤 &amp…

    Docker 2023年4月9日
    00
合作推广
合作推广
分享本页
返回顶部