足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

首頁 > 知識庫 > 正文

如何用Consul打造彈性可擴展的PaaS平臺
2016-02-20 19:34:24   來源: 杜威 高效運維    評論:0 點擊:

Consul的運維成本低,部署簡單、使用方便、五臟俱全,這對于中小型團隊應(yīng)該是性價比很高的。本文介紹具體的Consul應(yīng)用過程和相應(yīng)的步驟,供大家參考!

作者介紹

\
 

杜威,程序員,混跡互聯(lián)網(wǎng)研發(fā)和運維近十年。《Linux系統(tǒng)案例精解》合著者之一。目前就職亮風臺,專注DevOps、云計算、大數(shù)據(jù)等相關(guān)領(lǐng)域。

應(yīng)用背景

HiAR 是亮風臺打造的新一代增強現(xiàn)實(AR)開發(fā)平臺,提供簡單易用、功能強大、跨平臺的 AR 服務(wù)。讓廣大開發(fā)者可以輕松使用最前沿的計算機視覺技術(shù)、計算機圖形學技術(shù),快速搭建個性化的 AR 應(yīng)用。

\ 

云服務(wù)是HiAR平臺中重要的基礎(chǔ)設(shè)施。無論從高可用,還是到可擴展,服務(wù)發(fā)現(xiàn)都發(fā)揮著不可或缺的作用。在沒有使用服務(wù)發(fā)現(xiàn)之前,我們遇到的幾個痛點:

◆ 系統(tǒng)添加一個服務(wù)節(jié)點,我們需要手工修改Nginx/LVS的配置文件、修改DNS記錄。

◆ 應(yīng)用服務(wù)發(fā)布新版本,我們還是需要手工修改Nginx的配置文件把節(jié)點下線、等待發(fā)布成功后,再次修改Nginx的配置文件把服務(wù)上線。

◆ 盡管后來我們對上面兩種場景的運維做了改進,編寫腳本把過程改良為半自動半手動的方式,但還不是很方便,而結(jié)合服務(wù)注冊就可以做到全自動。

◆ 內(nèi)網(wǎng)DNS出了故障,我們需要對DNS服務(wù)進行維護。

◆ 沒有服務(wù)注冊,限制了Docker的發(fā)揮,只能當輕量級虛擬機來用。

現(xiàn)在,有了服務(wù)發(fā)現(xiàn),一切都變得簡單有趣。增減服務(wù)節(jié)點可以自動更新Nginx/LVS的配置文件;DNS丟一邊吧!用IP就好;接入Mesos+Docker玩彈性擴展。

為什么選擇 Consul

已經(jīng)有很多文章對Zookeeper、etcd、Consul進行比較,這里就不重復(fù)類比了。沒有什么比合適更重要!Consul 的運維成本低,部署簡單、使用方便、五臟俱全,這對于中小型團隊應(yīng)該是性價比很高的。

在進入實戰(zhàn)前,先看看 Consul 都有哪些特性。

◆ 服務(wù)注冊。通過HTTP API或DNS,告訴服務(wù)注冊中心有新的服務(wù)加入。

◆ 服務(wù)發(fā)現(xiàn)。通過HTTP API或DNS,可以知道目標服務(wù)的地址和端口。

◆ 健康檢查。支持多種方式,HTTP、TCP、Docker、Shell腳本定制化監(jiān)控。

◆ 配置模板。Consul Template 負責定期從服務(wù)注冊中心獲取信息,如果有變化自動更新配置文件并重新加載。

以上四點已經(jīng)能滿足很多企業(yè)的需求。當然這不是Consul的所有,Consul還有很多錦上添花的特性,比如:可視化Web界面、支持多數(shù)據(jù)中心。

實戰(zhàn)經(jīng)驗

我們對Consul的使用可以歸納到四個方面:部署、應(yīng)用、管理、升級。

部署

\ 

Consul Cluster有Server和Client兩種角色。Server一般是3~5臺,這也是官方推薦的。Consul Client就是需要進行服務(wù)注冊或服務(wù)發(fā)現(xiàn)的節(jié)點。

