1. 环境说明
节点 | IP |
---|
etcd1 | 10.10.239.31 |
etcd2 | 10.10.239.32 |
etcd3 | 10.10.239.33 |
2. 部署
etcd1
| 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 |
| - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.10.239.31: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 |
| |
如果此时启动,会在当前目录下创建 ./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
| 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
| 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 读写测试
| [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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了