etcd 是一个高可用的分布式键值(key-value)数据库,etcd基于Go语言实现,在分布式系统被广泛应用。它的设计目标是为分布式系统提供一个高可用、强一致性且易于使用的基础组件。

安装

这里直接使用官方已经编译好的。

指定版本,并使用curl下载:

ETCD_VER=v3.4.13
DOWNLOAD_URL=https://github.com/etcd-io/etcd/releases/download

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

然后解压到/usr/local/etcd/:

mkdir /usr/local/etcd/

tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /usr/local/etcd --strip-components=1

查看版本:

/usr/local/etcd/etcd -version
/usr/local/etcd/etcdctl version

加入环境变量

添加到环境变量

vim /etc/profile.d/etcd.sh

加入以下内容:

PATH=$PATH:/usr/local/etcd
export PATH

使环境变量立即生效:

source /etc/profile

配置

这里需要创建etcd的配置文件和数据目录。

mkdir -p /var/lib/etcd
chmod 700 /var/lib/etcd

创建配置文件/etc/etcd/etcd.yml:

vi /etc/etcd/etcd.yml

填入以下内容:

data-dir: /var/lib/etcd
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379

配置 systemd

创建系统服务配置文件/etc/systemd/system/etcd.service,内容如下:

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/etcd/etcd --config-file /etc/etcd/etcd.yml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

重新加载并启动 etcd 服务

配置好系统服务配置文件后,可以使用systemctl来管理etcd服务了。

# 重新加载 systemd 管理器配置
sudo systemctl daemon-reload
# 启动 etcd 服务
sudo systemctl start etcd
# 设置 etcd 服务开机自启
sudo systemctl enable etcd
# 检查 etcd 服务状态
sudo systemctl status etcd

验证

启动服务后,可以使用etcdctl来验证。比如 put 一个键值对后,再取出。

etcdctl put foo bar
etcdctl get foo

最后

Etcd 是一个开源的、分布式的键值存储系统,专为分布式系统设计,以解决配置共享和服务发现等问题。它诞生于 CoreOS,后成为云原生计算基金会(CNCF)的一部分,这也奠定了它在现代分布式系统中的重要地位。Etcd 具有出色的可靠性和一致性,借助 Raft 共识算法,能确保数据在集群内各节点间保持一致,即使部分节点出现故障,整个系统仍能稳定运行。同时,它还支持 TLS 加密和访问控制,保障数据传输和存储的安全性。

Etcd 在众多领域都有广泛应用,是分布式系统的关键组件。在容器编排系统 Kubernetes 中,Etcd 作为其数据存储核心,存储着集群的所有关键配置和状态信息,支撑着整个集群的高效运转。在微服务架构里,Etcd 可用于服务发现和配置管理,服务实例将自身信息注册到 Etcd,其他服务通过它发现可用实例;应用程序也能从 Etcd 获取和更新配置。此外,Etcd 还能实现分布式锁和选主功能,为分布式系统的协调和同步提供支持。