当前位置: 代码网 > 服务器>服务器>云虚拟主机 > docker-compose搭建etcd集群的实现(三节点)

docker-compose搭建etcd集群的实现(三节点)

2024年05月23日 云虚拟主机 我要评论
1. 环境说明节点ipetcd110.10.239.31etcd210.10.239.32etcd310.10.239.332. 部署etcd1ymal文件version: "3.0"services

1. 环境说明

节点ip
etcd110.10.239.31
etcd210.10.239.32
etcd310.10.239.33

2. 部署

etcd1

ymal文件

version: "3.0"
services:
  etcd1:
    image: bitnami/etcd:latest
    container_name: etcd1
    restart: always
    ports:
      - "2379:2379"
      - "2380:2380"
    environment:
      - allow_none_authentication=yes #示例中我们不设置密码
      - etcd_name=etcd1 #节点自己的名字
      - etcd_advertise_client_urls=http://10.10.239.31:2379  #告知集群自己的客户端地址
      - etcd_listen_client_urls=http://0.0.0.0:2379 #设置监听客户端通讯的url列表
      - etcd_initial_advertise_peer_urls=http://10.10.239.31:2380 #告知集群自己集群通讯地址
      - etcd_listen_peer_urls=http://0.0.0.0:2380 #用于监听伙伴通讯的url列表
      - etcd_initial_cluster_token=etcd-cluster #etcd 集群的初始化集群记号
      - etcd_initial_cluster=etcd1=http://10.10.239.31:2380,etcd2=http://10.10.239.32:2380,etcd3=http://10.10.239.33:2380 #集群成员
      - etcd_initial_cluster_state=new #初始化集群状态
    volumes:
      - ./data:/bitnami/etcd

持久化

如果此时启动,会在当前目录下创建 ./data 目录,挂载到容器的 /bitnami/etcd ,但我们要注意的是,容器中启动etcd的用户并不是root用户,很可能没有在目录下创建文件的权限。我们有两个方案:

【方法一】给777权限(不建议)

【方法二】所属主改成对应宿主机用户(建议)

方法二操作:

  • 先给./data目录777权限
  • 查看新生成的文件属主是宿主机哪个用户,就将./data目录属主改为哪个用户
  • 再将权限改回755或750,重启容器

启动服务

[root@liubei-01 etcd1]# docker-compose up -d

查看结果

[root@liubei-01 etcd1]# docker-compose ps
name               command               state                       ports
-----------------------------------------------------------------------------------------------
etcd1   /opt/bitnami/scripts/etcd/ ...   up      0.0.0.0:2379->2379/tcp, 0.0.0.0:2380->2380/tcp

etcd2

ymal文件

version: "3.0"
services:
  etcd1:
    image: bitnami/etcd:latest
    container_name: etcd2
    restart: always
    ports:
      - "2379:2379"
      - "2380:2380"
    environment:
      - allow_none_authentication=yes
      - etcd_name=etcd2
      - etcd_advertise_client_urls=http://10.10.239.32:2379
      - etcd_listen_client_urls=http://0.0.0.0:2379
      - etcd_initial_advertise_peer_urls=http://10.10.239.32:2380
      - etcd_listen_peer_urls=http://0.0.0.0:2380
      - etcd_initial_cluster_token=etcd-cluster
      - etcd_initial_cluster=etcd1=http://10.10.239.31:2380,etcd2=http://10.10.239.32:2380,etcd3=http://10.10.239.33:2380
      - etcd_initial_cluster_state=new
    volumes:
      - ./data:/bitnami/etcd

持久化(同上)

启动服务(同上)

etcd3

ymal文件

version: "3.0"
services:
  etcd1:
    image: bitnami/etcd:latest
    container_name: etcd3
    restart: always
    ports:
      - "2379:2379"
      - "2380:2380"
    environment:
      - allow_none_authentication=yes
      - etcd_name=etcd3
      - etcd_advertise_client_urls=http://10.10.239.33:2379
      - etcd_listen_client_urls=http://0.0.0.0:2379
      - etcd_initial_advertise_peer_urls=http://10.10.239.33:2380
      - etcd_listen_peer_urls=http://0.0.0.0:2380
      - etcd_initial_cluster_token=etcd-cluster
      - etcd_initial_cluster=etcd1=http://10.10.239.31:2380,etcd2=http://10.10.239.32:2380,etcd3=http://10.10.239.33:2380
      - etcd_initial_cluster_state=new
    volumes:
      - ./data:/bitnami/etcd

