天天看點

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叢集

繼續閱讀