Docker-单节点多Etcd部署

数据目录

mkdir /data/docker/etcd/etcd{1..3} -p

docker-compose.yaml

version: "3.7"

services:
    etcd1:
        image: "bitnami/etcd:3.5"
        container_name: "etcd1"
        restart: "always"
        ports:
            - 12379:12379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
            # 名称
            - ETCD_NAME=etcd1
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - 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:12379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:12379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new
        volumes:
            - /data/docker/etcd/etcd1:/bitnami/etc

    etcd2:
        image: "bitnami/etcd:3.5"
        container_name: "etcd2"
        restart: "always"
        ports:
            - 22379:22379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
             # 名称
            - ETCD_NAME=etcd2
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
            # 用于监听伙伴通讯的URL列表
            - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
            # 用于监听客户端通讯的URL列表
            - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:22379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:22379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new
        volumes:
            - /data/docker/etcd/etcd2:/bitnami/etc

    etcd3:
        image: "bitnami/etcd:3.5"
        container_name: "etcd3"
        restart: "always"
        ports:
            - 32379:32379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
             # 名称
            - ETCD_NAME=etcd3
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
            # 用于监听伙伴通讯的URL列表
            - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
            # 用于监听客户端通讯的URL列表
            - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:32379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:32379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new
        volumes:
            - /data/docker/etcd/etcd3:/bitnami/etc

测试集群

[root@VM-0-14-centos ~]# docker exec etcd1 /bin/sh -c "etcdctl --endpoints=localhost:12379 put  /t v"
[root@VM-0-14-centos ~]# docker exec etcd1 /bin/sh -c "etcdctl --endpoints=localhost:12379 get  /t"
/t
v
[root@VM-0-14-centos ~]# docker exec etcd2 /bin/sh -c "etcdctl --endpoints=localhost:12379 get  /t"
^C
[root@VM-0-14-centos ~]# docker exec etcd2 /bin/sh -c "etcdctl --endpoints=localhost:22379 get  /t"
/t
v
[root@VM-0-14-centos ~]# docker exec etcd3 /bin/sh -c "etcdctl --endpoints=localhost:32379 get  /t"
/t
v

Last updated