1.Consul 簡介和環境搭建

1.什么是 Consul

Consul 是 service mesh(服務網格)的一個解決方案,它提供了諸如服務發現,配置和隔離等功能的一整套控制平面(control plane)。開發人員可以根據需要單獨使用這些功能點,也可以將他們整合成為一個完整的service mesh。Consul 需要一個數據平面(data plane),并支持代理和本地集成模型。Consul 自帶了一個簡單的代理以實現開箱即用的功能,不過它也支持集成第三方代理框架,比如Envoy。
Consul 的核心功能如下:

    • 服務發現:?Consul 客戶端可以注冊一個服務,比如 api 接口或者 mysql 服務,其他的客戶端可以通過 Consul 來發現這些服務的提供方。通過 DNS 或者 HTTP,引用可以很方便地找到它所依賴的服務。
    • 健康檢查:?Consul 客戶端可以提供任意數量的健康檢查,無論是特定服務(服務是否返回200狀態)還是本地節點(比如內存使用率是否大于90%)。運維人員可以通過這些信息管理集群的健康情況,服務發現組件也可以使用這些信息過濾掉不健康節點。
    • KV 存儲:?應用可以使用 Consul 的樹狀 key/value 存儲做很多事情,比如動態配置,開關,協作,leader 選舉等等。KV 存儲使用的是 HTTP 接口,非常簡單易用。
    • 服務通信加密:?Consul 可以生成并分發 TLS 證書給服務,從而保證服務之間使用 TLS 通信。我們可以使用?intentions 組件來自定義允許哪些服務訪問。使用 intentions 可以實時地操作服務隔離,這比使用復雜的網絡拓撲和靜態防火墻規則要簡單很多。
    • 多數據中心?Consul 支持開箱即用的多數據中心功能。這意味著當工作區域擴展至多個的時候,用戶不需要費心去創建額外的抽象層來滿足多中心需求。
      Consul 設計時就考慮到了對 DevOps 社區和應用開發者友好,這讓它非常適合新興的彈性架構。

2.Consul能解決什么問題

微服務帶來最大的好處就是把整個大項目分割成不同的服務,運行在不同服務器上,實現解耦和分布式處理。微服務雖然有很多好處,但是也會有不好的一方面。任何事物都會有兩面性,在微服務里面運維會是一個很大的難題,如果有一天我們的服務數量非常的多,然后我們又不知道哪一個服務在什么機器上。可能會有人說這部分直接寫在程序的配置里面就好了,當我們服務少的時候是可以這么做的,也允許這么做,但是在實際當中我們要盡量避免這么做,比如說我們某一個服務,地址換了,那么我們設計的相關代碼就得修改重新部署;又或者說我們有一天上線一個新服務或者下線一個服務,這時候我們又得修改程序代碼,這是非常不合理的做法。那么有沒有什么可以解決這樣的問題呢?這里就需要用到我們的服務注冊和發現了。

?

沒有服務注冊發現的結構

?

上面圖片我們可以看到在沒有服務注冊發現的時候一個調用者需要維護多個服務的ip和端口,這是非常不好的做法,當我們服務進行調整的時候就有可能導致服務調用失敗,還有服務器更換服務器,上下新服務,都會受到影響。將來某一個服務節點出現問題,排查對于程序和運維人員來說都是一場很大的災難,因為不知道哪一個節點出了問題,需要每一臺服務器的去排查。

而當我們有使用服務注冊發現之后的結構體是什么樣子的呢?

有服務注冊發現的結構

我們從上圖可以發現,當我們有注冊中心之后調用者不需要自己去維護所有服務的信息了,僅需要向注冊中心請求獲取服務,就可以拿到想要的服務信息。這樣當我們的服務有所調整,或者上線下線服務,都要可以輕松操作,并且可以在注冊中間檢查到服務的健康情況,幫助運維人員快速定位到故障的服務器。

第二點內容來自:https://www.sunnyos.com/article-show-85.html??

?

3.基于docker引擎搭建一個集群版的consul

3.1安裝docker引擎

https://www.cnblogs.com/gytangyao/p/10173937.html

3.2常用的命令行參數

  • -bootstrap-expect 數據中心中預期的服務器數。不應提供此值,或者該值必須與群集中的其他服務器一致。提供后,Consul將等待指定數量的服務器可用,然后引導群集。這允許自動選擇初始領導者。這不能與傳統-bootstrap標志一起使用。此標志需要在服務端模式下運行。

  • -server 以服務端模式啟動

  • -data-dir 數據存放位置,這個用于持久化保存集群狀態

  • -node 群集中此節點的名稱。這在群集中必須是唯一的。默認情況下,這是計算機的主機名。

  • -bind 綁定服務器的ip地址

  • -config-dir 指定配置文件服務,當這個目錄下有 .json 結尾的文件就會加載進來,更多配置可以參考?配置模版

  • -enable-script-checks 檢查服務是否處于活動狀態,類似開啟心跳

  • -datacenter 數據中心名稱

  • -client 客戶端可訪問ip,包括HTTP和DNS服務器。默認情況下,這是“127.0.0.1”,僅允許環回連接。

  • -ui 開啟web的ui界面

  • -join:加入到已有的集群中

