Consul集群配置consul原理

Consul集群配置consul原理

上圖是官網(wǎng)提供的一個(gè)事例系統(tǒng)圖肤无,圖中的Server是consul服務(wù)端高可用集群,Client是consul客戶端。consul客戶端不保存數(shù)據(jù),客戶端將接收到的請求轉(zhuǎn)發(fā)給響應(yīng)的Server端未斑。Server之間通過局域網(wǎng)或廣域網(wǎng)通信實(shí)現(xiàn)數(shù)據(jù)一致性。每個(gè)Server或Client都是一個(gè)consul agent币绩。

Consul集群間使用了GOSSIP協(xié)議通信和raft一致性算法蜡秽。上面這張圖涉及到了很多術(shù)語:3A網(wǎng)絡(luò)科技致力于提供最穩(wěn)定最快速的云服務(wù)器建設(shè)府阀,通過高速的cn2線路顯著提升網(wǎng)絡(luò)速度,搭配企業(yè)級硬件設(shè)備竭誠為客戶提供高效且可靠的服務(wù)器應(yīng)用方案载城,加上十幾年專業(yè)團(tuán)隊(duì)的協(xié)作來保障服務(wù)器的高質(zhì)量以及超高安全性肌似。更多請?jiān)L問http://iis3.com/server/

Agent——agent是一直運(yùn)行在Consul集群中每個(gè)成員上的守護(hù)進(jìn)程。通過運(yùn)行consul agent來啟動诉瓦。agent可以運(yùn)行在client或者server模式川队。指定節(jié)點(diǎn)作為client或者server是非常簡單的,除非有其他agent實(shí)例睬澡。所有的agent都能運(yùn)行DNS或者HTTP接口固额,并負(fù)責(zé)運(yùn)行時(shí)檢查和保持服務(wù)同步。

Client——一個(gè)Client是一個(gè)轉(zhuǎn)發(fā)所有RPC到server的代理煞聪。這個(gè)client是相對無狀態(tài)的斗躏。client唯一執(zhí)行的后臺活動是加入LAN gossip池。這有一個(gè)最低的資源開銷并且僅消耗少量的網(wǎng)絡(luò)帶寬昔脯。

Server——一個(gè)server是一個(gè)有一組擴(kuò)展功能的代理啄糙,這些功能包括參與Raft選舉,維護(hù)集群狀態(tài)云稚,響應(yīng)RPC查詢隧饼,與其他數(shù)據(jù)中心交互WAN gossip和轉(zhuǎn)發(fā)查詢給leader或者遠(yuǎn)程數(shù)據(jù)中心。

DataCenter——雖然數(shù)據(jù)中心的定義是顯而易見的静陈,但是有一些細(xì)微的細(xì)節(jié)必須考慮燕雁。例如,在EC2中鲸拥,多個(gè)可用區(qū)域被認(rèn)為組成一個(gè)數(shù)據(jù)中心拐格。我們定義數(shù)據(jù)中心為一個(gè)私有的,低延遲和高帶寬的一個(gè)網(wǎng)絡(luò)環(huán)境刑赶。這不包括訪問公共網(wǎng)絡(luò)捏浊,但是對于我們而言,同一個(gè)EC2中的多個(gè)可用區(qū)域可以被認(rèn)為是一個(gè)數(shù)據(jù)中心的一部分撞叨。

Consensus——一致性金踪,使用Consensus來表明就leader選舉和事務(wù)的順序達(dá)成一致。為了以容錯(cuò)方式達(dá)成一致谒所,一般有超過半數(shù)一致則可以認(rèn)為整體一致。Consul使用Raft實(shí)現(xiàn)一致性沛申,進(jìn)行l(wèi)eader選舉劣领,在consul中的使用bootstrap時(shí),可以進(jìn)行自選铁材,其他server加入進(jìn)來后bootstrap就可以取消尖淘。

Gossip——Consul建立在Serf的基礎(chǔ)之上奕锌,它提供了一個(gè)用于多播目的的完整的gossip協(xié)議。Serf提供成員關(guān)系村生,故障檢測和事件廣播惊暴。Serf是去中心化的服務(wù)發(fā)現(xiàn)和編制的解決方案,節(jié)點(diǎn)失敗偵測與發(fā)現(xiàn)趁桃,具有容錯(cuò)辽话、輕量、高可用的特點(diǎn)卫病。

