consul

[轉(zhuǎn)]

1. 什么是consul?

是一個(gè)服務(wù)管理軟件汽馋。
支持多數(shù)據(jù)中心下侮东,分布式高可用的圈盔,服務(wù)發(fā)現(xiàn)和配置共享。
consul支持健康檢查悄雅,允許存儲(chǔ)鍵值對(duì)驱敲。
一致性協(xié)議采用 Raft 算法,用來保證服務(wù)的高可用.
成員管理和消息廣播 采用GOSSIP協(xié)議,支持ACL訪問控制宽闲。

ACL技術(shù)在路由器中被廣泛采用众眨,它是一種基于包過濾的流控制技術(shù)∪菸埽控制列表通過把源地址娩梨、目的地址及端口號(hào)作為數(shù)據(jù)包檢查的基本元素,并可以規(guī)定符合條件的數(shù)據(jù)包是否允許通過览徒。

gossip就是p2p協(xié)議狈定。他主要要做的事情是,去中心化习蓬。
這個(gè)協(xié)議就是模擬人類中傳播謠言的行為而來纽什。首先要傳播謠言就要有種子節(jié)點(diǎn)。種子節(jié)點(diǎn)每秒都會(huì)隨機(jī)向其他節(jié)點(diǎn)發(fā)送自己所擁有的節(jié)點(diǎn)列表躲叼,以及需要傳播的消息芦缰。任何新加入的節(jié)點(diǎn),就在這種傳播方式下很快地被全網(wǎng)所知道枫慷。

什么是服務(wù)注冊(cè)让蕾?

一個(gè)服務(wù)將其位置信息在“中心注冊(cè)節(jié)點(diǎn)”注冊(cè)的過程。該服務(wù)一般會(huì)將它的主機(jī)IP地址以及端口號(hào)進(jìn)行注冊(cè)或听,有時(shí)也會(huì)有服務(wù)訪問的認(rèn)證信息探孝,使用協(xié)議,版本號(hào)神帅,以及關(guān)于環(huán)境的一些細(xì)節(jié)信息。
什么是服務(wù)發(fā)現(xiàn)萌抵?
服務(wù)發(fā)現(xiàn)可以讓一個(gè)應(yīng)用或者組件發(fā)現(xiàn)其運(yùn)行環(huán)境以及其它應(yīng)用或組件的信息找御。用戶配置一個(gè)服務(wù)發(fā)現(xiàn)工具就可以將實(shí)際容器跟運(yùn)行配置分離開。常見配置信息包括:ip绍填、端口號(hào)霎桅、名稱等。當(dāng)一項(xiàng)服務(wù)存在于多個(gè)主機(jī)節(jié)點(diǎn)上時(shí)讨永,client端如何決策獲取相應(yīng)正確的IP和port滔驶。
在傳統(tǒng)情況下,當(dāng)出現(xiàn)服務(wù)存在于多個(gè)主機(jī)節(jié)點(diǎn)上時(shí)卿闹,都會(huì)使用靜態(tài)配置的方法來實(shí)現(xiàn)服務(wù)信息的注冊(cè)揭糕。
而當(dāng)在一個(gè)復(fù)雜的系統(tǒng)里萝快,需要較強(qiáng)的可擴(kuò)展性時(shí),服務(wù)被頻繁替換時(shí)著角,為避免服務(wù)中斷揪漩,動(dòng)態(tài)的服務(wù)注冊(cè)和發(fā)現(xiàn)就很重要。

相關(guān)開源項(xiàng)目:Zookeeper吏口,Doozer奄容,Etcd,強(qiáng)一致性的項(xiàng)目产徊,這些項(xiàng)目主要用于服務(wù)間的協(xié)調(diào)昂勒,同時(shí)又可用于服務(wù)的注冊(cè)。

什么是強(qiáng)一致性協(xié)議舟铜?

