Consul集群配置consul原理

Consul集群配置consul原理

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

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

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

Client——一個(gè)Client是一個(gè)轉(zhuǎn)發(fā)所有RPC到server的代理。這個(gè)client是相對(duì)無(wú)狀態(tài)的。client唯一執(zhí)行的后臺(tái)活動(dòng)是加入LAN gossip池。這有一個(gè)最低的資源開(kāi)銷并且僅消耗少量的網(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ù)中心的定義是顯而易見(jiàn)的,但是有一些細(xì)微的細(xì)節(jié)必須考慮。例如,在EC2中,多個(gè)可用區(qū)域被認(rèn)為組成一個(gè)數(shù)據(jù)中心。我們定義數(shù)據(jù)中心為一個(gè)私有的,低延遲和高帶寬的一個(gè)網(wǎng)絡(luò)環(huán)境。這不包括訪問(wèn)公共網(wǎng)絡(luò),但是對(duì)于我們而言,同一個(gè)EC2中的多個(gè)可用區(qū)域可以被認(rèn)為是一個(gè)數(shù)據(jù)中心的一部分。

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

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

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

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

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

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

同一個(gè)數(shù)據(jù)中心的所有節(jié)點(diǎn)都必須加入gossip協(xié)議。這意味著gossip協(xié)議包含一個(gè)給定數(shù)據(jù)中心的所有節(jié)點(diǎn)。這服務(wù)于幾個(gè)目的:第一,不需要在client上配置server地址。發(fā)現(xiàn)都是自動(dòng)完成的。第二,檢測(cè)節(jié)點(diǎn)故障的工作不是放在server上,而是分布式的。這是的故障檢測(cè)相比心跳機(jī)制有更高的可擴(kuò)展性。第三:它用來(lái)作為一個(gè)消息層來(lái)通知事件,比如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請(qǐng)求時(shí),它將請(qǐng)求轉(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ù)中心請(qǐng)求。當(dāng)一個(gè)server收到來(lái)自另一個(gè)數(shù)據(jù)中心的請(qǐng)求時(shí),它隨即轉(zhuǎn)發(fā)給正確數(shù)據(jù)中想一個(gè)server。該server再轉(zhuǎn)發(fā)給本地leader。

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

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

參考:《consul ACL配置使用

consul agent參數(shù)

consul agent --help

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

-bootstrap:用來(lái)控制一個(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í)候才會(huì)引導(dǎo)整個(gè)集群,該標(biāo)記不能和bootstrap公用。

-bind:該地址用來(lái)在集群內(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é)尾的文件都會(huì)被加載

-data-dir:提供一個(gè)目錄用來(lái)存放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可以通過(guò)consul keygen生成,同一個(gè)集群中的節(jié)點(diǎn)必須使用相同的key。

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

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

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

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

-log-level:consul agent啟動(dòng)后顯示的日志信息級(jí)別。默認(rèn)是info,可選:trace、debug、info、warn、err。

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

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

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

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

-syslog:開(kāi)啟系統(tǒng)日志功能,只在linux/osx上生效。

-ui:?jiǎn)⒂脙?nèi)置Web UI服務(wù)

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

-pid-file:提供一個(gè)路徑來(lái)存放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自啟動(dòng)

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)分別啟動(dòng)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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容