LAN Gossip——它包含所有位于同一個(gè)局域網(wǎng)或者數(shù)據(jù)中心的所有節(jié)點(diǎn)油啤。

WAN Gossip——它只包含Server。這些server主要分布在不同的數(shù)據(jù)中心并且通常通過因特網(wǎng)或者廣域網(wǎng)通信蟀苛。

RPC——遠(yuǎn)程過程調(diào)用益咬。這是一個(gè)允許client請求server的請求/響應(yīng)機(jī)制。

在每個(gè)數(shù)據(jù)中心帜平,client和server是混合的幽告。一般建議有3-5臺server。這是基于有故障情況下的可用性和性能之間的權(quán)衡結(jié)果裆甩,因?yàn)樵蕉嗟臋C(jī)器加入達(dá)成共識越慢冗锁。然而,并不限制client的數(shù)量淑掌,它們可以很容易的擴(kuò)展到數(shù)千或者數(shù)萬臺蒿讥。

同一個(gè)數(shù)據(jù)中心的所有節(jié)點(diǎn)都必須加入gossip協(xié)議。這意味著gossip協(xié)議包含一個(gè)給定數(shù)據(jù)中心的所有節(jié)點(diǎn)抛腕。這服務(wù)于幾個(gè)目的:第一芋绸,不需要在client上配置server地址。發(fā)現(xiàn)都是自動完成的担敌。第二摔敛,檢測節(jié)點(diǎn)故障的工作不是放在server上,而是分布式的全封。這是的故障檢測相比心跳機(jī)制有更高的可擴(kuò)展性马昙。第三:它用來作為一個(gè)消息層來通知事件,比如leader選舉發(fā)生時(shí)刹悴。

每個(gè)數(shù)據(jù)中心的server都是Raft節(jié)點(diǎn)集合的一部分行楞。這意味著它們一起工作并選出一個(gè)leader,一個(gè)有額外工作的server土匀。leader負(fù)責(zé)處理所有的查詢和事務(wù)子房。作為一致性協(xié)議的一部分,事務(wù)也必須被復(fù)制到所有其他的節(jié)點(diǎn)。因?yàn)檫@一要求证杭,當(dāng)一個(gè)非leader得server收到一個(gè)RPC請求時(shí)田度,它將請求轉(zhuǎn)發(fā)給集群leader。

server節(jié)點(diǎn)也作為WAN gossip Pool的一部分解愤。這個(gè)Pool不同于LAN Pool镇饺,因?yàn)樗菫榱藘?yōu)化互聯(lián)網(wǎng)更高的延遲,并且它只包含其他Consul server節(jié)點(diǎn)送讲。這個(gè)Pool的目的是為了允許數(shù)據(jù)中心能夠以low-touch的方式發(fā)現(xiàn)彼此奸笤。這使得一個(gè)新的數(shù)據(jù)中心可以很容易的加入現(xiàn)存的WAN gossip。因?yàn)閟erver都運(yùn)行在這個(gè)pool中李茫,它也支持跨數(shù)據(jù)中心請求揭保。當(dāng)一個(gè)server收到來自另一個(gè)數(shù)據(jù)中心的請求時(shí),它隨即轉(zhuǎn)發(fā)給正確數(shù)據(jù)中想一個(gè)server魄宏。該server再轉(zhuǎn)發(fā)給本地leader秸侣。

這使得數(shù)據(jù)中心之間只有一個(gè)很低的耦合,但是由于故障檢測宠互,連接緩存和復(fù)用味榛,跨數(shù)據(jù)中心的請求都是相對快速和可靠的。3A網(wǎng)絡(luò)科技致力于提供最穩(wěn)定最快速的云服務(wù)器建設(shè)予跌,通過高速的cn2線路顯著提升網(wǎng)絡(luò)速度搏色,搭配企業(yè)級硬件設(shè)備竭誠為客戶提供高效且可靠的服務(wù)器應(yīng)用方案,加上十幾年專業(yè)團(tuán)隊(duì)的協(xié)作來保障服務(wù)器的高質(zhì)量以及超高安全性券册。更多請?jiān)L問http://iis3.com/server/

consul環(huán)境準(zhǔn)備

IP節(jié)點(diǎn)名稱Consul角色

consul下載和目錄創(chuàng)建

