docker-compose 部署etcd用于go服务注册发现

  • 系统环境准备
cat /etc/issue
Ubuntu 22.04.5 LTS

uname -r
5.15.0-142-generic
    2  apt update
    3  apt install docker
    5  apt install docker-compose

docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.3
CPython version: 3.10.12
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022
  • 准备yml文件
mkdir -p /data/apps/etcd/data
cd /data/apps/etcd
vim docker-compose.yml

cat docker-compose.yml 
version: "3.8"

services:
 etcd:
   image: quay.io/coreos/etcd:v3.5.12
   container_name: etcd-single
   restart: always
   ports:
     - "2379:2379"   # etcd 客户端端口
     - "2380:2380"   # etcd 节点间通信端口
   volumes:
     - /data/apps/etcd/data:/data/apps/etcd/data
   command:
     - /usr/local/bin/etcd
     - --name=etcd-single
     - --data-dir=/data/apps/etcd/data
     - --listen-client-urls=http://0.0.0.0:2379
     - --advertise-client-urls=http://etcd-single:2379
     - --listen-peer-urls=http://0.0.0.0:2380
     - --initial-advertise-peer-urls=http://etcd-single:2380
     - --initial-cluster=etcd-single=http://etcd-single:2380
     - --initial-cluster-state=new

 etcdkeeper:
   image: evildecay/etcdkeeper
   container_name: etcdkeeper
   restart: always
   ports:
     - "8080:8080"
   environment:
     - ETCD_HOST=http://etcd-single:2379 
  • 启动
docker-compose up -d
  • 检查
docker-compose  logs -f --tail=10 etcd
docker-compose ps
netstat -lntup|egrep "2379|2380|8080"

docker-compose  logs -f --tail=10 etcdkeeper
Attaching to etcdkeeper
etcdkeeper    | 2025-07-14 02:18:26.771992 I | listening on 0.0.0.0:8080
etcdkeeper    | 2025-07-14 02:22:11.504933 I | POST v3 connect fail.
etcdkeeper    | 2025-07-14 02:22:24.218118 I | POST v3 connect fail.



docker-compose  logs -f --tail=200 etcd

