Files
compose-anything/src/etcd

etcd

English | 中文

This service deploys etcd, a distributed, reliable key-value store for the most critical data of a distributed system.

Services

  • etcd: The etcd key-value store service.

Environment Variables

Variable Name Description Default Value
ETCD_VERSION etcd image version v3.6.0
ETCD_CLIENT_PORT_OVERRIDE Host port mapping for client connections (2379) 2379
ETCD_PEER_PORT_OVERRIDE Host port mapping for peer connections (2380) 2380
ETCD_NAME Human-readable name for this etcd member etcd-node
ETCD_INITIAL_CLUSTER Initial cluster configuration etcd-node=http://localhost:2380
ETCD_INITIAL_CLUSTER_STATE Initial cluster state ('new' or 'existing') new
ETCD_INITIAL_CLUSTER_TOKEN Initial cluster token for bootstrap etcd-cluster
ETCD_AUTO_COMPACTION_RETENTION Auto compaction retention in hours 1
ETCD_QUOTA_BACKEND_BYTES Storage size limit in bytes 2147483648 (2GB)
ETCD_HEARTBEAT_INTERVAL Heartbeat interval in milliseconds 100
ETCD_ELECTION_TIMEOUT Election timeout in milliseconds 1000
ETCD_ENABLE_V2 Enable etcd v2 API false

Please modify the .env file as needed for your use case.

Volumes

  • etcd_data: A volume for storing etcd data persistently.

Network Ports

  • 2379: Client communication port
  • 2380: Peer communication port (for clustering)

Single Node Setup

The default configuration runs etcd as a single node, suitable for development and testing.

Cluster Setup

To set up a multi-node etcd cluster, you need to:

  1. Define multiple etcd services in your compose file
  2. Configure the ETCD_INITIAL_CLUSTER variable properly
  3. Set unique names for each node

Example for a 3-node cluster:

services:
  etcd1:
    # ... base config
    environment:
      - ETCD_NAME=etcd1
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380

  etcd2:
    # ... base config
    environment:
      - ETCD_NAME=etcd2
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380

  etcd3:
    # ... base config
    environment:
      - ETCD_NAME=etcd3
      - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380

Client Access

Using etcdctl

Connect to etcd using the etcdctl client:

# Set endpoint
export ETCDCTL_ENDPOINTS=http://localhost:2379

# Put a key-value pair
etcdctl put mykey myvalue

# Get a value
etcdctl get mykey

# List all keys
etcdctl get --prefix ""

Using HTTP API

etcd provides a RESTful HTTP API:

# Put a key-value pair
curl -X PUT http://localhost:2379/v3/kv/put \
  -H 'Content-Type: application/json' \
  -d '{"key":"bXlrZXk=","value":"bXl2YWx1ZQ=="}'

# Get a value
curl -X POST http://localhost:2379/v3/kv/range \
  -H 'Content-Type: application/json' \
  -d '{"key":"bXlrZXk="}'

Performance Tuning

  • Adjust ETCD_QUOTA_BACKEND_BYTES based on your storage needs
  • Tune ETCD_HEARTBEAT_INTERVAL and ETCD_ELECTION_TIMEOUT for your network latency
  • Configure ETCD_AUTO_COMPACTION_RETENTION to manage data size

Security Notes

  • The default configuration is for development/testing only
  • For production, enable TLS encryption and authentication
  • Consider network security and firewall rules
  • Regular backups are recommended

Monitoring

etcd exposes metrics at http://localhost:2379/metrics in Prometheus format.

License

etcd is licensed under the Apache 2.0 license.