1. 使用 apt 或 yum 安装 etcd

命令如下:

sudo apt-get install etcd

或者

sudo yum install etcd

这样安装的缺点是:安装的 etcd 版本过低为 2.2.5,该版本使用 Go 的版本为 1.6 如下所示:

wohu@ubuntu-dev:~$ etcd
2021-04-17 09:18:52.987281 I | etcdmain: etcd Version: 2.2.5
2021-04-17 09:18:52.987309 I | etcdmain: Git SHA: Not provided (use ./build instead of go build)
2021-04-17 09:18:52.987314 I | etcdmain: Go Version: go1.6rc2
2021-04-17 09:18:52.987318 I | etcdmain: Go OS/Arch: linux/amd64
2021-04-17 09:18:52.987322 I | etcdmain: setting maximum number of CPUs to 8, total number of available CPUs is 8
2021-04-17 09:18:52.987327 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2021-04-17 09:18:52.987477 C | etcdmain: listen tcp 127.0.0.1:2380: bind: address already in use
wohu@ubuntu-dev:~$ 

而我们现在通常使用的是 etcd 3.x 版本以上,所以不符合我们的要求。

对应的我们可以使用 apt 或者 yum 卸载已经安装的 etcd,命令如下:

sudo apt-get remove etcd

2. 二进制包安装 etcd

我们安装 etcd3.4.15 版本,安装脚本如下:

ETCD_VER=v3.4.15

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

# install end and check etcd version
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version

安装完成后的输出结果:

etcd Version: 3.4.15
Git SHA: aa7126864
Go Version: go1.12.17
Go OS/Arch: linux/amd64
etcdctl version: 3.4.15
API version: 3.4

2.1 启动 etcd

# start a local etcd server
/tmp/etcd-download-test/etcd

启动时命令打印如下:

wohu@ubuntu-dev:~/tools$ /tmp/etcd-download-test/etcd
[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2021-04-17 09:47:53.260038 I | etcdmain: etcd Version: 3.4.15
2021-04-17 09:47:53.260065 I | etcdmain: Git SHA: aa7126864
2021-04-17 09:47:53.260070 I | etcdmain: Go Version: go1.12.17
2021-04-17 09:47:53.260074 I | etcdmain: Go OS/Arch: linux/amd64
2021-04-17 09:47:53.260078 I | etcdmain: setting maximum number of CPUs to 8, total number of available CPUs is 8
2021-04-17 09:47:53.260086 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
[WARNING] Deprecated '--logger=capnslog' flag is set; use '--logger=zap' flag instead
2021-04-17 09:47:53.260311 I | embed: name = default
2021-04-17 09:47:53.260318 I | embed: data dir = default.etcd
2021-04-17 09:47:53.260323 I | embed: member dir = default.etcd/member
2021-04-17 09:47:53.260327 I | embed: heartbeat = 100ms
2021-04-17 09:47:53.260333 I | embed: election = 1000ms
2021-04-17 09:47:53.260337 I | embed: snapshot count = 100000
2021-04-17 09:47:53.260349 I | embed: advertise client URLs = http://localhost:2379
2021-04-17 09:47:53.350082 I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d switched to configuration voters=()
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d became follower at term 0
raft2021/04/17 09:47:53 INFO: newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d became follower at term 1
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d switched to configuration voters=(10276657743932975437)
2021-04-17 09:47:53.394166 W | auth: simple token is not cryptographically signed
2021-04-17 09:47:53.444208 I | etcdserver: starting server... [version: 3.4.15, cluster version: to_be_decided]
2021-04-17 09:47:53.444331 I | etcdserver: 8e9e05c52164694d as single-node; fast-forwarding 9 ticks (election ticks 10)
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d switched to configuration voters=(10276657743932975437)
2021-04-17 09:47:53.444616 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
2021-04-17 09:47:53.445514 I | embed: listening for peers on 127.0.0.1:2380
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d is starting a new election at term 1
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d became candidate at term 2
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 2
raft2021/04/17 09:47:53 INFO: 8e9e05c52164694d became leader at term 2
raft2021/04/17 09:47:53 INFO: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 2
2021-04-17 09:47:53.651082 I | etcdserver: setting up the initial cluster version to 3.4
2021-04-17 09:47:53.661434 N | etcdserver/membership: set the initial cluster version to 3.4
2021-04-17 09:47:53.661471 I | etcdserver/api: enabled capabilities for version 3.4
2021-04-17 09:47:53.661496 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c32
2021-04-17 09:47:53.661520 I | embed: ready to serve client requests
2021-04-17 09:47:53.662148 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!

2.2 读写 etcd

# write,read to etcd
wohu@ubuntu-dev:~/tools$ /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
OK
wohu@ubuntu-dev:~/tools$ /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
foo
bar
wohu@ubuntu-dev:~/tools$ 

3. Docker 安装 etcd

etcd 使用 gcr.io/etcd-development/etcd 作为主要的容器仓库, quay.io/coreos/etcd 作为备用候选的容器仓库。

安装命令:

rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
  docker rmi gcr.io/etcd-development/etcd:v3.4.15 || true && \
  docker run \
  -p 2379:2379 \
  -p 2380:2380 \
  --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
  --name etcd-gcr-v3.4.15 \
  gcr.io/etcd-development/etcd:v3.4.15 \
  /usr/local/bin/etcd \
  --name s1 \
  --data-dir /etcd-data \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://0.0.0.0:2380 \
  --initial-cluster s1=http://0.0.0.0:2380 \
  --initial-cluster-token tkn \
  --initial-cluster-state new \
  --log-level info \
  --logger zap \
  --log-outputs stderr

测试是否安装成功:

docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcd --version"
docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl version"
docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl get foo"

由于 gcr.io/etcd-development 可能无法访问,所以可以使用下面的方法替代。

docker run -d --name Etcd-server \
    --network app-tier \
    --publish 2379:2379 \
    --publish 2380:2380 \
    --env ALLOW_NONE_AUTHENTICATION=yes \
    --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
    bitnami/etcd:latest

参考:https://hub.docker.com/r/bitnami/etcd

4. etcd 前端工具

etcdweb 端工具可以用 etcdkeeper 或者 etcdv3-browser 。有关 etcdv3-browser 可以参考 https://blog.csdn.net/inthirties/article/details/126741393

docker pull joinsunsoft/etcdv3-browser
docker run --rm --name=etcdv3-browser -p 9996:80  -d joinsunsoft/etcdv3-browser:latest

然后浏览器中输入:http://127.0.0.1:9996/,使用下面的账号密码登录

  • Username: ginghan
  • Password: 123456

参考:
https://github.com/etcd-io/etcd/releases/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