1. 安装 etcd
安装包下载页面:https://github.com/etcd-io/etcd/releases/ 安装包下载地址:https://github.com/etcd-io/etcd/releases/download/v3.5.18/etcd-v3.5.18-linux-amd64.tar.gz
解压后主要有三个文件: - etcd - etcdctl - etcdutl
因为是 go 项目,所以解压后直接可以在 linux 环境运行
2. 启动服务
直接执行命令 etcd
启动服务。
服务启动后,会将当前工作目录
作为数据存储位置,所以在启动 docker 服务的时候,需要指定 WORKDIR
为数据存储位置
3. 使用 docker-compose 启动服务
3.0 Dockerfile
FROM debian:12.7
USER root
COPY etcd etcdctl etcdutl /usr/bin/
COPY ./entrypoint.sh /docker-entrypoint.sh
ENV ETCD_DATA_DIR /var/lib/etcd
ENV ETCD_WAL_DIR /var/log/etcd
ENV ETCD_LISTEN_CLIENT_URLS "http://0.0.0.0:2379"
WORKDIR /var/lib/etcd/
ENTRYPOINT ["/docker-entrypoint.sh"]
3.1 启动服务
在打镜像的时候提前设置了 WORKDIR
为 /var/lib/etcd
services:
etcd_server:
image: etcd:v3.5.18
user: root
network_mode: bridge
restart: always
ports:
- "10379:2379"
volumes:
- ./etcd/data:/var/lib/etcd
environment:
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS: "http://server:10379"
参数文档:https://etcd.io/docs/v3.4/op-guide/configuration/ https://etcd.io/docs/v3.1/op-guide/configuration/
-
ETCD_LISTEN_CLIENT_URLS
服务监听的网口和端口。默认监听127.0.0.1:2379
-
ETCD_ADVERTISE_CLIENT_URLS
客户端在连接的时候需要使用的地址。如果指定了ETCD_LISTEN_CLIENT_URLS
那就必须指定这个广播地址,貌似是为了安全原因。 -
ETCD_LISTEN_PEER_URLS
etcd 集群节点之间通信的时候,监听的地址和端口 -
ETCD_INITIAL_ADVERTISE_PEER_URLS
etcd 集群之间互相连接的时候,client 发起请求使用的地址
3.2 其他参数
-
--name
Human-readable name for this member. default: “default” env variable: ETCD_NAME -
--data-dir
Path to the data directory. default: “${name}.etcd” env variable: ETCD_DATA_DIR -
--wal-dir
Path to the dedicated wal directory. If this flag is set, etcd will write the WAL files to the walDir rather than the dataDir. This allows a dedicated disk to be used, and helps avoid io competition between logging and other IO operations. default: "" env variable: ETCD_WAL_DIR
4. 使用 etcd
如果进行简单测试,需要 docker exec -it
到容器内部
4.1 写入数据
文档:https://etcd.io/docs/v3.5/tutorials/writing-to-etcd/
etcdctl put foo "Hello World!"
foo
- keyHello World!
- value
4.2 读取数据
文档:https://etcd.io/docs/v3.5/tutorials/reading-from-etcd/
etcdctl get foo
4.3 删除数据
--endpoints="127.0.0.1:2379": gRPC endpoints
- ENDPOINTS 服务地址
127.0.0.1:2379
。因为是集群,所以可以指定其中一个服务器
etcdctl --endpoints=$ENDPOINTS put key myvalue
etcdctl --endpoints=$ENDPOINTS del key
etcdctl --endpoints=$ENDPOINTS put k1 value1
etcdctl --endpoints=$ENDPOINTS put k2 value2
etcdctl --endpoints=$ENDPOINTS del k --prefix
--prefix[=false]
: delete keys with matching prefix--prev-kv[=false]
: return deleted key-value pairs--from-key[=false]
: delete keys that are greater than or equal to the given key using byte compare--range[=false]
: delete range of keys without delay