ETCD作为共享配置和服务发现的分布式,一致性的KV存储系统,被广泛应用于许多的分布式项目。许多文章对于etcd的应用场景有过及功能特性有过详细介绍。这里不多作展开。本文仅从配置上介绍etcd集群的搭建和具体的使用场景实例。
背景:
在开发过程中,开发人员经常会把数据库、开发环境的配置信息或是密码等写在配置文件中或者是在持续集成/部署的阶段调用账号密码等进行操作。这样既不合理,又不安全。因此需哟啊做一套简易的KeyDB配置管理信息以便于开发人员在尽可能使用简单的前提下调用配置信息,提高安全等级避免被黑客简单的攻破。在比对了CONSUL、ZOOKEEPER和ETCD之后,发现ETCD是一套非常完善的解决方法,非常适合我们的需求场景。
ETCD特性:
- 一致性协议: ETCD使用[Raft]协议,具有强一致性,方便工程实现;
- API:ETCD提供HTTP+JSON, gRPC接口,跨平台跨语言,ZK需要使用其客户端;
- 访问安全方面:ETCD支持HTTPS访问,ZK在这方面缺失;
方案:
基于Centos7的系统环境使用ETCD搭建集群,保证配管系统的的一致性和分区容错性。前端接一个web console(请自行github项目etcd-browser),让指定的部门管理员基于web页面,管理对应的目录及key/value映射关系。同时,当用户每次调用etcd的api进行delete/put/post 操作时,将操作记录通过python脚本加密后入库。
搭建过程:
一、ETCD的集群搭建
由于etcd采用了raft算法,当节点故障数不超过两台的情况下,能够保证数据的一致性及可用性,由于使用场景负载压力不大,因此选择以3台节点作为集群进行部署。
附github的项目地址: https://github.com/coreos/etcd, 另外,由于考虑到其中需要存放密码等敏感信息,因此需要通过生成的证书进行SSL认证确保密码的安全性。
1. 生成证书
首先下载cfssl和cfssljson工具。该工具可以按照配置的jason文件进行公钥/密钥及证书的生成。