日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker 容器部署 Consul 集群

發(fā)布時(shí)間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 容器部署 Consul 集群 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Docker 容器部署 Consul 集群

Consul 介紹

Consul 提供了分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)和配置的解決方案。基于go語言實(shí)現(xiàn)。并且在git上開放了源碼consul-git。consul還包括了分布式一致協(xié)議的實(shí)現(xiàn),健康檢查和管理UI。Consul和zk相比較起來,更加輕量級(jí),而且一致性上基于RAFT算法,zk使用的Paxos 算法。跟zk比較起來更加輕量級(jí),Consul提供了通過一個(gè)DNS或者HTTP接口的方式來控制執(zhí)行,而zk卻需要自己定制解決方案。同樣比較被廣泛使用的服務(wù)發(fā)現(xiàn)解決方案中也有etcd 。etcd也是采用RAFT算法實(shí)現(xiàn),但是etcd不提供管理UI。Consul跟Vagrant都是Hashicorp 公司的產(chǎn)品。作為一整套的分布式系統(tǒng)解決方案,配合同樣基于go語言實(shí)現(xiàn)的Docker開源技術(shù),都是一個(gè)不錯(cuò)的選擇。Docker 的簡(jiǎn)單介紹,可以參考 Docker 介紹 (本文后面將不再介紹docker 命令以及容器等相關(guān)概念)。配合Docker來做應(yīng)用容器,用Consul 來做集群的服務(wù)發(fā)現(xiàn)和健康檢查,并且還可以輕量級(jí)得做到水平和垂直可擴(kuò)展。

Consul Agent、Server、Client

通過運(yùn)行 consul agent 命令,可以通過后臺(tái)守護(hù)進(jìn)程的方式運(yùn)行在所有consul集群節(jié)點(diǎn)中。并且可以以server或者client 模式運(yùn)行。并且以HTTP或者DNS 接口方式,負(fù)責(zé)運(yùn)行檢查和服務(wù)同步。Server模式的agent負(fù)責(zé)維護(hù)consul集群狀態(tài),相應(yīng)RPC查詢,并且還要負(fù)責(zé)和其他數(shù)據(jù)中心(DataCenter)進(jìn)行WAN Gossips交換。Client 節(jié)點(diǎn)是相對(duì)無狀態(tài)的,Client的唯一活動(dòng)就是轉(zhuǎn)發(fā)(foward)請(qǐng)求給Server節(jié)點(diǎn),以保持低延遲和少資源消耗。
??如下圖,是官網(wǎng)的一個(gè)典型系統(tǒng)結(jié)構(gòu),Consul建議我們每個(gè)DataCenter的Server的節(jié)點(diǎn)最好在3到5個(gè)之間,以方便在失敗以及數(shù)據(jù)復(fù)制的性能。Client的數(shù)量可以任意。圖中,最重要的兩個(gè)概念一個(gè)是Gossip協(xié)議,一個(gè)是Consensus 協(xié)議。DataCenter的所有節(jié)點(diǎn)都會(huì)參與到Gossip協(xié)議。Client 到Server 會(huì)通過LAN Gossip。所有的節(jié)點(diǎn)都在Gossip pool中,通過消息層來實(shí)現(xiàn)節(jié)點(diǎn)之間的通信以達(dá)到故障檢測(cè)的目的,并且不需要給Client配置Server的地址。而Server節(jié)點(diǎn)還會(huì)參與到WAN Gossip池中。這樣,通過Server節(jié)點(diǎn)就可以讓DataCenter之間做簡(jiǎn)單的服務(wù)發(fā)現(xiàn)。比如增加一個(gè)Datacenter就只需要讓Server節(jié)點(diǎn)參與到Gossip Pool中。并且,DataCneter之間的通信和服務(wù)請(qǐng)求就可以通過WAN Gossip 來隨機(jī)請(qǐng)求另外一個(gè)DataCenter的Server節(jié)點(diǎn),然后被請(qǐng)求的Server 會(huì)再把請(qǐng)求foward到本DataCenter的leader節(jié)點(diǎn)。Server leader的選舉是通過Consul的Raft 算法實(shí)現(xiàn)。Leader 節(jié)點(diǎn)需要負(fù)責(zé)所有請(qǐng)求和處理,并且這些請(qǐng)求也必須復(fù)制給所有的其他非leader的Server節(jié)點(diǎn)。同樣,非Leader節(jié)點(diǎn)接收到RPC請(qǐng)求的時(shí)候也會(huì)foward 到Leader節(jié)點(diǎn)。
??

