Spring Cloud開發實踐(五): Consul - 服務註冊的另一個選擇

来源:https://www.cnblogs.com/milton/archive/2023/05/17/17410694.html
-Advertisement-
Play Games

Consul 是微服務網路解決方案之一, 用於管理跨網路和多雲環境服務之間的安全網路連接, 提供服務發現, 服務網格, 流量管理和自動更新. 可以單獨部署, 也可以分散式部署. Consul 內建安全通信選項, 使用 Go 語言編寫, 啟動資源消耗小, 腳本化配置, 對容器部署方式更友好 ...


目錄

關於 Consul

HashiCorp Consul 是微服務網路解決方案之一, 用於管理跨網路和多雲環境服務之間的安全網路連接, 提供服務發現, 服務網格, 流量管理和自動更新. 可以單獨部署, 也可以分散式部署.

Consul 的特點

  • CP(強一致性),使用Raft複製狀態
  • 服務可以通過任意Server註冊, 通過 Raft 仲裁
  • 內建安全通信選項
  • 一致性提供鎖定和集群協調
  • 帶配置功能, 健康檢查, Lock, KV, ACL
  • 通過 DNS 支持非 REST 節點, 允許更多類型資源連接
  • 使用 Go 語言編寫, 啟動資源消耗小, 只需要50-60MB記憶體, 相對比 Nacos 預設配置512M, 啟動需要600M以上記憶體.
  • 腳本化配置, 對容器部署方式更友好

安裝

下載地址 https://developer.hashicorp.com/consul/downloads, 根據自己的系統選擇對應的二進位文件, 對應 Linux AMD64 的, 文件還不小, 50MB, 解壓後只有一個可執行文件, 127MB, 將其放到 /opt/consul/ 目錄, 並將owner改為 root:root

運行 Agent

Consul 的運行形式就是 Agent, 可以運行為 server 或 client 模式. Agent 的啟動命令格式為

consul agent <options>

具體的命令參數可以通過consul agent --help查看, 常用的參數

  • -bind= 用於cluster通信的地址
  • -client= 用於client訪問的地址, 包含 RPC, DNS, HTTP, HTTPS, gRPC (if configured).
  • -config-dir= 配置文件所在目錄, 讀取所有 .json 尾碼的文件作為配置, 可以指定多次
  • -config-file= 配置文件路徑, 可以指定多次
  • -data-dir= 指定agent狀態數據存儲目錄
  • -dev 以開發模式啟動
  • -log-file= 指定日誌文件路徑
  • -log-json 使用JSON格式記錄日誌
  • -log-level= 日誌級別
  • -log-rotate-bytes= 日誌文件位元組數約束
  • -log-rotate-duration= 日誌文件時間跨度
  • -log-rotate-max-files= 日誌保留的文件數
  • -node= 指定本節點名稱, 在 Cluster 內必須唯一
  • -node-id= 指定Node ID, 預設為自動生成並記錄到 data-dir
  • -retry-join= 啟動時嘗試加入的 Agent 地址
  • -server 伺服器模式
  • -ui 啟用內建的靜態Web UI界面
  • -ui-content-path= UI界面地址, 預設為 /ui/

開發模式

-dev參數可以快速創建一個開發模式的server, 數據不保存, Node ID隨機生成, Node name使用當前的hostname, 監聽 127.0.0.1, 可以看下麵的控制台輸出, HTTP等服務使用的是127.0.0.1地址, 只能從本機訪問

$ consul agent -dev
==> Starting Consul agent...
              Version: '1.15.2'
           Build Date: '2023-03-30 17:51:19 +0000 UTC'
              Node ID: 'ab2e7536-867a-c12f-5bd6-8a825b31af90'
            Node name: 'centos7001'
           Datacenter: 'dc1' (Segment: '<all>')
               Server: true (Bootstrap: false)
          Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600)
         Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
    Gossip Encryption: false
     Auto-Encrypt-TLS: false
            HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
             gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
     Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2

==> Log data will now stream in as it occurs:

