天天看点

CentOS 7上搭建安全、容灾、高可用的etcd集群

本文讲的是<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集群

继续阅读