在Docker 容器中啟動(dòng)Consul Agent

  • 下載 progrium/consul 鏡像
  • 以Server 模式在容器中啟動(dòng)一個(gè)agent
    docker run -p 8600:53/udp -h node1 progrium/consul -server -bootstrap
  • docker@boot2docker:~$ docker run -p 8600:53/udp -h node1 progrium/consul -server -bootstrap ==> WARNING: Bootstrap mode enabled! Do not enable unless necessary ==> WARNING: It is highly recommended to set GOMAXPROCS higher than 1 ==> Starting raft data migration... ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running!Node name: 'node1'Datacenter: 'dc1'Server: true (bootstrap: true)Client Addr: 0.0.0.0 (HTTP: 8500, HTTPS: -1, DNS: 53, RPC: 8400)Cluster Addr: 172.17.0.1 (LAN: 8301, WAN: 8302)Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: falseAtlas: <disabled>==> Log data will now stream in as it occurs:2015/09/29 03:13:43 [INFO] serf: EventMemberJoin: node1 172.17.0.12015/09/29 03:13:43 [INFO] serf: EventMemberJoin: node1.dc1 172.17.0.12015/09/29 03:13:43 [INFO] raft: Node at 172.17.0.1:8300 [Follower] entering Follower state2015/09/29 03:13:43 [INFO] consul: adding server node1 (Addr: 172.17.0.1:8300) (DC: dc1)2015/09/29 03:13:43 [INFO] consul: adding server node1.dc1 (Addr: 172.17.0.1:8300) (DC: dc1)2015/09/29 03:13:43 [ERR] agent: failed to sync remote state: No cluster leader2015/09/29 03:13:45 [WARN] raft: Heartbeat timeout reached, starting election2015/09/29 03:13:45 [INFO] raft: Node at 172.17.0.1:8300 [Candidate] entering Candidate state2015/09/29 03:13:45 [INFO] raft: Election won. Tally: 12015/09/29 03:13:45 [INFO] raft: Node at 172.17.0.1:8300 [Leader] entering Leader state2015/09/29 03:13:45 [INFO] consul: cluster leadership acquired2015/09/29 03:13:45 [INFO] raft: Disabling EnableSingleNode (bootstrap)2015/09/29 03:13:45 [INFO] consul: New leader elected: node12015/09/29 03:13:45 [INFO] consul: member 'node1' joined, marking health alive2015/09/29 03:13:45 [INFO] agent: Synced service 'consul'

    這里試驗(yàn)一下8600(DNS) 接口,然后我們就用dig的方式可以交互和訪問了。

    用Docker 容器啟動(dòng)Consul集群

    分別啟動(dòng)三個(gè)server節(jié)點(diǎn)

    剛才啟動(dòng)單獨(dú)的服務(wù)節(jié)點(diǎn),用bootstrap。現(xiàn)在啟動(dòng)三個(gè)節(jié)點(diǎn)需要用bootstrap-expect 3 ,并且綁定到容器的同一個(gè)ip,這里綁定到server1上。

    docker@boot2docker:~$ docker run -d –name server1 -h server1 progrium/consul -server -bootstrap-expect 3

    docker@boot2docker:~JOINIP=”(docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’ server1)”

    docker@boot2docker:~dockerrun?d??nameserver2?hserver2progrium/consul?server?joinJOIN_IP

    docker@boot2docker:~dockerrun?d??nameserver3?hserver3progrium/consul?server?joinJOIN_IP

    然后用docker命令查看已經(jīng)啟動(dòng)的容器。關(guān)于docker 相關(guān)內(nèi)容可以參考“Docker介紹 ”

    docker@boot2docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 87bd80f8132d progrium/consul "/bin/start -server -" 3 seconds ago Up 2 seconds 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8500/tcp, 8301-8302/udp server3 a18d0597bf2d progrium/consul "/bin/start -server -" 18 seconds ago Up 17 seconds 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 8500/tcp server2 448a550224fb progrium/consul "/bin/start -server -" About a minute ago Up About a minute 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8500/tcp, 8301-8302/udp server1

    啟動(dòng)client節(jié)點(diǎn)

    docker@boot2docker:~dockerrun?d?p8400:8400?p8500:8500?p8600:53/udp?hclient1progrium/consul?joinJOIN_IP

    查看容器信息:

    docker@boot2docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0410ad7bb68c progrium/consul "/bin/start -join 172" 4 seconds ago Up 3 seconds 53/tcp, 0.0.0.0:8400->8400/tcp, 8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->53/udp focused_leakey 87bd80f8132d progrium/consul "/bin/start -server -" 3 minutes ago Up 3 minutes 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8500/tcp, 8301-8302/udp server3 a18d0597bf2d progrium/consul "/bin/start -server -" 3 minutes ago Up 3 minutes 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8500/tcp, 8301-8302/udp server2 448a550224fb progrium/consul "/bin/start -server -" 4 minutes ago Up 4 minutes 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 8500/tcp server1

    進(jìn)入容器查看

    我們可以進(jìn)入容器來查看一下consul是如何管理agent節(jié)點(diǎn),以及選舉server 的leader的。這個(gè)時(shí)候我們關(guān)掉Server節(jié)點(diǎn),容器name是server1的 448a550224fb 容器,再觀察。
    ?? 關(guān)閉后server1信息:

    ==> Gracefully shutting down agent...2015/09/29 04:08:17 [INFO] consul: server starting leave2015/09/29 04:08:17 [INFO] raft: Removed peer 172.17.0.28:8300, stopping replication (Index: 18)2015/09/29 04:08:17 [INFO] raft: Removed peer 172.17.0.29:8300, stopping replication (Index: 18)2015/09/29 04:08:17 [INFO] raft: Removed ourself, transitioning to follower2015/09/29 04:08:17 [INFO] raft: Node at 172.17.0.27:8300 [Follower] entering Follower state2015/09/29 04:08:17 [INFO] serf: EventMemberLeave: server1.dc1 172.17.0.272015/09/29 04:08:17 [INFO] consul: cluster leadership lost2015/09/29 04:08:17 [INFO] raft: aborting pipeline replication to peer 172.17.0.28:83002015/09/29 04:08:17 [INFO] raft: aborting pipeline replication to peer 172.17.0.29:83002015/09/29 04:08:17 [INFO] consul: removing server server1.dc1 (Addr: 172.17.0.27:8300) (DC: dc1)2015/09/29 04:08:18 [INFO] serf: EventMemberLeave: server1 172.17.0.272015/09/29 04:08:18 [INFO] consul: removing server server1 (Addr: 172.17.0.27:8300) (DC: dc1)2015/09/29 04:08:18 [INFO] agent: requesting shutdown2015/09/29 04:08:18 [INFO] consul: shutting down server2015/09/29 04:08:18 [INFO] agent: shutdown complete

    server2節(jié)點(diǎn)信息如下:

    docker@boot2docker:~$ docker attach server22015/09/29 04:08:18 [INFO] serf: EventMemberLeave: server1 172.17.0.272015/09/29 04:08:18 [INFO] consul: removing server server1 (Addr: 172.17.0.27:8300) (DC: dc1)2015/09/29 04:08:20 [WARN] raft: Rejecting vote from 172.17.0.29:8300 since we have a leader: 172.17.0.27:83002015/09/29 04:08:20 [WARN] raft: Heartbeat timeout reached, starting election2015/09/29 04:08:20 [INFO] raft: Node at 172.17.0.28:8300 [Candidate] entering Candidate state2015/09/29 04:08:21 [INFO] raft: Node at 172.17.0.28:8300 [Follower] entering Follower state2015/09/29 04:08:21 [INFO] consul: New leader elected: server3

    可以看到server1 節(jié)點(diǎn)下線,并且重新選舉leader server節(jié)點(diǎn)為server3,再看一下server3 信息如下:

    docker@boot2docker:~$ docker attach server32015/09/29 04:08:18 [INFO] serf: EventMemberLeave: server1 172.17.0.272015/09/29 04:08:18 [INFO] consul: removing server server1 (Addr: 172.17.0.27:8300) (DC: dc1)2015/09/29 04:08:20 [WARN] raft: Heartbeat timeout reached, starting election2015/09/29 04:08:20 [INFO] raft: Node at 172.17.0.29:8300 [Candidate] entering Candidate state2015/09/29 04:08:20 [INFO] raft: Duplicate RequestVote for same term: 22015/09/29 04:08:21 [WARN] raft: Election timeout reached, restarting election2015/09/29 04:08:21 [INFO] raft: Node at 172.17.0.29:8300 [Candidate] entering Candidate state2015/09/29 04:08:21 [INFO] raft: Election won. Tally: 22015/09/29 04:08:21 [INFO] raft: Node at 172.17.0.29:8300 [Leader] entering Leader state2015/09/29 04:08:21 [INFO] consul: cluster leadership acquired2015/09/29 04:08:21 [INFO] consul: New leader elected: server32015/09/29 04:08:21 [INFO] raft: pipelining replication to peer 172.17.0.28:83002015/09/29 04:08:21 [INFO] consul: member 'server1' left, deregistering

    client 節(jié)點(diǎn)信息如下:

    docker@boot2docker:~$ docker attach focused_leakey2015/09/29 04:08:18 [INFO] serf: EventMemberLeave: server1 172.17.0.272015/09/29 04:08:18 [INFO] consul: removing server server1 (Addr: 172.17.0.27:8300) (DC: dc1)2015/09/29 04:08:21 [INFO] consul: New leader elected: server3

    總結(jié)

    以上是生活随笔為你收集整理的Docker 容器部署 Consul 集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 18禁免费观看网站 | 三级av| 91国产丝袜在线播放 | 精品视频免费观看 | 日本在线视频不卡 | 毛片av在线播放 | av资源网址 | 日本黄页网址 | 免费无毒av| 国产精品久久一区二区三区动 | 日本少妇做爰全过程毛片 | 欧美日韩亚洲国产另类 | 亚洲AV无码一区二区三区性 | 在线观看视频中文字幕 | 老司机av影院 | 免费av在线网 | 久久精品高清视频 | 性色av蜜臀av浪潮av老女人 | 极品美女高潮出白浆 | 夜夜嗨影院| 岛国av在线免费 | 成人国产毛片 | 国产精品一区一区三区 | 色播在线视频 | 国产资源一区 | 黄色一级片av | 97超碰人人在线 | 9人人澡人人爽人人精品 | 小香蕉影院 | 国产黑丝91| 牛牛澡牛牛爽一区二区 | 婷婷丁香一区二区三区 | av超碰在线观看 | 精品人妻一区二区色欲产成人 | 国产福利午夜 | 日韩av在线第一页 | 亚洲爱v| 青青草免费公开视频 | 亚洲自拍偷拍一区二区 | 精品久久无码中文字幕 | 欧美a久久 | 中文字幕亚洲在线观看 | 亚洲网站免费看 | 国产a级淫片 | 亚洲xx网站| 国产在线一区二区视频 | 中文字幕人成人乱码亚洲电影 | 农民人伦一区二区三区 | 全球av在线 | 欧美啪啪一区 | 噜噜色av | 极品白嫩的小少妇 | 一区二区三区四区在线免费观看 | 成年人视频网 | 依依成人综合网 | 欧美在线播放一区二区 | 激情片| 毛片一级片 | 91看片网站| 成人黄色片网站 | 18视频在线观看娇喘 | 黄色av地址 | 久操超碰 | 亚洲一区色 | 九九热只有精品 | 国产精品一区二区三区不卡 | 女优色图 | 久久性av| 亚洲国产欧美日韩在线 | 一本视频 | 亚洲另类春色 | 久草www| 高清成人 | 91l九色lporny| 成人自拍视频 | 欧美一区二区三区爽爽爽 | 成人av动漫| 一级日批片| 中文字幕不卡在线 | 男人的天堂在线播放 | 久久久久99精品成人片毛片 | 最新视频 - 8mav | 全程偷拍露脸中年夫妇 | www.一起操 | 亚洲国产第一页 | 亚洲一区二区三区电影在线观看 | 日日夜夜拍 | www.久久色 | 日韩中文字幕免费在线观看 | 色屁屁www | 黄色a级片视频 | 免费看黄色三级三级 | 国产精品一区二区在线播放 | 99黄色网| 男裸体无遮挡网站 | 亚洲高清免费视频 | 91豆花视频 | 成人免费视频观看视频 | 国产在线精品一区 |