主頁 > 軟體設計 > Docker consul系統構架

Docker consul系統構架

2021-04-08 11:18:10 軟體設計

文章目錄

  • 一、consul概述
    • 架構術語
    • Consul的使用場景
  • 二、consul環境搭建
    • 1.server(192.168.220.110)部署
    • 2.client部署(192.168.220.120)
    • 3.配置template模板自動更新
    • 4.測驗訪問代理服務器以及多節點

一、consul概述

Consul 是一個復雜的系統,它是HashiCorp公司的一個用于實作分布式系統的服務發現于配置工具,Consul內置了服務注冊與發現框架、分布一致性協議實作、健康檢查、Key/Value存盤、多資料中心方案,同時,Consul具有功能完善,部署簡單,使用方便等特點

架構術語

  • Agent:Agent是長期運行在每個consul集群成員節點上守護行程,通過命令consul agent啟 動,Agent有client和server兩種模式,由于每個節點都必須運行agent,所有節點要么是client要 么是server,所有的Agent都可以呼叫DNS或HTTPAPI,并負責檢查和維護服務同步
  • client:運行client模式的Agent,將所有的RPCs轉發到Server,Client是相對無狀態的, Client唯一所做的是在后臺參與LAN gossip pool,只消耗少量的資源,少量的網路帶寬,
  • Server:運行Server模式的Agent,參與Raft quorum,維護集群的狀態,回應RPC查詢,與 其他資料中心互動WAN gossip,轉發查詢到Leader或遠程資料中心
  • datacenter:資料中心,定義為:網路環境是私有,低延遲,高帶寬的,排除和公網的通 信,但有一些細節需要注意,比如在AWS的EC2,多個可用性區域是否被認為組成了單一的資料 中心?而資料中心的定義不包括基于公共互聯網環境,但是對于我們使用者而言,在同一個EC2 的多個可用性區域會被認為是一個的資料中心
  • Consensus :consensus,意味著leader election協議,以及事務的順序,由于這些事務是基 于一個有限狀態機,consensus的定義意味著復制狀態機的一致性,
  • Gossip :consul是建立在Serf(去中心化服務發現和編排)之上,提供了完成的Gossip協議(下文會簡單介紹此協議),用于成員維護故障檢測、事件廣播,
    gossip是基于UDP協議實作隨機的節點到節點的通信,主要是在UDP,
  • LAN Gossip:指的是LAN gossip pool,包含位于同一個局域網或者資料中心的節點,
  • WAN Gossip:指的是WANgossip pool,只包含server節點,這些server主要分布在不同的數 據中心或者通信是基于互聯網或廣域網的,
  • RPC:遠程程序呼叫,是允許client請求服務器的請求/回應機制,

在這里插入圖片描述

Consul的使用場景

Consul的應用場景包括服務發現、服務隔離、服務配置

比如:docker實體的注冊與配置共享、coreos實體的注冊與配置共享、vitess集群、SaaS應用的配置共享、Consul與confd服務集成,動態生成nginx和haproxy組態檔或者Consul結合nginx構建高可用可擴展的Web服務,

二、consul環境搭建

1.server(192.168.220.110)部署

[root@localhost ~] # mkdir consul
[root@localhost ~] # cd consul/
[root@localhost ~/consul] # rz -E
rz waiting to receive. ## 這里將安裝包拖入consul目錄下
[root@localhost ~/consul] # ls
consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                  
[root@localhost ~/consul] # ls
consul  consul_0.9.2_linux_amd64.zip
[root@localhost ~/consul] # mv consul /usr/bin

[root@localhost ~/consul] # consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consul-data \
> -bind=192.168.220.110 \
> -client=0.0.0.0 \
> -nade=consul-server01 &> /var/log/consul.log &
[1] 75549
[root@localhost ~/consul] # consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.220.110:8301  alive   server  0.9.2  2         dc1
[root@localhost ~/consul] # consul info | grep leader
	leader = true
	leader_addr = 192.168.220.110:8300