完整的配置:https://www.consul.io/docs/agent/options.html

3.3開始配置集群

在宿主機上建立兩個文件夾,分別用于存儲consul的數據和配置? ?

在docker啟動時

/data/consul_data/data會映射到docker容器內部consul/data文件夾

/data/consul_data/conf會映射到docker容器內部consul/conf文件夾

mkdir -p /data/consul_data/data
mkdir -p /data/consul_data/conf

?

server節點的配置

3.3.1 master1

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.128 -client=0.0.0.0 -node=master1 

3.3.2 master2

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.129 -client=0.0.0.0 -node=master2 -join 192.168.161.128

3.3.2 master3

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -server -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.130 -client=0.0.0.0 -node=master3 -join 192.168.161.128

3.3.3錯誤排查和狀態查看

日志查看:
sudo docker logs consul集群信息查看:進入容器內部:sudo docker exec -it consul /bin/sh查看集群成員:consul members

?

webui:http://192.168.161.128-130:8500

?

4.client節點

slave1

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.200 -client=0.0.0.0 -node=slave1 -join 192.168.161.128

?

slave2

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.201 -client=0.0.0.0 -node=slave2 -join 192.168.161.128

?

slave3

sudo docker run --net=host --restart always --name consul -v /data/consul_data/data:/consul/data -v /data/consul_data/conf:/consul/config -d docker.io/consul consul agent -data-dir /consul/data -config-dir /consul/config -ui -enable-script-checks=true -datacenter=dc1 -bind=192.168.161.202 -client=0.0.0.0 -node=slave3 -join 192.168.161.128

?

轉載于:https://www.cnblogs.com/gytangyao/p/10815448.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247985.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Node — 第八天 (大事件項目接口實現二)

如何處理MySQL的錯誤 MySQL的錯誤信息,可以通過err來獲取。這是沒有問題的。 但是,我們加入了Promise,Promise中的錯誤,在外部是獲取不到的,只能使用Promise相關方法來獲取錯誤信息。 解決方法一 使用 JS原生的 tr…

在local模式下的spark程序打包到集群上運行

一、前期準備 前期的環境準備,在Linux系統下要有Hadoop系統,spark偽分布式或者分布式,具體的教程可以查閱我的這兩篇博客: Hadoop2.0偽分布式平臺環境搭建 Spark2.4.0偽分布式環境搭建 然后在spark偽分布式的環境下必須出現如下八…

Effective Objective-C 2.0 初讀小結

1.對于OC中的對象聲明例如NSObject *obj1 [NSObject new];, obj1這個指針變量是分配在棧上的, 他指向的是這一個分配在堆上面的實例對象, 如果進行下面的賦值操作NSObject *obj2 obj1;,那么并沒有新生成一個實例對象, 只是在棧上分配了一個新的指針變量obj2, 而obj2和obj1指向…

APS系統對制造企業到底有多重要?看完這5點你就明白了

第一個問題:需要APS嗎? APS是否重要,不能從其所體現的軟件工具或系統角度來說,而應該從業務角度來說。對于制造工廠和車間的運行而言,計劃是核心的業務。就如同那句俗話說的,沒有規矩不成方圓,領…

Node — 第九天 (大事件項目接口實現三)

文章管理接口 設計數據表 添加文章接口 編寫接口,使用postman模擬提交formdata類型的數據 在article.js 中,加入 /add 路由 postman模擬提交formdata類型的數據 multer處理文件上傳 下載安裝multer 加載模塊 const multer require(multer) 配置上…

Python之爬蟲-段子網

Python之爬蟲-段子網 https://ishuo.cn #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requestsresponse requests.get(https://ishuo.cn) data response.text print(data) r re.findall(<div class"content">(.*?)</div>,data) f…

Node — 第九天 (ES6降級 and 發布屬于自己的[第三方模塊]包)

ES6降級處理 因為 ES 6 有瀏覽器兼容性問題&#xff0c;可以使用一些工具進行降級處理&#xff0c;例如&#xff1a;babel 降級處理 babel 的使用步驟 安裝 Node.js命令行中安裝 babel配置文件 .babelrc運行命令&#xff0c;完成降級 項目初始化 (項目文件夾不能有中文) npm …

Vue — 第一天(極速入門)