https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip

unzip consul_1.4.3_linux_amd64.zip

mv consul /usr/local/bin/

mkdir -p /data/consul/{data,config} #創(chuàng)建數(shù)據(jù)目錄和配置目錄

consul acl

對數(shù)據(jù)中心的每個(gè)server频轿,添加/data/consul/config/acl_config.json配置:

參考:《consul ACL配置使用

consul agent參數(shù)

consul agent --help

-advertise:通知展現(xiàn)地址用來改變我們給集群中的其他節(jié)點(diǎn)展現(xiàn)的地址,一般情況下-bind地址就是展現(xiàn)地址

-bootstrap:用來控制一個(gè)server是否在bootstrap模式烁焙,在一個(gè)datacenter中只能有一個(gè)server處于bootstrap模式航邢,當(dāng)一個(gè)server處于bootstrap模式時(shí),可以自己選舉為raft leader骄蝇。

-bootstrap-expect:在一個(gè)datacenter中期望提供的server節(jié)點(diǎn)數(shù)目膳殷,當(dāng)該值提供的時(shí)候,consul一直等到達(dá)到指定sever數(shù)目的時(shí)候才會引導(dǎo)整個(gè)集群九火,該標(biāo)記不能和bootstrap公用赚窃。

-bind:該地址用來在集群內(nèi)部的通訊,集群內(nèi)的所有節(jié)點(diǎn)到地址都必須是可達(dá)的岔激,默認(rèn)是0.0.0.0勒极。

-client:consul綁定在哪個(gè)client地址上,這個(gè)地址提供HTTP虑鼎、DNS辱匿、RPC等服務(wù),默認(rèn)是127.0.0.1。

-config-file:明確的指定要加載哪個(gè)配置文件掀鹅。

-config-dir:配置文件目錄,里面所有以.json結(jié)尾的文件都會被加載

-data-dir:提供一個(gè)目錄用來存放agent的狀態(tài)媒楼,所有的agent都需要該目錄乐尊,該目錄必須是穩(wěn)定的,系統(tǒng)重啟后都繼續(xù)存在划址。

-dc:該標(biāo)記控制agent的datacenter的名稱扔嵌,默認(rèn)是dc1。

-encrypt:指定secret key夺颤,使consul在通訊時(shí)進(jìn)行加密痢缎,key可以通過consul keygen生成,同一個(gè)集群中的節(jié)點(diǎn)必須使用相同的key世澜。

-join:加入一個(gè)已經(jīng)啟動的agent的ip地址独旷,可以多次指定多個(gè)agent的地址词爬。如果consul不能加入任何指定的地址中泡嘴,則agent會啟動失敗盒延。默認(rèn)agent啟動時(shí)不會加入任何節(jié)點(diǎn)禽捆。

-retry-join:和join類似恕洲,但是允許你在第一次失敗后進(jìn)行嘗試西采。

-retry-interval:兩次join之間的時(shí)間間隔举塔,默認(rèn)是30s罩锐。

-retry-max:嘗試重復(fù)join的次數(shù)诺舔,默認(rèn)是0鳖昌,也就是無限次嘗試。

-log-level:consul agent啟動后顯示的日志信息級別低飒。默認(rèn)是info许昨,可選:trace、debug逸嘀、info车要、warn、err崭倘。

-node:節(jié)點(diǎn)在集群中的名稱翼岁,在一個(gè)集群中必須是唯一的,默認(rèn)是該節(jié)點(diǎn)的主機(jī)名司光。

-protocol:consul使用的協(xié)議版本琅坡。

-rejoin:使consul忽略先前的離開,在agent再次啟動后仍舊嘗試加入集群中残家。也就是說如果不加入這個(gè)參數(shù)榆俺,當(dāng)前節(jié)點(diǎn)一旦退出,下次重啟后是不會自動加入到集群中去的,除非是手動觸發(fā) consul join xxxx 茴晋,所以為了降低重啟后對本身服務(wù)的影響陪捷,這里統(tǒng)一使用 -rejoin參數(shù)。

-server:定義agent運(yùn)行在server模式诺擅,每個(gè)集群至少有一個(gè)server市袖,建議每個(gè)集群的server不要超過5個(gè)。

-syslog:開啟系統(tǒng)日志功能烁涌,只在linux/osx上生效苍碟。