在這里插入圖片描述

curl 127.0.0.1:8500/v1/status/peers       //查看集群server成員
curl 127.0.0.1:8500/v1/status/leader      //集群Raf leader
curl 127.0.0.1:8500/v1/catalog/services   //注冊的所有服務
curl 127.0.0.1:8500/v1/catalog/nginx      //查看nginx服務資訊
curl 127.0.0.1:8500/v1/catalog/nodes      //集群節點詳細資訊

在這里插入圖片描述

netstat -natp |grep consul
5個埠的作用:
8300:集群內資料的讀寫和復制
8301:單個資料中心gossip協議通訊
8302:跨資料中心gossip協議通訊
8500:提供獲取服務串列、注冊服務、注銷服務等HTTP介面;提供UI服務
8600:采用DNS協議提供服務發現功能

在這里插入圖片描述

2.client部署(192.168.220.120)

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.220.120 \
consul://192.168.220.110:8500

[root@ppp ~] # docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
gliderlabs/registrator   latest    3b59190c6c80   4 years ago   23.8MB

[root@ppp ~] # docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS     NAMES
39c380b4b512   gliderlabs/registrator:latest   "/bin/registrator -i…"   22 seconds ago   Up 21 seconds             registrator


systemctl restart docker
docker run -itd -p:81:80 --name pyy01 -h pyy01 nginx
docker run -itd -p:82:80 --name pyy02 -h pyy02 nginx
docker run -itd -p:83:80 --name pyy03 -h pyy03 httpd
docker run -itd -p:84:80 --name pyy04 -h pyy04 httpd

在這里插入圖片描述

此時訪問瀏覽器
http://192.168.220.110:8500
在這里插入圖片描述

在這里插入圖片描述

3.配置template模板自動更新

  • Consul-Template是一個守護行程,用于實時查詢Consul集群資訊,并更新檔案系統上任意數量的指定模板,生成組態檔,更新完成以后,可以查詢Consul中的服務目錄,Key、Key-values等,

server 192.168.220.110

vim nginx.ctmpl

upstream http_backend {
 {{range service "nginx"}}
  server {{.Address}}:{{.Port}};
  {{end}}
}

server {
 listen 100;
 server_name localhost 192.168.220.110;
 access_log /var/log/nginx/pyy.com-access.log;
 index index.html index.php;
 location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://http_backend;
  }     
}

在這里插入圖片描述

yum -y install gcc pcre-devel zlib-devel

這里將Nginx安裝包拖入終端

tar zxvf nginx-1.12.0.tar.gz -C /opt
cd /opt/nginx-1.12.0/

./configure --prefix=/usr/local/nginx

make && make install


vim /usr/local/nginx/conf/nginx.conf
##19行插入     include vhost/*.conf;

在這里插入圖片描述

cd /usr/local/nginx/conf/
mkdir vhost
mkdir /var/log/nginx

/usr/local/nginx/sbin/nginx

cd /opt
拖入安裝包  consul-template_0.19.3_linux_amd64.zip

unzip consul-template_0.19.3_linux_amd64.zip

mv consul-template /usr/bin
consul-template -consul-addr 192.168.220.110:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/pyy.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

cat /usr/local/nginx/conf/vhost/pyy.conf

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

4.測驗訪問代理服務器以及多節點

瀏覽器查詢192.168.220.110

http://192.168.220.110

docker logs -f pyy01

在這里插入圖片描述

在這里插入圖片描述

consul多節點
###添加一臺有docker環境的服務器192.168.220.130加入已有的集群

consul agent \
-server \
--bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.220.130 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.220.130 &> /var/log/consul.log &

###############################################
--enable-script-ckecks=true:設定檢查服務為可用
-datacenter:資料中心名稱
-join:加入到已有的集群中

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273696.html

標籤:其他

上一篇:shell_一鍵部署Mysql腳本

下一篇:MySQL 運維 - 從零開始學習 | 超詳細

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more