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 前端工具
etcd
的 web
端工具可以用 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