推荐的硬件配置

    etcd通常在开发或测试的时候用很少的资源就可以了,比如说使用普通的笔记本或者是廉价的云主机就可以,但是在生产环境上,还是需要按推荐的硬件配置进行部署,虽然这不是必须的,但是这样做可以增加集群的健壮性。一如既往,在上生产环境之前,需要先进行负载模拟测试。

CPUs

    很少有etcd部署需要大量的CPU资源。典型的etcd部署节点,需要2-4个CPU就可以顺利运行。负载很高的etcd集群,比如上千客户端或者每秒超过上万请求,倾向于CPU绑定,可以直接从内存获取请求。即便这样重的负载,通常需要8-16个CPU就可以了。

内存

    etcd占用的内存相对比较小,但是etcd性能仍然取决于是否拥有足够的内存。一个etcd服务器会积极的缓存key-value数据和大部分的跟踪watcher。通常8GB内存就够了,对于负载高的集群,比如有上千watcher和超过百万的keys,相应的就需要16GB-64GB内存。

磁盘

    高速磁盘是保证etcd部署性能和稳定性的关键因素。

    慢磁盘会增加etcd的请求延时,潜在影响集群的稳定性。因为etcd一致性协议依赖于元数据写入持久化日志,并且要求集群大多数成员将请求写入磁盘。此外,etcd还会到磁盘上增量检查集群的状态,从而可以截断日志。如果这些写操作花费太长的时间,心跳就可能会超时,触发选举操作,从而破坏集群的稳定性。

    etcd对磁盘写入延时非常敏感。通常稳定达到50 IOPS(比如:一个7200转的磁盘)是必须的,对于负载很高的集群,推荐能稳定达到500 IOPS(比如:一个典型的本地SSD盘或者高性能的虚拟块设备盘)。注意,大多数云服务提供商发布的是瞬时并发IOPS,并不是稳定的IOPS,瞬时并发IOPS可能十倍于稳定连续的IOPS(说明:因为瞬时并发IOPS可能会写缓存,或者测试时无其他用户竞争磁盘资源,所以会很高,当测试时间很长后,就会测试出设备的真实IOPS能力,这个在国内云厂商基本没有这个问题)。测试稳定连续IOPS,我们建议使用磁盘基准测试工具,比如 diskbench 或者 fio

    etcd对磁盘带宽没什么要求,但是更大的磁盘带宽可以在失败节点加入集群时,更快的完成恢复操作。通常10MB/s带宽的磁盘15s可以恢复100MB的数据,对于大型集群,100MB/s或更高带宽的磁盘可以在15s内恢复1GB数据。

    如果有可能,etcd后端存储就用SSD。一个SSD磁盘和机械盘相比,通常会提供更低的写入延时和更少的数据跳变(variance),因此可以提高etcd集群的稳定性和可靠性。如果使用机械盘,尽可能使用最快的(15000转)。使用RAID 0也是一种有效提高磁盘性能的方法,不管是机械盘还是SSD都可以。etcd集群至少有3个节点,磁盘使用RAID做镜像或者做奇偶校验都是不必要的,因为etcd自身的一致性复制已经保证了数据的高可用。

网络

    多节点部署的etcd集群会受益于快速和可靠的网络。为了满足etcd集群的一致性和分区容忍,一个不可靠网络出现网络分区会导致部分节点无效。低延时可以保证etcd成员之间快速通信,高带宽可以减少etcd故障节点的恢复时间。1Gb网络就可以满足常见的etcd部署场景,对于大型etcd集群,使用10Gb网络可以减少平均故障恢复时间。

    如果有可能,尽量将所有etcd成员节点部署在同一个数据中心,这样可以避免网络延时开销,降低发生网络分区的可能性。如果需要另外的数据中心级故障域,尽量选择和当前数据中心离得比较近的。也可以阅读性能调优文档,了解跨数据中心部署的更多信息。

示例硬件配置

    这有一些在AWS和GCE环境上的硬件配置例子。如上所述,但是还是有必要再强调一下,无论如何,管理员在将etcd集群投入生产环境使用之前,都应该做一下模拟负载测试。

    请注意:这些配置假设这些服务器只用来跑etcd服务。如果在这些服务器上还跑其他服务,可能会导致其他服务和etcd抢资源,存在资源竞争问题,导致etcd集群不稳定。

小型集群

    一个小型集群服务少于100个客户端,访问请求小于每秒200,并且存储不超过100MB的数据。

示例应用负载:一个50节点的kubernetes集群

提供商

类型

vCPUs

内存 (GB)

最大并发IOPS

磁盘带宽 (MB/s)

AWS

m4.large

2

8

3600

56.25

GCE

n1-standard-2 + 50GB PD SSD

2

7.5

1500

25

中型集群

    一个中型集群服务少于500个客户端,访问请求小于每秒1000,并且存储不超过500MB的数据。

示例应用负载:一个250节点的kubernetes集群

提供商

类型

vCPUs

内存 (GB)

最大并发IOPS

磁盘带宽 (MB/s)

AWS

m4.xlarge

4

16

6000

93.75

GCE

n1-standard-4 + 150GB PD SSD

4

15

4500

75

大型集群

    一个大型集群服务少于1500个客户端,访问请求小于每秒10000,并且存储不超过1GB的数据。

示例应用负载:一个1000节点的kubernetes集群

提供商

类型

vCPUs

内存 (GB)

最大并发IOPS

磁盘带宽 (MB/s)

AWS

m4.2xlarge

8

32

8000

125

GCE

n1-standard-8 + 250GB PD SSD

8

30

7500

125

超大型集群

    一个超大型集群服务超过1500个客户端,访问请求超过每秒10000,并且存储超过1GB的数据。

示例应用负载:一个3000节点的kubernetes集群

提供商

类型

vCPUs

内存 (GB)

最大并发IOPS

磁盘带宽 (MB/s)

AWS

m4.4xlarge

16

64

16,000

250

GCE

n1-standard-16 + 500GB PD SSD

16

60

15,000

250


官方原文链接:https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/hardware.md