-ui:啟用內(nèi)置Web UI服務(wù)

-ui-dir:提供存放web ui資源的路徑,該目錄必須是可讀的撮执。

-pid-file:提供一個(gè)路徑來存放pid文件微峰,可以使用該文件進(jìn)行SIGINT/SIGHUP(關(guān)閉/更新)agent。

consul配置文件

本文不適用acl規(guī)則

10.200.119.171:/etc/sysconfig/consul

CMD_OPTS="agent -server -data-dir=/data/consul/data -node=s1 -config-dir=/data/consul/config -bind=10.200.119.171 -rejoin -client=0.0.0.0 -bootstrap"

10.200.119.172:/etc/sysconfig/consul

CMD_OPTS="agent -server -data-dir=/data/consul/data -node=s2 -config-dir=/data/consul/config -bind=10.200.119.172 -rejoin -client=0.0.0.0"

10.200.119.173:/etc/sysconfig/consul

CMD_OPTS="agent -server -data-dir=/data/consul/data -node=s3 -config-dir=/data/consul/config -bind=10.200.119.173 -rejoin -client=0.0.0.0"

10.200.119.60:/etc/sysconfig/consul

CMD_OPTS="agent -ui -data-dir=/data/consul/data -node=c1 -config-dir=/data/consul/config -bind=10.200.119.60 -rejoin -client=0.0.0.0"

consul systemd自啟動

cat?>?/lib/systemd/system/consul.service?<<EOF

[Unit]

Description=Consul is a tool for service discovery and configuration. Consul is distributed, highly available, and extremely scalable.

Documentation=http://www.consul.io

After=network-online.target

Wants=network-online.target

[Service]

LimitCORE=infinity

LimitNOFILE=100000

LimitNPROC=100000

EnvironmentFile=-/etc/sysconfig/consul

ExecStart=/usr/local/bin/consul \$CMD_OPTS

ExecReload=/bin/kill -HUP \$MAINPID

KillSignal=SIGINT

[Install]

WantedBy=multi-user.target

EOF

systemctl enable consul

consul節(jié)點(diǎn)加入集群

4個(gè)節(jié)點(diǎn)分別啟動consul

systemctl start consul

在s2抒钱、s3蜓肆、c1加入s1集群,如下:

consul join 10.200.119.171

consul查看狀態(tài)

[root@10-200-119-60 ~]# consul members

Node Address Status Type Build Protocol DC Segment

s1 10.200.119.171:8301 alive server 1.4.3 2 dc1?<all>

s2 10.200.119.172:8301 alive server 1.4.3 2 dc1?<all>

s3 10.200.119.173:8301 alive server 1.4.3 2 dc1?<all>

c1 10.200.119.60:8301 alive client 1.4.3 2 dc1?<default>

consul UI

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谋币,一起剝皮案震驚了整個(gè)濱河市症杏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑞信,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逼友,死亡現(xiàn)場離奇詭異,居然都是意外死亡帜乞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門筐眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匀谣,你說我怎么就攤上這事∥漪幔” “怎么了烈炭?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宝恶。 經(jīng)常有香客問我趴捅,道長,這世上最難降的妖魔是什么拱绑? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任丽蝎,我火速辦了婚禮,結(jié)果婚禮上征峦,老公的妹妹穿的比我還像新娘消请。我一直安慰自己栏笆,他們只是感情好臊泰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针饥,像睡著了一般需频。 火紅的嫁衣襯著肌膚如雪丁眼。 梳的紋絲不亂的頭發(fā)上昭殉,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機(jī)與錄音蹂风,去河邊找鬼乾蓬。 笑死惠啄,一個(gè)胖子當(dāng)著我的面吹牛任内,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播死嗦,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼越走!你這毒婦竟也來了靠欢?” 一聲冷哼從身側(cè)響起铜跑,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锅纺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囤锉,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年酿傍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驱入。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莺褒,死狀恐怖雪情,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巡通,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布扁达,位于F島的核電站,受9級特大地震影響炉旷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窘行,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一图仓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧救崔,春花似錦捏顺、人聲如沸纬黎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冠息,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躏碳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留选脊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓偏灿,卻偏偏與公主長得像钝的,于是被迫代替她去往敵國和親翁垂。 傳聞我的和親對象是個(gè)殘疾皇子硝桩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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