etcd-single       | {"level":"warn","ts":"2025-07-14T03:01:33.980237Z","caller":"embed/config.go:679","msg":"Running http and grpc server on single port. This is not recommended for production."}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:33.981084Z","caller":"etcdmain/etcd.go:73","msg":"Running: ","args":["/usr/local/bin/etcd","--name=etcd-single","--data-dir=/data/apps/etcd/data","--listen-client-urls=http://0.0.0.0:2379","--advertise-client-urls=http://etcd-single:2379","--listen-peer-urls=http://0.0.0.0:2380","--initial-advertise-peer-urls=http://etcd-single:2380","--initial-cluster=etcd-single=http://etcd-single:2380","--initial-cluster-state=new"]}
etcd-single       | {"level":"warn","ts":"2025-07-14T03:01:33.983273Z","caller":"embed/config.go:679","msg":"Running http and grpc server on single port. This is not recommended for production."}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:33.983769Z","caller":"embed/etcd.go:127","msg":"configuring peer listeners","listen-peer-urls":["http://0.0.0.0:2380"]}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:33.984606Z","caller":"embed/etcd.go:135","msg":"configuring client listeners","listen-client-urls":["http://0.0.0.0:2379"]}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:33.98528Z","caller":"embed/etcd.go:308","msg":"starting an etcd server","etcd-version":"3.5.12","git-sha":"e7b3bb6cc","go-version":"go1.20.13","go-os":"linux","go-arch":"amd64","max-cpu-set":2,"max-cpu-available":2,"member-initialized":false,"name":"etcd-single","data-dir":"/data/apps/etcd/data","wal-dir":"","wal-dir-dedicated":"","member-dir":"/data/apps/etcd/data/member","force-new-cluster":false,"heartbeat-interval":"100ms","election-timeout":"1s","initial-election-tick-advance":true,"snapshot-count":100000,"max-wals":5,"max-snapshots":5,"snapshot-catchup-entries":5000,"initial-advertise-peer-urls":["http://etcd-single:2380"],"listen-peer-urls":["http://0.0.0.0:2380"],"advertise-client-urls":["http://etcd-single:2379"],"listen-client-urls":["http://0.0.0.0:2379"],"listen-metrics-urls":[],"cors":["*"],"host-whitelist":["*"],"initial-cluster":"etcd-single=http://etcd-single:2380","initial-cluster-state":"new","initial-cluster-token":"etcd-cluster","quota-backend-bytes":2147483648,"max-request-bytes":1572864,"max-concurrent-streams":4294967295,"pre-vote":true,"initial-corrupt-check":false,"corrupt-check-time-interval":"0s","compact-check-time-enabled":false,"compact-check-time-interval":"1m0s","auto-compaction-mode":"periodic","auto-compaction-retention":"0s","auto-compaction-interval":"0s","discovery-url":"","discovery-proxy":"","downgrade-check-interval":"5s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:33.991274Z","caller":"etcdserver/backend.go:81","msg":"opened backend db","path":"/data/apps/etcd/data/member/snap/db","took":"4.15448ms"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.010902Z","caller":"etcdserver/raft.go:495","msg":"starting local member","local-member-id":"5f7d89543c2167a5","cluster-id":"43cfa70370141ca2"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.011047Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 switched to configuration voters=()"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.011082Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 became follower at term 0"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.011096Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"newRaft 5f7d89543c2167a5 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.011119Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 became follower at term 1"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.011197Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 switched to configuration voters=(6880806800571066277)"}
etcd-single       | {"level":"warn","ts":"2025-07-14T03:01:34.029884Z","caller":"auth/store.go:1241","msg":"simple token is not cryptographically signed"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.033099Z","caller":"mvcc/kvstore.go:407","msg":"kvstore restored","current-rev":1}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.041992Z","caller":"etcdserver/quota.go:94","msg":"enabled backend quota with default value","quota-name":"v3-applier","quota-size-bytes":2147483648,"quota-size":"2.1 GB"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.045911Z","caller":"etcdserver/server.go:860","msg":"starting etcd server","local-member-id":"5f7d89543c2167a5","local-server-version":"3.5.12","cluster-version":"to_be_decided"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.047411Z","caller":"etcdserver/server.go:744","msg":"started as single-node; fast-forwarding election ticks","local-member-id":"5f7d89543c2167a5","forward-ticks":9,"forward-duration":"900ms","election-ticks":10,"election-timeout":"1s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.049959Z","caller":"fileutil/purge.go:50","msg":"started to purge file","dir":"/data/apps/etcd/data/member/snap","suffix":"snap.db","max":5,"interval":"30s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.050674Z","caller":"fileutil/purge.go:50","msg":"started to purge file","dir":"/data/apps/etcd/data/member/snap","suffix":"snap","max":5,"interval":"30s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.050717Z","caller":"fileutil/purge.go:50","msg":"started to purge file","dir":"/data/apps/etcd/data/member/wal","suffix":"wal","max":5,"interval":"30s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.050579Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 switched to configuration voters=(6880806800571066277)"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.051374Z","caller":"membership/cluster.go:421","msg":"added member","cluster-id":"43cfa70370141ca2","local-member-id":"5f7d89543c2167a5","added-peer-id":"5f7d89543c2167a5","added-peer-peer-urls":["http://etcd-single:2380"]}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.055367Z","caller":"embed/etcd.go:597","msg":"serving peer traffic","address":"[::]:2380"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.055652Z","caller":"embed/etcd.go:569","msg":"cmux::serve","address":"[::]:2380"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.055848Z","caller":"embed/etcd.go:277","msg":"now serving peer/client/metrics","local-member-id":"5f7d89543c2167a5","initial-advertise-peer-urls":["http://etcd-single:2380"],"listen-peer-urls":["http://0.0.0.0:2380"],"advertise-client-urls":["http://etcd-single:2379"],"listen-client-urls":["http://0.0.0.0:2379"],"listen-metrics-urls":[]}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412314Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 is starting a new election at term 1"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412412Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 became pre-candidate at term 1"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412441Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 received MsgPreVoteResp from 5f7d89543c2167a5 at term 1"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412461Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 became candidate at term 2"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412603Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 received MsgVoteResp from 5f7d89543c2167a5 at term 2"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412637Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"5f7d89543c2167a5 became leader at term 2"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.412652Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 5f7d89543c2167a5 elected leader 5f7d89543c2167a5 at term 2"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.414694Z","caller":"etcdserver/server.go:2068","msg":"published local member to cluster through raft","local-member-id":"5f7d89543c2167a5","local-member-attributes":"{Name:etcd-single ClientURLs:[http://etcd-single:2379]}","request-path":"/0/members/5f7d89543c2167a5/attributes","cluster-id":"43cfa70370141ca2","publish-timeout":"7s"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.414349Z","caller":"etcdserver/server.go:2578","msg":"setting up initial cluster version using v2 API","cluster-version":"3.5"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.415314Z","caller":"etcdmain/main.go:44","msg":"notifying init daemon"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.416065Z","caller":"etcdmain/main.go:50","msg":"successfully notified init daemon"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.415369Z","caller":"embed/serve.go:103","msg":"ready to serve client requests"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.418155Z","caller":"membership/cluster.go:584","msg":"set initial cluster version","cluster-id":"43cfa70370141ca2","local-member-id":"5f7d89543c2167a5","cluster-version":"3.5"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.419362Z","caller":"embed/serve.go:187","msg":"serving client traffic insecurely; this is strongly discouraged!","traffic":"grpc+http","address":"[::]:2379"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.421832Z","caller":"api/capability.go:75","msg":"enabled capabilities for version","cluster-version":"3.5"}
etcd-single       | {"level":"info","ts":"2025-07-14T03:01:34.423652Z","caller":"etcdserver/server.go:2602","msg":"cluster version is updated","cluster-version":"3.5"}

  • 监控
curl http://localhost:2379/metrics
posted @ 2025-07-14 10:58  Hello_worlds  阅读(31)  评论(0)    收藏  举报