consul是一款服務發現中介軟體,1.12版本後增加servicemesh功能.consul是分散式的,可擴充套件的,高可用的根據官方文件介紹,目前已知最大的consul叢集有5000個節點,consul被廣泛用用於服務發現,服務健康檢測以及分散式配置儲存,並且不斷地改進對servicemesh和kubernetes的支援,很多優秀專案包括ocelot,spring cloud都提供了與consul的便利整合,本系列也會將consul做為一個重點的有狀態服務較為細緻講解,讓大家對kubernetes在服務管理上的便捷性,自發性有更深的理解(在kubernetes裡,有狀態服務部署是一件很困難的事,要考慮服務間必須互相排斥,對服務資源的合理限制以及服務發生漂移時資料的處理,部分服務掛掉後如何在沒有人工介入的情況下自動加入叢集等問題),雖然我們在第一天接觸容器的時候都會看到容器與虛擬機器的對比,以及容器的優勢,但是很多初學者仍然是把容器當作虛擬機器來使用,按照在虛擬機器中部署應用的思路在容器裡部署應用,當然僅僅為了方便測試這樣做是無可厚非的,但是生產環境是非常嚴肅的,一定要對可能產生的問題有充分的預估以便提前安排應對方案,並且充分利用新技術的特點對自己應用的部署靈活性,維護便捷性以及應用本身的伸縮性等方面進行持續優化.
consul是一款服務發現中介軟體,1.12版本後增加servicemesh功能.consul是分散式的,可擴充套件的,高可用的.其主要功能如下
- service discovery:consul通過DNS或者HTTP介面使服務註冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣註冊。
- health checking:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的整合,可以防止服務轉發到故障的服務上面。
- key/value storage:一個用來儲存動態配置的系統。提供簡單的HTTP介面,可以在任何地方操作。
- multi-datacenter:無需複雜的配置,即可支援任意數量的區域
基本概念
CLIENT
CLIENT表示consul的client模式,就是客戶端模式。是consul節點的一種模式,這種模式下,所有註冊到當前節點的服務會被轉發到SERVER,本身是不持久化這些資訊。
SERVER
SERVER表示consul的server模式,表明這個consul是個server,這種模式下,功能和CLIENT都一樣,唯一不同的是,它會把所有的資訊持久化的本地,這樣遇到故障,資訊是可以被保留的。
SERVER-LEADER
中間那個SERVER下面有LEADER的字眼,表明這個SERVER是它們的老大,它和其它SERVER不一樣的一點是,它需要負責同步註冊的資訊給其它的SERVER,同時也要負責各個節點的健康監測。
其它資訊
其它資訊包括它們之間的通訊方式,還有一些協議資訊,演算法。它們是用於保證節點之間的資料同步,實時性要求等等一系列叢集問題的解決。這些有興趣的自己看看官方文件。
由於本系列的性質是關於devops的,因此不對consul做詳細介紹,需要了解consul的同學可以參考官方文件或者相關部落格.這裡的關注點主要在於測試環境和生產環境的部署上.
平臺支援情況
consul支援linux,macos和windows平臺,開發環境可以使用基於windows的consul,僅有一個可執行程式,使用非常方便,生產環境建議使用linux或者docker/kubernetes部署
後面我們將會對consul windows測試環境部署,docker 單節點部署,docker叢集部署,kubernetes叢集部署一一做介紹.
consul在windows下測試環境簡單部署
本篇只介紹在windows下部署單節點測試環境,關於叢集的部署可以參照後面docker的部署方式.
本篇非常簡單,但是考慮到內容的獨立性,因此單獨做為一節.
consul windows版下載
可以在百度裡搜尋consul
,進入到官網首頁就可以看到醒目的download,選擇windows 版的下載即可.
下載完成後可以看到是一個單檔案,名叫作consul.exe
,這裡建議把它單獨放到一個資料夾裡面,因為後面可能需要新增配置檔案,放在一個資料夾下面方便管理.
consul windows版 部署
注意這裡不像普通的exe雙擊安裝,而是需要通過命令列啟動
在consul.exe所在的資料夾
開啟命令視窗,輸入consul --help
就會出現以下關於consul的命令幫助
λ consul --help
Usage: consul [--version] [--help] <command> [<args>]
Available commands are:
acl Interact with Consul's ACLs
agent Runs a Consul agent
catalog Interact with the catalog
connect Interact with Consul Connect
debug Records a debugging archive for operators
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators.
intention Interact with Connect service intentions
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv Interact with the key-value store
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
operator Provides cluster-level tools for Consul operators
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
services Interact with services
snapshot Saves, restores and inspects snapshots of Consul server state
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consu
在命令視窗輸入consul agent -dev
就可以以dev模式啟動consul了,以下是輸出內容的頭部
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.4.0'
Node ID: '2be40d2e-a5eb-5dda-271f-70a39141d791'
Node name: 'DESKTOP-OE0CB8G'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
==> Log data will now stream in as it occurs:
通過以上輸入內容可以看到,consul已經執行,版本是1.4.HTTP埠是8500,我們在瀏覽器輸入localhost:8500
就可以看到consul的web管理介面了
至此,windows配置已經完成了.
更改預設埠
可以看到,預設情況下,http埠是8500,測試環境下我們可能沒有需求更改埠,可是正式環境部署的時候可能需要更改埠號,更改埠號也非常簡單,在啟動agent的時候加上-http-port
選項即可.
consul agent -dev -http-port=8400
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.4.0'
Node ID: '7a083b04-cd4a-04af-743b-4fdc8d82c62e'
Node name: 'DESKTOP-OE0CB8G'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8400, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
從輸出資訊中可以看到,http埠已經更改成8400了.