本文講的是<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叢集