zoukankan      html  css  js  c++  java
  • etcd dockercompose 测试部署

    etcd 数据库

    etcd是使用Go语言开发的一个开源的、高可用、强一致的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。

    类似项目有zookeeper和consul。

    etcd具有以下特点:

    • 完全复制:集群中的每个节点都可以使用完整的存档
    • 高可用性:Etcd可用于避免硬件的单点故障或网络问题
    • 一致性:每次读取都会返回跨多主机的最新写入
    • 简单:包括一个定义良好、面向用户的API(gRPC)
    • 安全:实现了带有可选的客户端证书身份验证的自动化TLS
    • 快速:每秒10000次写入的基准速度
    • 可靠:使用Raft算法实现了强一致、高可用的服务存储目录

    etcd 应用场景

    服务发现、配置中心、分布式锁

    主要提供以下能力

    • 提供存储以及获取数据的接口,它通过协议保证 Etcd 集群中的多个节点数据的强一致性。用于存储元信息以及共享配置。
    • 提供监听机制,客户端可以监听某个key或者某些key的变更(v2和v3的机制不同,参看后面文章)。用于监听和推送变更。
    • 提供key的过期以及续约机制,客户端通过定时刷新来实现续约(v2和v3的实现机制也不一样)。用于集群监控以及服务注册发现。
    • 提供原子的CAS(Compare-and-Swap)和 CAD(Compare-and-Delete)支持(v2通过接口参数实现,v3通过批量事务实现)。用于分布式锁以及leader选举。

    etcd的数据默认会存放在我们的命令工作目录中,我们发现数据所在的目录,会被分为两个文件夹中:

    • snap: 存放快照数据,etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
    • wal: 存放预写式日志,最大的作用是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交前,都要先写入到WAL中。

    docker-compose 集群部署

    version: "3.0"
    
    networks:
      etcd-net:           # 网络
        driver: bridge    # 桥接模式
    
    volumes:
      etcd1_data:         # 挂载到本地的数据卷名
        driver: local
      etcd2_data:
        driver: local
      etcd3_data:
        driver: local
    ###
    ### etcd 其他环境配置见:https://doczhcn.gitbook.io/etcd/index/index-1/configuration
    ###
    services:
      etcd1:
        image: bitnami/etcd:latest  # 镜像
        container_name: etcd1       # 容器名 --name
        restart: always             # 总是重启
        networks:
          - etcd-net                # 使用的网络 --network
        ports:                      # 端口映射 -p
          - "20000:2379"
          - "20001:2380"
        environment:                # 环境变量 --env
          - ALLOW_NONE_AUTHENTICATION=yes                       # 允许不用密码登录
          - ETCD_NAME=etcd1                                     # etcd 的名字
          - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380  # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
          - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380           # 用于监听伙伴通讯的URL列表
          - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379         # 用于监听客户端通讯的URL列表
          - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379        # 列出这个成员的客户端URL,通告给集群中的其他成员
          - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster             # 在启动期间用于 etcd 集群的初始化集群记号
          - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 # 为启动初始化集群配置
          - ETCD_INITIAL_CLUSTER_STATE=new                      # 初始化集群状态
        volumes:
          - etcd1_data:/bitnami/etcd                            # 挂载的数据卷
    
      etcd2:
        image: bitnami/etcd:latest
        container_name: etcd2
        restart: always
        networks:
          - etcd-net
        ports:
          - "20002:2379"
          - "20003:2380"
        environment:
          - ALLOW_NONE_AUTHENTICATION=yes
          - ETCD_NAME=etcd2
          - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
          - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
          - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
          - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
          - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
          - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
          - ETCD_INITIAL_CLUSTER_STATE=new
        volumes:
          - etcd2_data:/bitnami/etcd
    
      etcd3:
        image: bitnami/etcd:latest
        container_name: etcd3
        restart: always
        networks:
          - etcd-net
        ports:
          - "20004:2379"
          - "20005:2380"
        environment:
          - ALLOW_NONE_AUTHENTICATION=yes
          - ETCD_NAME=etcd3
          - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
          - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
          - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
          - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
          - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
          - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
          - ETCD_INITIAL_CLUSTER_STATE=new
        volumes:
          - etcd3_data:/bitnami/etcd  # member 数据文件
    

    etcd 数据版本

    # 版本从 2 开始
    etcdctl put w 1  # 2
    etcdctl put w1 1  # 3
    etcdctl put w2 1  # 4
    etcdctl put w 2  # 5
    etcdctl put w 1  # 6
    
  • 相关阅读:
    hdoj_1711Number Sequence
    心痛
    2012国信蓝桥初赛试题
    poj_2524Ubiquitous Religions
    poj_2406Power Strings && poj_1961Period && poj_2752Seek the Name, Seek the Fame(KMP)
    POJ并查集小结
    并查集模版
    hdoj_1232畅通工程 && hdoj_1272小希的迷宫 && hdoj_1213How Many Tables && Is It A Tree?
    poj_1611The Suspects
    KMP模版
  • 原文地址:https://www.cnblogs.com/pythonwl/p/15798353.html
Copyright © 2011-2022 走看看