1. Etcd 基本介绍
Etcd 是一个分布式 Key/Value 的存储系统,通过分布式锁、leader 选举、写屏障(write barriers) 实现了分布式协作,提供高可用、持久化数据存储和检索服务。
- 工作原理
每个 Etcd 节点都存储了一份完整的数据,任意时刻至多存在一个主节点。主节点处理所有来自客户端的写请求,并且通过 Raft 协议同步到其他节点。
- 存储原理
Etcd 数据持久化使用 WAL (write ahead log,预写式日志) 格式,在提交之前先写入 WAL,默认每 1W 条记录,做完快照之后,WAL 文件会被删除。
Etcd 在内存中,以 B 树对 Key 值建立索引,在磁盘中,以 B+ 树对 Value 进行存储记录历史版本。
2. Etcd 节点数要求
Etcd 节点越多,容错能力越强,写性能越差。官方推荐的 etcd 集群节点数量为 3,5,7。Etcd 集群最少需要 [N/2] + 1 个节点工作,才能保证集群正常。下面是集群节点数和最大容错节点数量对应表:
节点数 | 最大容错 |
---|---|
1 | 0 |
3 | 1 |
4 | 1 |
5 | 2 |
6 | 2 |
7 | 3 |
8 | 3 |
9 | 4 |
奇数个节点与偶数个节点,具有相同的容错能力。
3. 硬件环境要求
3.1 限制 Etcd 性能的因素
Etcd 对内存和 CPU 消耗并不高,足够就行。
一次 Etcd 请求的最小时间 = 成员节点之间的网络往返时延 + 收到数据之后进行持久化的时延。因此,Etcd 的性能主要受两方面的约束:
- 网络
- 磁盘
多节点的 Etcd 集群成员节点应该尽量部署在同一个数据中心,减少网络时延。同一数据中心内,不同节点的网络情况通常是非常好的,如果需要测试可以使用 ping
或 tcpdump
命令进行分析。下面主要讨论看看推荐的配置和硬盘 IO 测试方法。
3.2 CPU、内存建议配置
Cluster Node | Data Size | vCPUs | Memory (GB) | Max concurrent IOPS | Disk bandwidth (MB/s) |
---|---|---|---|---|---|
50 | no more than 100 MB | 2 | 8 | 3600 | 56.25 |
250 | no more than 500 MB | 4 | 16 | 6000 | 93.75 |
1000 | no more than 1 GB | 8 | 32 | 8000 | 125 |
3000 | more than 1 GB | 16 | 64 | 16,000 | 250 |
3.3 硬盘 IOPS 测试方法
Etcd 对磁盘写入延时非常敏感,通常要求达到 50 IOPS 以上,对于高负载的集群应该达到 500 IOPS 。常用的磁盘基准测试工具 diskbench 、 fio 。这里以 CentOS 上使用 fio 为例:
- 查看磁盘信息
|
|
- 安装 fio
|
|
- io 测试
|
|
|
|
其中,filename 为测试设备,更多参数可以查看上面的 GitHub 链接。这里得到 IOPS 为 1288,磁盘带宽为 53.6 MB/s 。
4. 安装 Etcdctl
|
|
在使用 Etcdctl 过程中,需要节点证书。有两种方式提供证书:
- 在命令行中
|
|
这样就要求,每条 Ectdctl 命令都需要加上证书和版本相关参数。
- 通过环境变量注入
|
|
可以将这些环境变量设置在 /etc/profile
中,然后 source /etc/profile
,就可以直接使用下面的命令进行操作。
|
|
5. Etcdctl 常见运维操作
- 获取 etcd 版本
|
|
- 查看节点
|
|
- 增删节点
增加节点
|
|
删除节点
|
|
- 备份和恢复
备份
|
|
恢复时,需要停止全部 apiserver、etcd 实例,删除当前的 etcd 数据,然后拷贝备份数据到每个 etcd 节点上,执行命令
|
|
- 查看集群状态
|
|
- 增删改查
具体某个 Key
|
|
根据前缀查询
|
|
增加/修改
|
|
|
|