Etcd教程 — 第一章 Etcd简介、Etcd单机安装
1 Etcd介绍
1.1 介绍
Etcd
是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。
1.2 Etcd特点
Etcd
具有以下特点:
完全复制
:集群中的每个节点都可以使用完整的存档。高可用性
:Etcd可用于避免硬件的单点故障或网络问题。一致性
:每次读取都会返回跨多主机的最新写入。简单
:包括一个定义良好、面向用户的API(gRPC)。安全
:实现了带有可选的客户端证书身份验证的自动化TLS。快速
:每秒10000次写入的基准速度。可靠
:使用Raft算法实现了强一致、高可用的服务存储目录。
2 Etcd单机安装
2.1 开放端口
开放每台机器上的2379、2380端口的命令:
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
重启防火墙:
firewall-cmd --reload
查看开放的端口:
firewall-cmd --list-port
2.2 安装包及安装教程
安装包下载地址:https://github.com/etcd-io/etcd/tags
选择最新版本,同时里面还有Linux、macOS (Darwin)、Docker这三种安装方式的步骤以及安装包。
注意:2.2到2.4的安装方式在github上都有写,详见:https://github.com/etcd-io/etcd/releases/tag/v3.5.13
2.3 Linux安装Etcd
2.3.1 创建执行脚本
在 linux的 /opt/soft/etcd/
目录下创建一个脚本文件:
vim etcd
2.3.2 脚本内容
ETCD_VER=v3.5.13
# choose either URL 翻译:选择下面两个任意一个地址即可
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}
rm -f /opt/soft/etcd/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /opt/soft/etcd/etcd-download-test && mkdir -p /opt/soft/etcd/etcd-download-test
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /opt/soft/etcd/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar -zxvf /opt/soft/etcd/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /opt/soft/etcd/etcd-download-test --strip-components=1
rm -f /opt/soft/etcd/etcd-${ETCD_VER}-linux-amd64.tar.gz
#查看安装是否成功的相关命令
/opt/soft/etcd/etcd-download-test/etcd --version
/opt/soft/etcd/etcd-download-test/etcdctl version
/opt/soft/etcd/etcd-download-test/etcdutl version
2.3.3 执行脚本里的命令
在 /opt/soft/etcd
执行:
./etcd
如果在执行时提示权限不够,则需要授权,然后再次执行即可:
chmod 777 etcd
2.3.4 查看Etcd安装是否成功
2.3.4.1 查看Etcd服务端安装是否成功
/opt/soft/etcd/etcd-download-test/etcd --version
如下显示则安装成功:
etcd Version: 3.5.13
Git SHA: c9063a0dc
Go Version: go1.21.8
Go OS/Arch: linux/amd64
注意
:需要将Etcd加入到环境变量中,否则会在 3.3.3 执行goreman启动命令
步骤时报 /bin/sh: etcd: 未找到命令
。
vim ~/.bashrc
将Etcd环境变量添加到文件末尾。
export GOROOT=/usr/local/go #GOROOT是系统上安装Go软件包的位置。
export GOPATH=/root/go/GOPATH #GOPATH是工作目录的位置。这个是自己创建的,想放在哪都行
export ETCD=/opt/soft/etcd/etcd-download-test #ETCD
#export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
export PATH=$GOPATH/bin:$GOROOT/bin:$ETCD:$PATH
export GOPROXY="https://goproxy.cn"
加完后按esc键退出编辑模式,输入:wq保存退出。
更新配置文件:
source ~/.bashrc
2.3.4.2 查看Etcd客户端安装是否成功
/opt/soft/etcd/etcd-download-test/etcdctl version
如下显示则安装成功:
etcdctl version: 3.5.13
API version: 3.5
2.3.5 测试
- 启动Etcd
/opt/soft/etcd/etcd-download-test/etcd
- 添加/查看数据
/opt/soft/etcd/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
/opt/soft/etcd/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
[root@node1192 ~]# /opt/soft/etcd/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
OK
[root@node1192 ~]# /opt/soft/etcd/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
foo
bar
2.4 macOS (Darwin)安装Etcd(未实操)
ETCD_VER=v3.5.13
# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}
rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
/tmp/etcd-download-test/etcdutl version
2.5 Docker安装Etcd(推荐)
Docker安装Etcd前,需要先在Linux上安装Docker,Docker的安装步骤参见:centos7安装docker
1 创建Etcd的数据目录
mkdir -p /opt/soft/etcd/data
2 Docker部署Etcd
- 拉取镜像:
# 拉取etcd镜像
docker pull quay.io/coreos/etcd:v3.5.13
- Docker运行Etcd:
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--restart=always \
--mount type=bind,source=/opt/soft/etcd/data,destination=/etcd-data \
--name etcd \
quay.io/coreos/etcd:v3.5.13 \
/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
3 Docker查看Etcd版本及使用
相关命令:
# 查看Etcd服务器版本
docker exec etcd /usr/local/bin/etcd --version
# 查看Etcd客户端版本
docker exec etcd /usr/local/bin/etcdctl version
docker exec etcd /usr/local/bin/etcdutl version
# 查看Etcd健康状况
docker exec etcd /usr/local/bin/etcdctl endpoint health
# Etcd添加数据
docker exec etcd /usr/local/bin/etcdctl put foo bar
# Etcd查看数据
docker exec etcd /usr/local/bin/etcdctl get foo
# Etcd查看所有数据
docker exec etcd /usr/local/bin/etcdctl get --prefix ""
# Etcd删除数据
docker exec etcd /usr/local/bin/etcdctl del foo
执行结果:
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcd --version
etcd Version: 3.5.13
Git SHA: c9063a0dc
Go Version: go1.21.8
Go OS/Arch: linux/amd64
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl version
etcdctl version: 3.5.13
API version: 3.5
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdutl version
etcdutl version: 3.5.13
API version: 3.5
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl endpoint health
127.0.0.1:2379 is healthy: successfully committed proposal: took = 5.561765ms
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl put foo bar
OK
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl get foo
foo
bar
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl get --prefix ""
foo
bar
[root@node1192 soft]# docker exec etcd /usr/local/bin/etcdctl del foo
1