按照某一順序串行執(zhí)行存儲(chǔ)對(duì)象讀寫操作戈盈, 更新存儲(chǔ)對(duì)象之后, 后續(xù)訪問總是讀到最新值深滚。 假如進(jìn)程A先更新了存儲(chǔ)對(duì)象奕谭,存儲(chǔ)系統(tǒng)保證后續(xù)A,B,C進(jìn)程的讀取操作都將返回最新值。強(qiáng)一致性模型有幾種常見實(shí)現(xiàn)方法痴荐, 主從同步復(fù)制血柳, 以及quorum復(fù)制等。

http://blog.csdn.net/shlazww/article/details/38736511

  1. consul的具體應(yīng)用場(chǎng)景

  2. docker生兆、coreos 實(shí)例的注冊(cè)與配置共享

  3. vitess集群

  4. SaaS應(yīng)用的配置共享
    4.與confd服務(wù)集成难捌,動(dòng)態(tài)生成nignx與haproxy配置文件

  5. 優(yōu)勢(shì)

  6. 使用 Raft 算法來保證一致性,比poxes算法更直接鸦难。zookeeper采用的時(shí)poxes算法根吁。
    Raft大概將整個(gè)過程分為三個(gè)階段,leader election合蔽,log replication和commit(safety)击敌。
    每個(gè)server處于三個(gè)狀態(tài):leader,follower拴事,candidate沃斤。正常情況下,所有server中只有一個(gè)是leader刃宵,其它的都是follower衡瓶。server之間通過RPC消息通信。follower不會(huì)主動(dòng)發(fā)起RPC消息牲证。leader和candidate(選主的時(shí)候)會(huì)主動(dòng)發(fā)起RPC消息哮针。
    首先選擇一個(gè)leader全權(quán)負(fù)責(zé)管理日志復(fù)制,leader從客戶端接收log entries,將它們復(fù)制給集群中的其它機(jī)器十厢,然后負(fù)責(zé)告訴其它機(jī)器什么時(shí)候?qū)⑷罩緫?yīng)用于它們的狀態(tài)機(jī)等太。舉個(gè)例子,leader可以在無需詢問其它server的情況下決定把新entries放在哪個(gè)位置寿烟,數(shù)據(jù)永遠(yuǎn)是從leader流向其它機(jī)器澈驼。一個(gè)leader可以fail或者與其他機(jī)器失去連接,這種情形下會(huì)有新的leader被選舉出來筛武。
    http://www.jdon.com/artichect/raft.html
    http://blog.csdn.net/cszhouwei/article/details/38374603

  7. 支持多數(shù)據(jù)中心缝其,內(nèi)外網(wǎng)的服務(wù)采用不同的端口進(jìn)行監(jiān)聽。這樣可以避免單點(diǎn)故障徘六。
    zookeeper等不支持多數(shù)據(jù)中心功能的支持

  8. 支持健康檢查

  9. 提供web界面

  10. 支持http協(xié)議與dns協(xié)議接口

  11. 安裝
    我的是mac os x
    通過工具安裝:
    brew cask install consul

brew cask安裝也很方便
http://brew.sh/#install

  1. 測(cè)試 與 運(yùn)行consul
    測(cè)試
    consul
    以服務(wù)端形式運(yùn)行consul
    consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul
    consul members
    查看consul服務(wù)節(jié)點(diǎn)

將http請(qǐng)求發(fā)給consul server
$ curl localhost:8500/v1/catalog/nodes[{"Node":"Armons-MacBook-Air","Address":"10.1.10.38"}]

  1. 注冊(cè)服務(wù)
  2. 創(chuàng)建文件夾/etc/consul.d

