confd+etcd+nginx 實現簡單服務發現

php炎黃發表於2019-11-10

一. 專案背景

隨著微服務的興起,大量介面服務化。當新的微服務加入或微服務的資訊發生變更時,服務方如何通知周邊系統、使用方如何知道這些變更呢?

這時就需要服務的註冊配置和發現功能。

服務註冊配置——儲存的資訊至少包括正在執行的服務的主機和埠資訊
服務發現——允許其他使用者可以發現在服務註冊配置階段儲存的資訊

二. Confd簡介

Confd是一個輕量級的配置管理工具。Confd通過讀取後端儲存的配置資訊來動態更新對應的配置檔案,對應的後端儲存可以是etcd、consul、vault、environment variables、redis、zookeeper、dynamodb、stackengine、rancher等,其中etcd的v3版本對應的儲存後端為etcdv3。目前常用的儲存是etcd。

三. etcd簡介

etcd是CoreOS團隊於2013年6月發起的開源專案,它的目標是構建一個高可用的分散式鍵值(key-value)資料庫。etcd內部採用raft協議作為一致性演算法,etcd基於Go語言實現。

etcd作為服務發現系統,有以下的特點:

簡單:安裝配置簡單,而且提供了HTTP API進行互動,使用也很簡單
安全:支援SSL證照驗證
快速:根據官方提供的benchmark資料,單例項支援每秒2k+讀操作
可靠:採用raft演算法,實現分散式系統資料的可用性和一致性
etcd專案地址:https://github.com/coreos/etcd/

四. etcd+conf+nginx 架構圖

confd+etcd+nginx 實現簡單服務發現

五. 環境安裝(自己需要啟動etcd與nginx)

1.etcd

brew install etcd

2.nginx

brew install nginx

3.confd

請先在下載地址下載confd-0.16.0-darwin-amd64檔案 並新增執行許可權

六. 使用教程

編輯confd配置檔案

mkdir -p /etc/confd/{conf.d,templates}
touch /etc/confd/conf.d/myconfig.toml 

編輯myconfig.toml檔案

[template]
//模板檔案
src = "nginx.tmpl"
//生成nginx的配置目錄檔案
dest = "/usr/local/nginx/conf/conf.d/upstream.conf"

//監控KEY的改變,改變會自動重新生成nginx配置並重啟
keys = [ 
        "/portal",
        "/portal-upstream", 
        "/openapi",
        "/openapi-upstream", 
        "/gateway",
        "/gateway-upstream", 
]

owner = "root"//當前使用者
mode = "0644"

check_cmd = "nginx -t"//執行命令
reload_cmd = "nginx -s reload"//執行命令

配置用於生成upstream的模板檔案

upstream {{getv "/portal"}} {
 {{range getvs "/portal-upstream/*"}}
    server {{.}};
 {{end}}
}
upstream {{getv "/openapi"}} {
 {{range getvs "/openapi-upstream/*"}}
    server {{.}};
 {{end}}
}
upstream {{getv "/gateway"}} {
 {{range getvs "/gateway-upstream/*"}}
    server {{.}};
 {{end}}
}

修改nginx的配置檔案

include /usr/local/nginx/conf/conf.d/*.conf

增加etcd資料

etcdctl set /portal portal
etcdctl set /portal-upstream/portal01 192.168.81.11:30400
etcdctl set /openapi openapi
etcdctl set /openapi-upstream/openapi01 192.168.81.11:30600
etcdctl set /gateway gateway
etcdctl set /gateway-upstream/gateway01 192.168.81.11:30000

啟動confd監控etcd
confd支援兩種執行方式,即daemon和onetime。在守護程式模式下,confd輪詢後端以進行更改,並在必要時更新目標配置檔案。

confd -onetime -backend etcd -node http://127.0.0.1:2379

檢視nginx是否生成配置檔案

cat /usr/local/nginx/conf/conf.d/upstream.conf
upstream portal {
    server 192.168.81.11:30400
}
upstream openapi {
    server 192.168.81.11:30600
}
upstream gateway {
    server 192.168.81.11:30000
}

相關文章