本文讲的是<b>CentOS 7上搭建安全、容灾、高可用的etcd集群</b>【编者的话】etcd 是 CoreOS 团队发起的开源项目,基于 Go 语言实现,做为一个分布式键值对存储,通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。
本文目标是部署一个基于TLS(Self-signed certificates)的安全、快速灾难恢复(Disaster Recovery, SNAPSHOT)的高可用(High Availability)的etcd集群。
版本信息:
CoreOS官方推荐集群规模5个为宜,为了简化本文仅以3个节点为例:
官方建议配置
每个node的etcd配置分别如下:
etcd支持通过TLS加密通信,TLS channels可被用于集群peer间通信加密,以及client端traffic加密。Self-signed certificates与Automatic certificates两种安全认证形式,其中Self-signed certificates:自签名证书既可以加密traffic也可以授权其连接。本文以Self-signed certificates为例,使用Cloudflare的cfssl很容易生成集群所需证书。
首先,安装go以及设置环境变量GOPATH
下载并build CFSSL工具, 安装路径为$GOPATH/bin/cfssl, eg. cfssl, cfssljson会被安装到/export/go_path目录。
初始化certificate authority
配置CA选项, ca-config.json文件内容如下
ca-csr.json Certificate Signing Request (CSR)文件内容如下
用已定义的选项生成CA:cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
会在当前目录下生成如下文件
注:保存好ca-key.pem文件。
生成server端证书:
server.json内容如下:
}
接下来生成server端证书以及private key
将会生成如下文件:
生成peer certificate
替换 CN和hosts值,如下:
生成 member1 certificate与private key
得到如下文件:
在集群其他节点上重复如上步骤。
生成 client certificate
client.json内容如下:
生成client certificate
将会得到如下文件
拷贝节点1生成的证书到全部节点,并将证书全部置于/etc/ssl/etcd/目录, 至此TLS证书全部生成完成。
测试TLS
示例1: 客户端到服务器采用HTTPS客户端证书授权
启动etcd服务:
插入数据:
读取数据成功
示例2:Using self-signed certificates both encrypts traffic and authenticates its connections.
各节点的etcd配置分别如下
准备测试数据:
验证测试结果:
etcd failure主要分为如下5种情况:
1. 少数followers failure
2. Leader failure
3. 多数failure
4. Network partition
5. 启动时失败
接下来主要对上面情况3进行处理,也就是平时常说的Disaster Recovery
以etcd v3 provides snapshot 方式为例说明etcd一次灾难恢复过程。
首先,etcd正常工作时利用etcdctl snapshot save命令或拷贝etcd目录中的member/snap/db文件,以前者为例:
将生成snapshot拷贝到集群其他2个节点上,所有节点灾备的恢复都用同一个snapshot。
插入部分数据用于测试灾备:
测试数据已插入成功:
停止3个机器的etcd服务,并删除全部节点上etcd数据目录 。
恢复数据,以TLS enable为例,分别在3个节点执行如下命令进行恢复:
恢复数据log示例:
接下来,在3个节点上分别执行:
验证灾备恢复效果,原集群数据是否保存:
从上面结果可以看出,灾备恢复成功。
1. 请求大小限制:当前支持 RPC requests 1MB 数据,未来会有所增加或可配置
2. 存储大小限制:默认 2GB存储,可配置 --quota-backend-bytes扩展到8GB
etcd提供基于Prometheus + builtin Grafana的etcd Metrics监控方案和监控项,具体请参见
获取监控项举例
欢迎转载,请注明作者出处:张夏,FreeWheel Lead Engineer,DockOne社区
原文发布时间为:2017-08-06
本文作者:张夏
本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:CentOS 7上搭建安全、容灾、高可用的etcd集群