前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Etcd数据库应该知道的知识

Etcd数据库应该知道的知识

作者头像
希里安
发布2023-12-26 15:41:03
1600
发布2023-12-26 15:41:03
举报
文章被收录于专栏:希里安希里安

近日见闻

  1. 看新闻看到甘肃、青海部分地区受地震影响不小,心中很是悲痛,在此默默祈祷。我们活着的人要珍惜每一天,只因世事难料。
  2. OpenSSH 9.6 已发布,是完整的 SSH 协议 2.0 实现,且包括 sftp 客户端和服务器支持。
  3. 最近 Requests(Requests 是知名的 Python HTTP 库,项目已捐赠给 Python 软件基金会。) 作者 Kenneth Reitz 在社交媒体最近自己因躁狂症而失业,且表示自己目前的财务情况不佳,所以需要寻求资金来维持基本生存。确实不容易,项目地址:https://github.com/kennethreitz

Etcd数据库应该知道这些

什么是etcd数据库

Etcd是Go语言开发的一个开源的、高可用的分布式的键值(key-value)存储系统,它被设计用于可靠地存储关键性数据,并保证快速的访问速度。我们运维之道的etcd常被用于Kubernetes集群中存储配置信息和状态数据。

etcd核心组件

  1. etcd 服务器(etcd daemon):
    • 这是etcd的主要组件,运行在集群的每个节点上。它负责处理客户端请求,存储数据,并通过Raft协议与其他节点通信以保持数据一致。
  2. Raft 协议:
    • Raft是etcd用来处理复制日志和提供一致性的算法。它确保了即使在网络分区或节点故障的情况下,etcd集群也能正确地存储数据并选择一个领导者来协调操作。
    • 在Raft中,有三种角色:Leader(领导者)、Follower(跟随者)和Candidate(候选者)。Leader负责处理所有数据复制和日志同步的任务;Follower跟随Leader的指导,复制数据;而Candidate则是在Leader宕机后参与选举的节点。
  3. etcdctl:
    • 这是etcd的命令行客户端,用于与etcd服务器交互。你可以用它来增加、删除或获取存储的数据,管理集群成员,以及进行各种运维操作。
  4. 客户端API:
    • etcd提供了gRPC协议的API,客户端可以通过这些API与etcd集群交互。这使得不同的应用程序和服务能够以编程方式读取或写入数据。
  5. 存储引擎:
    • etcd使用MVCC(多版本并发控制)存储引擎来管理数据。每个键值对都可以有多个版本,这样你可以查询历史数据,同时支持事务操作。
  6. WAL(Write-Ahead Log):
    • 为了保证数据的持久性,etcd在内部使用预写式日志。在数据被写入存储引擎前,所有变更都会先被写入WAL。这是一个重要的故障恢复机制,可以在系统崩溃后重建状态。
  7. 快照:
    • etcd定期将其状态(键值对和Raft日志)保存到快照中。这减少了重启所需的时间,因为系统可以从最近的快照开始重新播放日志,而不是从头开始。

备份、恢复、清理、空间、健康查看

备份命令:
代码语言:javascript
复制
# 执行 etcdctl snapshot save 命令来创建备份
ETCDCTL_API=3 etcdctl snapshot save /path/to/backup.db \
  --endpoints=https://127.0.0.1:2379 \          # etcd 节点地址
  --cacert=/path/to/ca.crt \                    # CA 证书
  --cert=/path/to/server.crt \                  # 客户端证书
  --key=/path/to/server.key                     # 客户端密钥
  • 注意: 替换/path/to/backup.db和证书路径为你的实际文件路径。
恢复命令:
代码语言:javascript
复制
# 使用 etcdctl snapshot restore 命令从备份恢复数据
ETCDCTL_API=3 etcdctl snapshot restore /path/to/backup.db \
  --data-dir=/var/lib/etcd-from-backup \       # 指定新的数据目录
  --name m1 \                                  # 此etcd成员的名称
  --initial-cluster m1=http://host1:2380 \     # 整个集群的初始配置信息
  --initial-cluster-token etcd-cluster-1 \     # 新集群的唯一标识
  --initial-advertise-peer-urls http://host1:2380  # 此etcd成员通告给其他成员的URL
  • 注意: 恢复操作可能会导致数据丢失,应当在生产环境中谨慎使用,并确保在一个独立的环境中先行测试。
