consul

[轉]

1. 什么是consul?

是一個服務管理軟件。
支持多數據中心下,分布式高可用的,服務發現和配置共享。
consul支持健康檢查,允許存儲鍵值對。
一致性協議采用 Raft 算法,用來保證服務的高可用.
成員管理和消息廣播 采用GOSSIP協議,支持ACL訪問控制。

ACL技術在路由器中被廣泛采用,它是一種基于包過濾的流控制技術。控制列表通過把源地址、目的地址及端口號作為數據包檢查的基本元素,并可以規定符合條件的數據包是否允許通過。

gossip就是p2p協議。他主要要做的事情是,去中心化。
這個協議就是模擬人類中傳播謠言的行為而來。首先要傳播謠言就要有種子節點。種子節點每秒都會隨機向其他節點發送自己所擁有的節點列表,以及需要傳播的消息。任何新加入的節點,就在這種傳播方式下很快地被全網所知道。

什么是服務注冊?

一個服務將其位置信息在“中心注冊節點”注冊的過程。該服務一般會將它的主機IP地址以及端口號進行注冊,有時也會有服務訪問的認證信息,使用協議,版本號,以及關于環境的一些細節信息。
什么是服務發現?
服務發現可以讓一個應用或者組件發現其運行環境以及其它應用或組件的信息。用戶配置一個服務發現工具就可以將實際容器跟運行配置分離開。常見配置信息包括:ip、端口號、名稱等。當一項服務存在于多個主機節點上時,client端如何決策獲取相應正確的IP和port。
在傳統情況下,當出現服務存在于多個主機節點上時,都會使用靜態配置的方法來實現服務信息的注冊。
而當在一個復雜的系統里,需要較強的可擴展性時,服務被頻繁替換時,為避免服務中斷,動態的服務注冊和發現就很重要。

相關開源項目:Zookeeper,Doozer,Etcd,強一致性的項目,這些項目主要用于服務間的協調,同時又可用于服務的注冊。

什么是強一致性協議?

按照某一順序串行執行存儲對象讀寫操作, 更新存儲對象之后, 后續訪問總是讀到最新值。 假如進程A先更新了存儲對象,存儲系統保證后續A,B,C進程的讀取操作都將返回最新值。強一致性模型有幾種常見實現方法, 主從同步復制, 以及quorum復制等。

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

  1. consul的具體應用場景

  2. docker、coreos 實例的注冊與配置共享

  3. vitess集群

  4. SaaS應用的配置共享
    4.與confd服務集成,動態生成nignx與haproxy配置文件

  5. 優勢

  6. 使用 Raft 算法來保證一致性,比poxes算法更直接。zookeeper采用的時poxes算法。
    Raft大概將整個過程分為三個階段,leader election,log replication和commit(safety)。
    每個server處于三個狀態:leader,follower,candidate。正常情況下,所有server中只有一個是leader,其它的都是follower。server之間通過RPC消息通信。follower不會主動發起RPC消息。leader和candidate(選主的時候)會主動發起RPC消息。
    首先選擇一個leader全權負責管理日志復制,leader從客戶端接收log entries,將它們復制給集群中的其它機器,然后負責告訴其它機器什么時候將日志應用于它們的狀態機。舉個例子,leader可以在無需詢問其它server的情況下決定把新entries放在哪個位置,數據永遠是從leader流向其它機器。一個leader可以fail或者與其他機器失去連接,這種情形下會有新的leader被選舉出來。
    http://www.jdon.com/artichect/raft.html
    http://blog.csdn.net/cszhouwei/article/details/38374603

  7. 支持多數據中心,內外網的服務采用不同的端口進行監聽。這樣可以避免單點故障。
    zookeeper等不支持多數據中心功能的支持

  8. 支持健康檢查

  9. 提供web界面

  10. 支持http協議與dns協議接口

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

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

  1. 測試 與 運行consul
    測試
    consul
    以服務端形式運行consul
    consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul
    consul members
    查看consul服務節點

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

  1. 注冊服務
  2. 創建文件夾/etc/consul.d

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

  1. 將服務配置文件寫入文件夾內
    如 $ 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能對service配置文件增刪改查,如果更新完成后,可以通過signup命令來生效
  5. 組建集群
    一個consul agent就是一個獨立的程序。一個長時間運行的守護進程,運行在concul集群中的每個節點上。
    啟動一個consul agent ,只是啟動一個孤立的node,如果想知道集群中的其他節點,應該將consul agent加入到集群中去 cluster。
    agent有兩種模式:server與client。server模式包含了一致性的工作:保證一致性和可用性(在部分失敗的情況下),響應RPC,同步數據到其他節點代理。
    client 模式用于與server進行通信,轉發RPC到服務的代理agent,它僅保存自身的少量一些狀態,是非常輕量化的東西。本身是相對無狀態的。
    agent除去設置server/client模式、數據路徑之外,還最好設置node的名稱和ip。
    一張經典的consul架構圖片:


    技術分享

    LAN gossip pool包含了同一局域網內所有節點,包括server與client。這基本上是位于同一個數據中心DC。
    WAN gossip pool一般僅包含server,將跨越多個DC數據中心,通過互聯網或廣域網進行通信。
    Leader服務器負責所有的RPC請求,查詢并相應。所以其他服務器收到client的RPC請求時,會轉發到leader服務器。

第一,沒有必要配置客戶端與服務器的地址; 發現是自動完成的。 第二,檢測節點故障的工作不放置在服務器上,但被分布。 這使得故障檢測比天真的心跳方案更具擴展性。 第三,它是作為一個消息層通知時,重要事件,如leader選舉舉行。
安裝vagrant, sudo vagrant init 初始化vagrant環境。
vagrant up 啟動一個虛擬node節點
vagrant status 查看vm啟動的狀態,包括vm的名稱
vagrant ssh vm_name 登陸到vm節點

bootstrap的模式,該模式node可以指定自己作為leader,而不用進行選舉。然后再依次啟動其他server,配置為非bootstrap的模式。最后把第一個serverbootstrap模式停止,重新以非bootstrap模式啟動,這樣server之間就可以自動選舉leader。
分別在兩個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這個時候,應用consul members 進行查詢,兩個consul node分別是獨立,沒有什么關聯。

將client加入到server 集群中
vagrant@n1:~$ consul join 172.20.20.11
再用consul members查詢,就發現多了一個node節點。

這樣手動
加入新節點太麻煩,而較好的方法就將節點配置成自動加入集群

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

離開集群
ctrl+c,或者 kill 指定的agent進程,就可以將相關的agent推出集群

讓consul 運行起來。consul server推薦至少在3~5個之間,推薦的方法是一開始啟動其中一臺server,并且配置到bootstrap的模式,該模式node可以指定自己作為leader,而不用進行選舉。然后再依次啟動其他server,配置為非bootstrap的模式。最后把第一個serverbootstrap模式停止,重新以非bootstrap模式啟動,這樣server之間就可以自動選舉leader。

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

  1. 查詢健康狀態

curl http://localhost:8500/v1/health/state/critical // 應用http接口查詢失敗的節點對于失敗的節點,應用DNS查詢時,是無法拿到返回結果的
dig @127.0.0.1 -p 8600 web.service.consul

  1. K/V存儲
    consul還提供了鍵/值存儲的功能。
    如 查詢 所有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"
結果:[{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]

更詳細的consul命令詳解:

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容