Consul的部署簡單、開箱即用,一個consul可執(zhí)行文件,還沒有亂七八糟的依賴。在官網(wǎng)下載編譯好的Consul agent可執(zhí)行文件,并上傳到所有Server和Client角色的節(jié)點,便隨時可啟動consul agent了。

下面一起來看看,如何啟動一個Consul集群(3臺Server、1臺Client)。

實驗環(huán)境:

  1. server01 192.168.1.11 
  2. server02 192.168.1.12 
  3. server03 192.168.1.13 
  4. client01 192.168.1.21 

分別登錄Server01、Server02、Server03,并啟動agent。

  1. [worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01 
  2. [worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02 
  3. [worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03 

新開窗口登錄Server03,加入Server01、Server02的集群。

  1. [worker@server03 ~]$ consul join 192.168.1.11 192.168.1.12 

上面幾步就完成了初始化Server節(jié)點,以后通過-rejoin參數(shù)啟動,可以重新加入集群。

  1. [worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01 -rejoin 
  2. [worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02 -rejoin 
  3. [worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03 -rejoin 

就這樣三個Server節(jié)點部署完畢。接下來,部署Client節(jié)點,和Server節(jié)點一樣,有初次啟動、手工加入和重新加入集群三步。

  1. [worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01 

還是在Client01上,新開一個登錄窗口,加入Server01的集群。

  1. [worker@client01 ~]$ consul join 192.168.1.11 

Client01節(jié)點日后的維護,通過-rejoin參數(shù)啟動,便可重新加入集群。

  1. [worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01 -rejoin 

到這里為止,我們已經(jīng)搭建好了一個Consul集群。然而,怎么進行服務(wù)注冊和服務(wù)發(fā)現(xiàn)呢?這得跟實際需求緊密結(jié)合,在接下來的小節(jié)中進一步說明。

應(yīng)用 

\ 

Consul不是單獨存在的。為了充分發(fā)揮Consul的優(yōu)勢,可以結(jié)合Nginx、LVS、Docker等工具來應(yīng)用。

Nginx、LVS是系統(tǒng)的基礎(chǔ)組件,RecoService、FeatureService、SearchService是基于SOA的內(nèi)部服務(wù)。前者向Consul集群發(fā)現(xiàn)服務(wù),后者向Consul集群注冊服務(wù)。Consul是粘合劑也是開關(guān),讓整個系統(tǒng)的運作起來,低成本的實現(xiàn)了彈性伸縮。

接入層,用的是Nginx,負責反向代理和負載均衡。Nginx節(jié)點上跑兩個Consul相關(guān)服務(wù)。一個是Consul Agent,做Consul Client;另外一個是Consul Template,做服務(wù)發(fā)現(xiàn)和配置更新。Consul Template負責定期查詢本地Consul Agent,如果相關(guān)服務(wù)的注冊信息有變化,則更新Nginx的配置文件并重新加載Nginx服務(wù)。

運行Consul Template是實現(xiàn)彈性擴展的關(guān)鍵步驟:

  1. $ consul-template -consul 127.0.0.1:8500 -template "/etc/nginx/conf/vhosts/test.ctmpl:/etc/nginx/conf/vhosts/test.conf:nginx -s reload" 

上面這句命令中,test.conf是Nginx的虛擬主機配置文件,test.ctmpl是該配置文件對應(yīng)的模板。下面是模板在負載均衡上的代碼片段:

  1. upstream test-cluster { 
  2. ip_hash;{{range service "test"}} 
  3. server {{.Address}}:{{.Port}};{{end}} 

邏輯層,基于SOA的內(nèi)部服務(wù)集群。不同的內(nèi)部服務(wù)集群之間通信需要做服務(wù)發(fā)現(xiàn),這里引入LVS做服務(wù)發(fā)現(xiàn)。好處是不用在內(nèi)部服務(wù)的代碼里實現(xiàn)服務(wù)發(fā)現(xiàn),而且規(guī)模大了還要做負載均衡。與接入層的Nginx類似,LVS也用Consul Template定期查詢本地Consul Agent,更新相關(guān)配置文件,然后重載服務(wù)。

內(nèi)部服務(wù)如何向服務(wù)中心注冊?有兩種方式,一是通過Consul的服務(wù)注冊HTTP API,由服務(wù)自身在啟動后調(diào)用API注冊自己,二是通過在配置文件中定義服務(wù)的方式進行注冊。建議使用后面一種方式來做服務(wù)注冊。怎么辦到的?請繼續(xù)往下看 :)

為項目添加一個配置文件consul.json,指定服務(wù)名稱和服務(wù)端口,并加上健康檢查,內(nèi)容如下:

  1.     "service":  
  2.     { 
  3.         "name" : "test"
  4.         "port" : 9999, 
  5.         "check":  
  6.         { 
  7.           "tcp""127.0.0.1:9999"
  8.           "interval""10s" 
  9.         } 
  10.     } 

最后一步,對服務(wù)進行注冊,需要在Consul agent啟動時指定配置文件,如下:

  1. $ consul agent -data-dir /tmp/consul -node=test -bind=192.168.1.21 -config-dir=/tmp/consul.json 

管理

一是節(jié)點管理,也就是Consul進程的管理。由于Consul Agent本身不具備高可用能力,所以我們有必要對Consul進程進行接管,我們用的是Systemd,你也可以選擇Supervisord或者Upstart這些進程管理工具。

二是集群管理,Consul提供了可視化管理界面。可以查看所有的服務(wù)和節(jié)點,以及它們的健康檢測和當前狀態(tài)。

\ 

升級

由于Consul關(guān)系到整個系統(tǒng)的正常運作,所以升級的時候還是要很小心。最好在測試環(huán)境試驗多幾次,再到生產(chǎn)環(huán)境升級。升級的狀況可以歸納為下面三種,需要對號入座之后再進行升級。

◆ 特殊版本的升級。在upgrade-specific頁面查看當前升級的版本是否有特殊說明。比如:0.5.1之前的版本直接升級到0.6版本,要借助工具consul-migrate進行數(shù)據(jù)遷移。

◆ 不兼容的升級。使用consul -v查看新版的向后兼容協(xié)議版本號,當出現(xiàn)與當前版本不兼容時,需要分兩步升級。先通過參數(shù)-protocal=舊的協(xié)議版本號,把整個集群升級一次,再把啟動命令中的參數(shù)-protocal去掉來重啟所有節(jié)點。

◆ 標準的升級。如果上面兩種情況都不是,那么恭喜你,你需要做的只是簡單的標準升級。即:停止舊版本的agent,然后啟動新版本的agent。PS:其實大多數(shù)情況都是標準升級。

升級節(jié)點的推薦順序是,先升級Server的Follower節(jié)點,再升級Server的Leader節(jié)點,最后升級所有Client的節(jié)點。

結(jié)語

在系統(tǒng)中引入服務(wù)注冊和發(fā)現(xiàn),雖然是一發(fā)牽動全身的改造,但整個系統(tǒng)架構(gòu)會因此受益,尤其是現(xiàn)代的微服務(wù)架構(gòu)。相信很多系統(tǒng)都具備負載均衡、健康檢查、心跳檢測等能力,利用好服務(wù)發(fā)現(xiàn),那么彈性伸縮、服務(wù)高可用、灰度發(fā)布,自然是水到渠成的事情。

【編輯推薦】

  1. 忽略VDI 微軟失去了Client Hyper-V的目標
  2. Windows 8 Client Hyper-V安裝教程
  3. 淘寶分布式文件系統(tǒng)TFS安裝配置手冊:JAVA Client實戰(zhàn)
  4. 紅帽O(jiān)penShift PaaS平臺支持微軟.NET
  5. Tsuru 0.12.0 RC2發(fā)布,開源PaaS平臺
【責任編輯:武曉燕 TEL:(010)68476606】

相關(guān)熱詞搜索:Consul PaaS平臺 運維

上一篇:有了Jenkins,為什么還需要一個獨立的部署系統(tǒng)
下一篇:中小企業(yè)運維需要重視日志分析

分享到: 收藏