.d代表有許多配置文件在里面

  1. 將服務(wù)配置文件寫入文件夾內(nèi)
    如 $ echo ‘{"service": {"name": "web", "tags": ["rails"], "port": 80}}‘ >/etc/consul.d/web.json
  2. 重啟consul内边,并將配置文件的路徑給consul
    $ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -config-dir /etc/consul.d
  3. 查詢ip和端口
    DNS方式:dig @127.0.0.1 -p 8600 web.service.consul SRV
    Http方式:curl http://localhost:8500/v1/catalog/service/web
  4. 更新
    通過http api能對(duì)service配置文件增刪改查,如果更新完成后待锈,可以通過signup命令來生效
  5. 組建集群
    一個(gè)consul agent就是一個(gè)獨(dú)立的程序漠其。一個(gè)長(zhǎng)時(shí)間運(yùn)行的守護(hù)進(jìn)程,運(yùn)行在concul集群中的每個(gè)節(jié)點(diǎn)上竿音。
    啟動(dòng)一個(gè)consul agent 和屎,只是啟動(dòng)一個(gè)孤立的node,如果想知道集群中的其他節(jié)點(diǎn)春瞬,應(yīng)該將consul agent加入到集群中去 cluster柴信。
    agent有兩種模式:server與client。server模式包含了一致性的工作:保證一致性和可用性(在部分失敗的情況下)宽气,響應(yīng)RPC随常,同步數(shù)據(jù)到其他節(jié)點(diǎn)代理。
    client 模式用于與server進(jìn)行通信萄涯,轉(zhuǎn)發(fā)RPC到服務(wù)的代理agent绪氛,它僅保存自身的少量一些狀態(tài),是非常輕量化的東西涝影。本身是相對(duì)無狀態(tài)的枣察。
    agent除去設(shè)置server/client模式、數(shù)據(jù)路徑之外燃逻,還最好設(shè)置node的名稱和ip序目。
    一張經(jīng)典的consul架構(gòu)圖片:


    技術(shù)分享

    LAN gossip pool包含了同一局域網(wǎng)內(nèi)所有節(jié)點(diǎn),包括server與client唆樊。這基本上是位于同一個(gè)數(shù)據(jù)中心DC宛琅。
    WAN gossip pool一般僅包含server刻蟹,將跨越多個(gè)DC數(shù)據(jù)中心逗旁,通過互聯(lián)網(wǎng)或廣域網(wǎng)進(jìn)行通信。
    Leader服務(wù)器負(fù)責(zé)所有的RPC請(qǐng)求,查詢并相應(yīng)片效。所以其他服務(wù)器收到client的RPC請(qǐng)求時(shí)红伦,會(huì)轉(zhuǎn)發(fā)到leader服務(wù)器。

第一淀衣,沒有必要配置客戶端與服務(wù)器的地址; 發(fā)現(xiàn)是自動(dòng)完成的昙读。 第二,檢測(cè)節(jié)點(diǎn)故障的工作不放置在服務(wù)器上膨桥,但被分布蛮浑。 這使得故障檢測(cè)比天真的心跳方案更具擴(kuò)展性。 第三只嚣,它是作為一個(gè)消息層通知時(shí)沮稚,重要事件,如leader選舉舉行册舞。
安裝vagrant蕴掏, sudo vagrant init 初始化vagrant環(huán)境。
vagrant up 啟動(dòng)一個(gè)虛擬node節(jié)點(diǎn)
vagrant status 查看vm啟動(dòng)的狀態(tài)调鲸,包括vm的名稱
vagrant ssh vm_name 登陸到vm節(jié)點(diǎn)

bootstrap的模式盛杰,該模式node可以指定自己作為leader,而不用進(jìn)行選舉藐石。然后再依次啟動(dòng)其他server即供,配置為非bootstrap的模式。最后把第一個(gè)serverbootstrap模式停止贯钩,重新以非bootstrap模式啟動(dòng)募狂,這樣server之間就可以自動(dòng)選舉leader。
分別在兩個(gè)vm上配置consul agent角雷,如

$ vagrant ssh n1

vagrant@n1:~$ consul agent -server -bootstrap-expect 1 \ -data-dir /tmp/consul -node=agent-one -bind=172.20.20.10

