基于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-compose 安装 mysql:5.7.31

        目录 一.新建一个启动服务的目录 二.新建文件docker-compose.yml 三.新建角本文件 init-mysql.sh 四.实使化目录和配置文件 启动服务 登陆mysql 其它操作   参考文档: 一.新建一个启动服务的目录 mkdir /usr/local/docker/mysql cd /usr/local/docker/mysql 二…

    Docker 2023年4月11日
    00
  • Linux上创建、列出、删除Docker容器方法总结

    以下是详细讲解“Linux上创建、列出、删除Docker容器方法总结”的完整攻略,包含两条示例说明。 概述 Docker是一种轻量级的虚拟化技术,可以在同一物理主机上运行多个容器,每个容器都可以独立运行应用程序。在Linux环境下,Docker容器的创建、列出和删除可以通过命令行操作完成。本文将介绍在Linux上创建、列出和删除Docker容器的方法。 创建…

    Docker 2023年5月16日
    00
  • 为 Docker 添加阿里云的镜像地址

    修改或新建/ect/docker/daemon.json文件 vim daemon.json 文件中编辑阿里云的镜像地址: { “registry-mirrors”:[“https://6kx4zyno.mirror.aliyuncs.com”] } 中科院的镜像 { “registry-mirrors”:[“https://docker.mirrors.u…

    Docker 2023年4月13日
    00
  • Rancher 系列文章-K3s Traefik MiddleWare 报错-Failed to create middleware keys

    概述 书接上回:《Rancher 系列文章-K3S 集群升级》, 我们提到:通过一键脚本升级 K3S 集群有报错。 接下来开始进行 Traefik 报错的分析和修复, 问题是: 所有 Traefik 的 IngressRoute 访问报错 404 问题描述 报错如下: time=”2022-05-05T09:51:21Z” level=error msg=”…

    Docker 2023年4月8日
    00
  • Docker删除空镜像

    删除none的镜像,要先删除镜像中的容器。要删除镜像中的容器,必须先停止容器。 $ docker images $ docker rmi $(docker images | grep “none” | awk ‘{print $3}’) 直接删除带none的镜像,直接报错了。提示先停止容器。 $ docker stop $(docker ps -a | gr…

    Docker 2023年4月16日
    00
  • 使用YUM 安装 docker的方法步骤

    下面是使用YUM安装Docker的方法步骤的完整攻略。 第一步:更新yum 在安装Docker之前,我们需要先更新yum。 sudo yum update 第二步:安装必要的工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 这个命令将会安装三个必要的工具: yum-util…

    Docker 2023年5月16日
    00
  • Centos下安装docker教程

    CentOS下安装Docker教程 Docker是一个开放源代码软件项目,可以自动化部署、打包、运行任何Linux应用程序。本文将详细讲解在CentOS系统下安装Docker的完整攻略。 步骤一:卸载旧版Docker 在安装Docker之前,需要先卸载系统中已有的Docker: sudo yum remove docker \ docker-client \…

    Docker 2023年5月16日
    00
  • Linux 离线安装docker的过程(一键式安装)

    以下是 Linux 离线安装 Docker 的过程,这是一键式安装。 准备工作 在开始安装前,您需要确保已经做好以下准备工作: 离线下载 Docker CE 的二进制安装包。 上传安装包到 Linux 服务器。 确保 Linux 服务器已经安装 Docker 的必要依赖项。 步骤1:安装依赖项 首先,我们需要确保 Linux 服务器上已经安装了两个必要的依赖…

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