基本介紹 vue是什么 目標&#xff1a;了解vue的一些基礎概念。 官方網站&#xff1a; https://cn.vuejs.org/ vue是&#xff1a;漸進式javascript框架。 兩組概念 &#xff08;1&#xff09;框架 庫。只提供一些API給開發者使用。jquery 是一個js庫框架。擁有自己的規則和…

python類和實例化

簡答介紹類和實例python是面向對象的語言&#xff0c;最主要的就是類和實例&#xff0c;類是抽象的模版創建一個類class Studen(object),class 后接類名&#xff0c;定義的類名大些字母開頭&#xff0c;object為類的繼承&#xff0c;沒有合適的繼承類用object類&#xff0c;這是…

pjsip庫分析

http://blog.chinaunix.net/space.php?uid287570&doblog&cuid728411 如果你對SIP/VoIP技術感興趣,哪希望你不要錯過:),如果你對寫出堪稱優美的Code感興趣,那么你也不可錯過:)這期間我想分析一下一個實際的協議棧的設計到實現的相關技術,算是自己的一個學習經歷記錄.最…

Vue — 第二天(v-model和過濾器)

VUE-02-v-model和過濾器 昨日反饋與回顧 代碼倉庫的問題 不要修改你克隆下來的倉庫中任意代碼&#xff0c;否則&#xff0c;下次pull時&#xff0c;可能會報錯&#xff0c;從而得到不到最新的代碼。 如果已經遇到了這個沖突&#xff1a; 解決沖突(git 中解決沖突)把關鍵代碼…

Count

題目鏈接&#xff1a;點這里 題目意思&#xff1a;令f(x)表示<x的正整數中與x互質的數的平均數*2&#xff0c;求sigma(f(i)^k),L<i<R Solution: 首先&#xff0c;我們定義\(S(x)\sum_{gcd(a,x)1}a\)&#xff0c;因為gcd(a,x)1&#xff0c;所以對于任意a&#xff0c;滿…

牛人iOS開發系列--音頻播放、錄音、視頻播放、拍照、視頻錄制

概覽 隨著移動互聯網的發展&#xff0c;如今的手機早已不是打電話、發短信那么簡單了&#xff0c;播放音樂、視頻、錄音、拍照等都是很常用的功能。在iOS中對于多媒體的支持是非常強大的&#xff0c;無論是音視頻播放、錄制&#xff0c;還是對麥克風、攝像頭的操作都提供了多套…

Vue — 第三天(計算屬性和json-server)

計算屬性 使用場景 如果一個結果需要依賴data中的數據&#xff0c;但是需要經過一些邏輯處理&#xff0c;才能得到你想要的數據。此時就可以使用計算屬性。 例如&#xff1a;要對給定的字符串做翻轉處理之后再來顯示。 <div id"app"><!-- 此處邏輯復雜 …

JQuery的ready函數與JS的onload的區別詳解

JQuery的ready函數與JS的onload的區別&#xff1a;1.執行時間window.onload必須等到頁面內包括圖片的所有元素加載完畢后才能執行。$(document).ready()是DOM結構繪制完畢后就執行&#xff0c;不必等到加載完畢。 2.編寫個數不同window.onload不能同時編寫多個&#xff0c;如果…

Vue — 第四天(components組件)

問題導入 下面的代碼是一個折疊面板的效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docu…

iOS開發常用的RGB色值和宏

iOS中RGB常用的色值,同時可將對顏色的設置定義成宏,方便開發應用,如: // name 顏色相關 // 參數格式為&#xff1a;0xFFFFFF #define kColorWithRGB(rgbValue) \ [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 \ …

防火墻綜合實驗

防火墻技術綜合實驗 一、實驗目的&#xff1a;本次實驗是將多種訪問控制列表以及防火墻部分的知識做一個匯總 二、實驗內容 A&#xff1a;Established控制列表 拓撲圖 配置步驟 1:配置各端口ip地址&#xff0c;配置登陸密碼 R4: 登陸賬號&#xff1a;ys 密碼&#xff1a;123 2:…

iOS獲取當前設備型號等信息總結 包含iPhone7和iPhone7P

#include <sys/types.h> #include <sys/sysctl.h>//獲得設備型號(NSString *)getCurrentDeviceModel {int mib[2];size_t len;char *machine;mib[0] CTL_HW;mib[1] HW_MACHINE;sysctl(mib, 2, NULL, &len, NULL, 0);machine malloc(len);sysctl(mib, 2, mac…

Vue — 第五天(路由)

前端路由 問題導入 在前面完成的資產管理案例中&#xff0c; 我們是把列表區域和添加表單區域實現在了一個區域。當頁面功能比較復雜時&#xff0c;我們需要它們拆分開來&#xff1a;一個頁面中只顯示一個區域。 一個比較直觀的解決方案是把它們分別做成兩個獨立的網頁文件&…