2023-05-17T06:31:23.337Z [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.ab2e7536-867a-c12f-5bd6-8a825b31af90/server.dc1 from=<none> to=<none>

如果在遠程伺服器上運行, 需要加上-client參數, 指定伺服器網口IP地址, 這樣就可以從本地訪問 http://192.168.11.22:8500 的 Web控制台了

consul agent -dev -client=192.168.11.22

在另一個終端視窗中, 可以通過consul members命令查看節點, 如果不加-http-addr參數, 預設訪問本地127.0.0.1

$ consul members -http-addr=http://192.168.11.22:8500
Node        Address         Status  Type    Build   Protocol  DC   Partition  Segment
centos7001  127.0.0.1:8301  alive   server  1.15.2  2         dc1  default    <all>

通過consul leave停止consul服務

$ consul leave -http-addr=http://192.168.11.22:8500
Graceful leave complete

單Server模式

如果不使用-dev, 就要手工指定一些參數, 否則啟動會有錯誤

consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22

去掉了 -dev 參數, 增加了三個新參數,

  • -ui 開啟 8500 埠的 web 控制台, 這個不是必須的
  • -server 和 -bootstrap-expect=1 一起使用, 前者表示用server模式啟動, 後者表示只有一臺伺服器, 可以立即產生leader, 也必須指定. 如果不指定後者, consul會一直等待 leader 的產生

集群模式

集群模式下, 每個 Datacenter 必須至少有一臺 server. 建議是3或5台, 單server在宕機時會造成數據丟失. 其它 Agent 運行為 client 模式.

下麵以一臺Server, 一臺Client為例說明

在 11.22 主機上運行 Server

consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22

在 11.23 主機上運行 Client, 並 Join 到 11.22

consul agent -ui -data-dir=./data -client=192.168.11.23 -bind=192.168.11.23 -retry-join=192.168.11.22

Join 成功後, 在兩邊的控制臺上會顯示相應信息. 這時候通過consul members可以看到兩個Node:

 /opt/consul/consul members -http-addr=http://192.168.11.22:8500
Node          Address             Status  Type    Build   Protocol  DC   Partition  Segment
centos7001    192.168.11.22:8301   alive   server  1.15.2  2         dc1  default    <all>
54120-nc01    192.168.11.23:8301   alive   client  1.6.1   2         dc1  default    <default>

後臺運行

不留日誌

nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >/dev/null 2>&1 &

日誌輸出到文件

nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >path/to/log/consul.log 2>&1 &

這樣consul會在後臺運行, 需要用 consul leave 退出

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡單講,handler就是兩個功能 插入消息,enqueuemessage,msg,when 從消息隊列中遍歷所有消息,比對msg.when和當前的when,找到合適的位置插入 處理消息,looper.loop會從messagequeue中調用next。取消息,如果消息還沒到時間該執行,就會比對時間 ...
  • 大家好,我是 DOM哥。給大家隆重介紹一個文生圖工具
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 如何優雅的基於 element-plus,封裝一個夢中情 dialog 優點 擺脫繁瑣的 visible 的命名,以及反覆的重覆 dom。 想法 將 dialog 封裝成一個函數就能喚起的組件。如下: addDialog({ title: ...
  • 在前端開發中,模塊化是一種將代碼拆分為獨立模塊的開發方法。它通過將功能相似或相關的代碼組織成可復用、可維護的模塊,以提高開發效率和代碼質量。 模塊化的主要目的是解決傳統的JS開發存在的問題,例如全局命名衝突、代碼復用困難、依賴管理混亂等。通過模塊化,可以將代碼拆分為獨立的功能模塊,每個模塊都有自己的 ...
  • (如何搭建一個vue項目) 一、nvm 安裝與使用 1.1、nvm簡介 nvm全名node.js version management,顧名思義是一個nodejs的版本管理工具。通過它可以安裝和切換不同版本的nodejs 1.2、nvm下載 ①github下載 https://github.com/ ...
  • 策略模式 一、介紹 在策略模式(Strategy Pattern)中,一個類的行為或其演算法可以在運行時更改。這種類型的設計模式屬於行為型模式。 意圖:定義一系列的演算法,把它們一個個封裝起來, 並且使它們可相互替換。 主要解決:在有多種演算法相似的情況下,使用 if...else 所帶來的複雜和難以維護 ...
  • java設計模式【工廠方法模式】 工廠方法模式 工廠方法模式(FACTORY METHOD)是一種常用的類創建型設計模式,此模式的核心精神是封裝類中變化的部分,提取其中個性化善變的部分為獨立類,通過依賴註入以達到解耦、復用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽 ...
  • 學過 Java、C# 或者其他托管語言(managed languages)的同學,回過頭來看 C++ 的時候,第一反應就是 C++ 沒有自動垃圾回收器(GC),而不能充分利用的資源被稱為垃圾。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...