持久化(同上)

启动服务(同上)

3. 验证

3.1 查看集群状态

查看集群成员

i have no name!@555187fb758c:/opt/bitnami/etcd$ etcdctl --write-out=table  member list
+------------------+---------+-------+--------------------------+--------------------------+------------+
|        id        | status  | name  |        peer addrs        |       client addrs       | is learner |
+------------------+---------+-------+--------------------------+--------------------------+------------+
| 57d6f74aaa8d5d3e | started | etcd1 | http://10.10.239.31:2380 | http://10.10.239.31:2379 |      false |
| 9107e491ab549324 | started | etcd3 | http://10.10.239.33:2380 | http://10.10.239.33:2379 |      false |
| e7b147006e212ca5 | started | etcd2 | http://10.10.239.32:2380 | http://10.10.239.32:2379 |      false |
+------------------+---------+-------+--------------------------+--------------------------+------------+

查看本节点状态

i have no name!@555187fb758c:/opt/bitnami/etcd$ etcdctl --write-out=table  endpoint status
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|    endpoint    |        id        | version | db size | is leader | is learner | raft term | raft index | raft applied index | errors |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 127.0.0.1:2379 | 57d6f74aaa8d5d3e |   3.5.4 |   20 kb |      true |      false |         2 |         10 |                 10 |        |
+----------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

查看本节点健康状态

i have no name!@555187fb758c:/opt/bitnami/etcd$ etcdctl --write-out=table  endpoint health
+----------------+--------+------------+-------+
|    endpoint    | health |    took    | error |
+----------------+--------+------------+-------+
| 127.0.0.1:2379 |   true | 3.736825ms |       |
+----------------+--------+------------+-------+

3.2 读写测试

登录其中一个节点,进入容器,写一条数据
zai

[root@liubei-01 etcd3]# docker exec -it 788 bash
i have no name!@788dd01aaa79:/opt/bitnami/etcd$ etcd
etcd     etcdctl
i have no name!@788dd01aaa79:/opt/bitnami/etcd$ etcdctl put name "liubei"
ok

登录另一个节点,进入容器,读取数据

[root@liubei-02 ~]# docker exec -it 555 bash
i have no name!@555187fb758c:/opt/bitnami/etcd$ etcdctl get name
name
liubei

到此这篇关于docker-compose搭建etcd集群的实现(三节点)的文章就介绍到这了,更多相关docker-compose搭建etcd集群内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • docker中mysql开启日志的实现步骤

    1.查看安mysql容器状态 docker ps2.进入容器内部docker exec -it 4ae9238c176a /bin/bash3.登录mysql数据库mysql -…

    2024年05月23日 服务器
  • Docker 进阶之镜像分层方案详解

    导读可以想象,像 ubuntu等基础镜像,体积必然不小。那么,思考以下几个问题:我们基于同一个镜像(ubuntu 18.4)启动了两个容器,会占用两倍磁盘空间吗?我们在容器内修改或…

    2024年05月23日 服务器
  • docker之MySQL同步数据的实现

    实验的过程分为4步:获取mysql镜像运行一个mysql容器测试连接mysql验证第一步先获取镜像,版本选择了mysql5.7[root@localhost ~]# docker …

    2024年05月23日 服务器
  • K8S之StatefulSet有状态服务详解

    一、概念1.1.无状态和有状态的区别主要从网络和存储来对比无状态不考虑存储和网络,可以任意漂移,每个副本是一样的,如nginx有状态应用需要考虑存储和网络,每个副本是不对等的,具有…

    2024年05月23日 服务器
  • Docker部署Mysql8的实现步骤

    Docker部署Mysql8的实现步骤

    一、前置需求1.linux系统本人用的centos72.安装docker二、部署方法1.拉取mysql8镜像docker pull mysql:82.创建配置文... [阅读全文]
  • Docker容器服务编排利器详解

    一、使用docker compose必要性及定义用容器运行一个服务,需要使用docker run命令。但如果我要运行多个服务呢?假设我要运行一个web服务,还要运行一个db服务,那…

    2024年05月23日 服务器

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com