$ vagrant ssh n2
vagrant@n2:~$ consul agent -data-dir /tmp/consul -node=agent-two \ -bind=172.20.20.11這個(gè)時(shí)候祸穷,應(yīng)用consul members 進(jìn)行查詢,兩個(gè)consul node分別是獨(dú)立勺三,沒有什么關(guān)聯(lián)雷滚。

將client加入到server 集群中
vagrant@n1:~$ consul join 172.20.20.11
再用consul members查詢,就發(fā)現(xiàn)多了一個(gè)node節(jié)點(diǎn)吗坚。

這樣手動(dòng)
加入新節(jié)點(diǎn)太麻煩祈远,而較好的方法就將節(jié)點(diǎn)配置成自動(dòng)加入集群

consul agent -atlas-join \ -atlas=ATLAS_USERNAME/infrastructure \ -atlas-token="YOUR_ATLAS_TOKEN"

離開集群
ctrl+c,或者 kill 指定的agent進(jìn)程商源,就可以將相關(guān)的agent推出集群

讓consul 運(yùn)行起來车份。consul server推薦至少在3~5個(gè)之間,推薦的方法是一開始啟動(dòng)其中一臺(tái)server牡彻,并且配置到bootstrap的模式扫沼,該模式node可以指定自己作為leader出爹,而不用進(jìn)行選舉。然后再依次啟動(dòng)其他server缎除,配置為非bootstrap的模式严就。最后把第一個(gè)serverbootstrap模式停止,重新以非bootstrap模式啟動(dòng)器罐,這樣server之間就可以自動(dòng)選舉leader梢为。

http://www.bubuko.com/infodetail-800623.html

  1. 查詢健康狀態(tài)

curl http://localhost:8500/v1/health/state/critical // 應(yīng)用http接口查詢失敗的節(jié)點(diǎn)對(duì)于失敗的節(jié)點(diǎn),應(yīng)用DNS查詢時(shí)轰坊,是無法拿到返回結(jié)果的
dig @127.0.0.1 -p 8600 web.service.consul

  1. K/V存儲(chǔ)
    consul還提供了鍵/值存儲(chǔ)的功能铸董。
    如 查詢 所有K/V
    curl -v http://localhost:8500/v1/kv/?recurse

保存鍵為web/key2, flags 為42, 值為true的記錄肴沫。
curl -X PUT -d ‘test‘ http://localhost:8500/v1/kv/web/key2?flags=42true

刪除記錄:
curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse

更新值:
curl -X PUT -d ‘newval‘ http://localhost:8500/v1/kv/web/key1?cas=97true

更新index:
curl "http://localhost:8500/v1/kv/web/key2?index=101&wait=5s"
結(jié)果:[{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]

更詳細(xì)的consul命令詳解:

http://m.oschina.net/blog/353392

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袒炉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子樊零,更是在濱河造成了極大的恐慌我磁,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻襟,死亡現(xiàn)場(chǎng)離奇詭異夺艰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沉衣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門郁副,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豌习,你說我怎么就攤上這事存谎。” “怎么了肥隆?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵既荚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我栋艳,道長(zhǎng)恰聘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任吸占,我火速辦了婚禮晴叨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矾屯。我一直安慰自己兼蕊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布件蚕。 她就那樣靜靜地躺著孙技,像睡著了一般惧所。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绪杏,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音纽绍,去河邊找鬼蕾久。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拌夏,可吹牛的內(nèi)容都是我干的僧著。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼障簿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼盹愚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起站故,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤皆怕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后西篓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愈腾,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年岂津,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虱黄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吮成,死狀恐怖橱乱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粱甫,我是刑警寧澤泳叠,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站茶宵,受9級(jí)特大地震影響析二,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜节预,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一叶摄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧安拟,春花似錦蛤吓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锅棕。三九已至,卻和暖如春淌山,著一層夾襖步出監(jiān)牢的瞬間裸燎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工泼疑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留德绿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓退渗,卻偏偏與公主長(zhǎng)得像移稳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子会油,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容