自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何用Consul打造彈性可擴(kuò)展的PaaS平臺(tái)

運(yùn)維 系統(tǒng)運(yùn)維 系統(tǒng) PaaS
Consul的運(yùn)維成本低,部署簡(jiǎn)單、使用方便、五臟俱全,這對(duì)于中小型團(tuán)隊(duì)?wèi)?yīng)該是性價(jià)比很高的。本文介紹具體的Consul應(yīng)用過(guò)程和相應(yīng)的步驟,供大家參考!

   作者介紹

[[162541]]
 

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

  應(yīng)用背景

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

 

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

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

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

  ◆ 盡管后來(lái)我們對(duì)上面兩種場(chǎng)景的運(yùn)維做了改進(jìn),編寫(xiě)腳本把過(guò)程改良為半自動(dòng)半手動(dòng)的方式,但還不是很方便,而結(jié)合服務(wù)注冊(cè)就可以做到全自動(dòng)。

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

  ◆ 沒(méi)有服務(wù)注冊(cè),限制了Docker的發(fā)揮,只能當(dāng)輕量級(jí)虛擬機(jī)來(lái)用。

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

  為什么選擇 Consul

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

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

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

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

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

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

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

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

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

  部署

 

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

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

  下面一起來(lái)看看,如何啟動(dòng)一個(gè)Consul集群(3臺(tái)Server、1臺(tái)Client)。

  實(shí)驗(yàn)環(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,并啟動(dòng)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 

  新開(kāi)窗口登錄Server03,加入Server01、Server02的集群。

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

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

  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 

  就這樣三個(gè)Server節(jié)點(diǎn)部署完畢。接下來(lái),部署Client節(jié)點(diǎn),和Server節(jié)點(diǎn)一樣,有初次啟動(dòng)、手工加入和重新加入集群三步。

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

  還是在Client01上,新開(kāi)一個(gè)登錄窗口,加入Server01的集群。

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

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

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

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

  應(yīng)用 

 

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

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

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

  運(yùn)行Consul Template是實(shí)現(xiàn)彈性擴(kuò)展的關(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的虛擬主機(jī)配置文件,test.ctmpl是該配置文件對(duì)應(yīng)的模板。下面是模板在負(fù)載均衡上的代碼片段:

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

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

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

  為項(xiàng)目添加一個(gè)配置文件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.     } 

  最后一步,對(duì)服務(wù)進(jìn)行注冊(cè),需要在Consul agent啟動(dòng)時(shí)指定配置文件,如下:

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

  管理

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

  二是集群管理,Consul提供了可視化管理界面??梢圆榭此械姆?wù)和節(jié)點(diǎn),以及它們的健康檢測(cè)和當(dāng)前狀態(tài)。

 

  升級(jí)

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

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

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

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

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

  結(jié)語(yǔ)

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

責(zé)任編輯:武曉燕 來(lái)源: 高效運(yùn)維
相關(guān)推薦

2012-11-14 15:25:58

2023-04-18 08:21:23

KafkaApache預(yù)訂應(yīng)用

2015-11-03 16:43:01

容器編排容器環(huán)境可擴(kuò)展

2023-07-26 16:20:36

云原生云計(jì)算

2024-03-12 12:22:16

2024-04-02 11:26:42

架構(gòu)軟件開(kāi)發(fā)

2023-09-25 12:13:00

Android架構(gòu)

2012-04-12 12:49:22

思科FlexPod架構(gòu)NetApp

2015-04-14 09:31:10

AWSAWS PaaSSaaS可視化編排

2021-12-31 18:19:18

平臺(tái)即服務(wù)PaaS云計(jì)算服務(wù)平臺(tái)

2021-09-02 09:42:11

測(cè)試軟件可擴(kuò)展性開(kāi)發(fā)

2013-04-19 15:38:26

云計(jì)算中間件Paas

2018-01-31 07:09:57

數(shù)據(jù)中心虛擬化可擴(kuò)展性

2009-06-10 16:56:12

可擴(kuò)展GlassFisJavaEE6

2020-11-19 18:08:45

VMware

2025-03-12 10:29:16

2015-02-06 09:17:18

PaaS安全控制測(cè)試ISSO

2022-09-05 15:17:34

區(qū)塊鏈比特幣可擴(kuò)展性

2022-07-07 14:10:59

PaaS亞馬遜云科技云原生
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)