清理数据库命令:
代码语言:javascript
复制
# 清理(压缩)命令可以移除所有被覆盖、删除的键值对以节省空间
ETCDCTL_API=3 etcdctl compact <revision> \     # 指定要压缩的历史修订版本号
  --endpoints=https://127.0.0.1:2379 \         # etcd 节点地址
  --cacert=/path/to/ca.crt \                   # CA 证书
  --cert=/path/to/server.crt \                 # 客户端证书
  --key=/path/to/server.key                    # 客户端密钥
  • 注意: <revision> 应该替换为您希望压缩历史的具体修订版本号。您可以通过etcdctl get命令查看修订版本。
查看空间状态

要查看etcd数据库使用了多大空间,您可以使用etcdctl命令行工具来查询其存储的统计信息。以下是如何进行检查的示例命令:

代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint> \
  --cacert="/path/to/ca.crt" --cert="/path/to/cert.crt" --key="/path/to/key.key" \
  endpoint status --write-out=table

请将<etcd-endpoint>及后面的路径替换为您的etcd服务的实际访问地址和证书路径。这个命令的输出将会以表格的形式展示每个endpoint的状态信息,包括其数据库的大小。

健康状况

而对于检查etcd数据库的健康状况,可以使用如下etcdctl命令:

代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint> \
  --cacert="/path/to/ca.crt" --cert="/path/to/cert.crt" --key="/path/to/key.key" \
  endpoint health

这条命令会输出etcd成员的健康状况。如果etcd成员正常运行,您将看到<etcd-endpoint> is healthy的信息。

日常维护注意点:

在Kubernetes环境中,etcd的健康状况至关重要,因为它存储了所有Kubernetes对象的状态和配置。etcd的问题可能会影响整个集群的稳定性和性能。因此,定期检查etcd的健康状况和存储空间使用情况是Kubernetes集群维护的重要组成部分。

  • 正常操作: 定期检查集群健康状态,如成员健康和Raft状态。
  • 监控: 对etcd的性能指标进行监控,如请求延迟、读写次数和领导者变更次数。
  • 备份: 定期备份etcd数据,确保可以从系统崩溃中恢复。
  • 安全: 保护etcd的通信,使用SSL/TLS和客户端证书。
  • 软件版本: 保持etcd版本更新,以利用新特性和安全修复。

安装脚本

顺便分享一个一键安装脚本:

代码语言:javascript
复制
ETCD_VER=v3.5 # 设置etcd的版本为v3.5

rm -rf tmp/etcd/${ETCD_VER} # 删除旧的etcd版本目录
mkdir -p tmp/etcd/${ETCD_VER} # 创建新的目录用于存放下载的文件
cd tmp/etcd/${ETCD_VER} # 进入新创建的目录

# 使用curl命令下载etcd压缩包
echo "下载 etcd version $ETCD_VER..."
curl -L https://github.com/coreos/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz > etcd-${ETCD_VER}-linux-amd64.tar.gz
# 解压下载的压缩包
tar xzvf etcd-${ETCD_VER}-linux-amd64.tar.gz -C . --strip-components=1
# 将etcd和etcdctl二进制文件复制到/usr/local/bin目录

echo "复制etcdctl 到 /usr/local/bin..."

\cp -rf etcd /usr/local/bin/etcd
\cp -rf etcdctl /usr/local/bin/etcdctl
cd .. # 返回到上一级目录
rm -rf ${ETCD_VER} # 删除临时文件夹
etcd --version # 输出etcd版本信息
etcdctl --version # 输出etcdctl版本信息
# 设置ETCDCTL_API环境变量为3,并输出etcdctl版本信息
ETCDCTL_API=3 ./etcdctl version
# 启动etcd
echo "启动 etcd..."
/usr/local/bin/etcd

echo "etcd 安装完成!"
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-20,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 近日见闻
  • Etcd数据库应该知道这些
    • 什么是etcd数据库
      • etcd核心组件
        • 备份命令:
        • 恢复命令:
        • 清理数据库命令:
        • 查看空间状态
        • 健康状况
    • 备份、恢复、清理、空间、健康查看
      • 日常维护注意点:
        • 安装脚本
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com