當前位置:首頁 » 雲伺服器 » 如何在伺服器上部署nacos

如何在伺服器上部署nacos

發布時間: 2022-12-24 22:29:43

① nacos服務搭建

編輯啟動文件,startup.cmd
set MODE="standalone"

解壓壓縮包,執行bin目錄下的startup.cmd 命令 啟動nacos

執行bin目錄下的shutdown.cmd 命令 停止nacos

C:\Users\wqf\Desktop\nacos-server-1.4.2\nacos\bin

訪問nocas的服務端 http://伺服器ip:8848/nacos/index.html,默認的用戶名密碼是 nocas/nocas

補充:windows 啟動如果出現問題 編輯start.cmd文件 修改圖示行

② 3. nacos服務發現

1. nacos服務發現原理

2. spring cloud服務協作流程

3.搭建nacos服務端

4. 搭建nacos服務發現客戶端

5. nacos服務發現的數據模型

有兩個微服務A和B, A調用B, 那麼A是如何調用B的呢?我們可以通過http請求,進行調用. 也可以使用rpc進行調用.

不管使用什麼方式, A需要知道B的地址和埠號. 那麼A是如何知道B的地址和埠好的呢? 如上圖:

1. B服務啟動的時候, 會注冊到服務發現中心, 告訴他,我的ip和埠號是什麼?這里應該也是介面調用,通知服務發現中心的.

2. A服務啟動的時候, 也會注冊的服務發現中心, 告訴他, 我的ip和埠號是什麼? 同時, 服務發現中心會告訴我, 當前已注冊的服務的ip和埠號. 這里通過一個介面請求和參數返回就可以實現.

3. 拿到了B服務的ip和port, 接下來就可以調用服務B了.

我們要基於spring cloud生態環境進行開發. 所以,先來了解spring cloud的服務寫作流程

前面注冊和發現就都不說了, 上面說過了, 這里多了兩個東西, 一個是Ribbon, 另一個是feign.

Ribbon是負載均衡器, Feign是遠程調用, 自動進行http請求.

客戶端Service A 要調用ServiceB的實例1和實例2. 那麼到底調用ServiceB的哪個實例呢? 使用Ribbon負載均衡, 要看使用什麼樣的演算法了, 可以使用輪詢演算法, 或者其他演算法, 如加權演算法

負載均衡有兩種: 服務端負載均衡, 客戶端負載均衡

在負載均衡中維護一個可用的服務實例清單, 當客戶端請求來臨時, 負載均衡伺服器按照某種配置好的規則(負載均衡演算法), 從可用服務實例清單中, 選取其一去處理客戶端請求, 這就是服務端負載均衡, 例如Nginx. 通過nginx進行負載均衡, 客戶端發送請求值Nginx, nginx通過負載均衡演算法, 在多個伺服器之間選擇一個進行訪問.

接下來, 我們要講的ribbon, 就屬於客戶端負載均衡, 在ribbon客戶端會有一個服務實例地址列表, 在發送請求前, 通過負載均衡演算法, 選擇一個服務實例, 然後進行訪問, 這是客戶端負載均衡. 即在客戶端進行負載均衡演算法分配.

服務的調用方, 我們就可以理解為是一個客戶端.

負載均衡演算法:

可通過下面的方式, 在spring boot配置中修改默認的負載均衡的策略

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">account-service.ribbon.NFLoadBalanceRuleClassName=com.netflix.loadBalancer.RandomRule</pre>

其中: account-service: 是調用的服務的名稱. 後面的組成部分是固定的.

feign是服務端http介面的調用.

feign可以幫助我們更快捷, 優雅的調用httpApi. 原來我們在調用http請求的時候, 需要使用的是RestTemplate, 傳輸域名和埠號, 進行http調用. 使用feign後, 不用再使用RestTemplate模擬請求了, feign能夠通過服務名, 找到對應的介面. 不需要我們在拼接地址+埠了, 提供了簡單方便的操作.

使用方法:

2. 聲明feign客戶端

新建一個類, 聲明為FeignClient類型的介面. 指定調用的服務名. 然後將指定介面. 這樣在調用的時候, 就可以通過服務名, + 介面, 自動找到對應的項目介面了.

這里上一節已經搭建過了(地址: https://www.cnblogs.com/ITPower/articles/12630193.html ), 在服務的最後, 我們搭建了nacos的集群

因為對於服務發現來說, 有很多配置都是公用的, 因此, 我們搭建一個父工程, 將通用的配置都添加到裡面取.

創建一個maven工廠, 引入jar包即可. pom文件如下

在父工程下創建一個子工程. 我們要做一下三件事

指定服務埠號, nacos服務的地址

需要增加兩個引入. 一個啟用服務發現, 另一個是啟用feign

最終項目結構如下:

其中前3步驟和創建服務生產者是一樣的

在父工程下創建一個子工程. 我們要做一下三件事

指定服務埠號, nacos服務的地址

需要增加兩個引入. 1個啟用服務發現, 另一個是啟用feign

nacos生產上已經注冊發現了兩題服務

同時調用介面, 可以獲取到proctor返回的內容.

我們可以通過啟動多個服務的方式, 來測試服務的負載均衡策略.

1. 修改proctor的啟動埠號為動態埠號. 目的是方便啟動的時候動態配置埠號, 啟動集群

** 2. 修改配置, 添加動態埠號**

vm options配置中設置動態埠號為-Dport=56010, 56011. 點擊復制按鈕, 可以增加一個應用, 然後配置參數後, 啟動兩個應用.

3. 在nacos控制台查看啟動效果

我們看到, nacos的proctor 有兩台服務實例. 點擊詳情可查看具體的服務實例信息:

4. 調用consumer的介面, 訪問proctor, 默認採用輪詢的負載均衡演算法

http://localhost:56020/consumer

nacos的注冊發現是一種三層模型: 即 服務--集群--實例.如下圖:

nacos最外層是服務. 最里層是多台實例. 多個實例之間組成一個服務集群.

命名空間不僅適用於配置管理, 同樣適用於服務發現. namespace的常用場景之一是不同環境的配置隔離.如: 開發, 生成, 測試環境資源的隔離.

proctor啟動了兩個實例, 點擊詳情進去可以看到他是一個集群. 集群里有兩台實例.

5.2 服務.

在命名空間下, 有各個服務.比如我們上面定義的是在public命名空間下, 定義了兩個服務. 一個是proctor, 一個是consumer.

服務有 服務名 實例. ****遠程調用的時候, 需要指定服務名.

5.3 實例

實例是基於網路協議通訊, 所以必須要有一個ip:埠號

5.4 元信息

在及群里點擊某一個實例-->編輯, 可以看到如下頁面, 可以設置元信息

那麼元信息是什麼呢? 每台伺服器都可能會設置自己的個性化的信息. 這就是每台伺服器的元數據信息

5.5 實操---指定集群的命名空間為dev

只需要在配置中增加命名空間就可以了.

我們也可以修改集群的名字, 集群的默認名字是DEFAULT. 我們這里將其修改為default. 在控制台dev命名空間下, 可以看到啟動了服務customer.

③ 2021-11-22 spring-cloud-nacos配置優先順序

最近有項目組同學問到為什麼自己配置了nacos,但配置不生效?我簡單看了下,發現問題出在相關配置的優先順序模式不同。
spring-boot項目,有bootstrap、application兩個配置文件,結合profile,和支持的文件格式properties、yaml,已經有6個配置文件了。然後使用了spring-cloud-starter-alibaba-nacos-config 後,又提供了三級配置。這些配置之間的組合關系,將在無形中影響配置的效果。很多同學只知道其中的一種,因此在無意識引入兩種或以上的配置後,就會發現有奇怪的配置不生效問題發生。

spring-boot項目依賴bootstrap.yml 用於應用程序上下文的引導階段,由父Spring ApplicationContext載入,其工作的階段為父ApplicationContext 被載入到使用application.yml的之前。也就是說 bootstrap 載入優先於 applicaton。

bootstrap 主要用於從額外的資源來載入配置信息,還可以在本地外部配置文件中解密屬性。這兩個上下文共用一個環境,它是任何Spring應用程序的外部屬性的來源。bootstrap 裡面的屬性會優先載入,它們默認也不能被本地相同配置覆蓋。

bootstrap 配置文件有以下幾個應用場景:

由於spring-boot支持多種文件格式,所以多種格式之間,其優先順序是平等的,只要找到了一個,就會被使用。一般有:.properties、.yaml、.xml等格式。

應用級別的spring-boot配置文件,主要用於 Spring Boot 項目的自動化配置,其載入優先順序低於bootstrap.yaml。

nacos作為外部配置伺服器,通過spring-boot的bootstrap.yaml引入。但nacos本身,也提供了三級配置體系:主配置(只有一個,但會按照不同後綴名,去找到相關配置)、擴展配置、共享配置。

三級配置的優先順序如下:主配置 > 擴展配置 > 共享配置

nacos提供的配置路徑 spring.cloud.nacos.config 下,有一系列的屬性用於定位主配置。基於 prefix(默認為 ${spring.application.name} 的值)、namespace、group(默認為字元串 DEFAULT_GROUP )、file-extension(默認為字元串 .properties ),按組裝規則 ${prefix}-${spring.profiles.active}.${file-extension} 去找到一個配置。

在nacos的所有配置中,主配置(存在的情況下)具有最高的優先順序,其同名配置值不能被擴展配置或共享配置中定義的同名屬性所覆蓋。

上述兩類配置都支持三個屬性: data-id 、 group (默認為字元串 DEFAULT_GROUP )、 refresh (默認為 true )。

實際上,nacos中並未對 extension-configs 和 shared-configs 的差別進行詳細闡述。我們從他們的結構,看不出本質差別;除了優先順序不同以外,也沒有其他差別。那麼,nacos項目組為什麼要引入兩個類似的配置呢?我們可以從當初 該功能的需求(issue) 上找到其原始目的。
摘要其核心內容如下:

④ SpringCloud Alibaba 實戰,來自尚矽谷電商項目理解

電商項目常見解決技術搭配方案:

SpringCloud Alibaba --nacos:注冊中心

SpringCloud Alibaba --nacos:配置中心

SpringCloud --Ribbon:負載均衡

SpringCloud Alibaba --Sentinel:服務容錯(限流、降級、熔斷)

SpringCloud --Gateway:API網關(webflux編程模式)

SpringCloud --Sleuth(調用鏈監控)

SpringCloud Alibaba --Seata:分布式事務解決方案

作用:因為都會用到springcloud alibaba,所以將 放到公共服務中,統一管理版本

Nacos 文檔地址: https://nacos.io/zh-cn/docs/quick-start.html

Nacos 下載地址:https://github.com/alibaba/nacos/releases

第一步:在需要注冊到nacos的服務pom文件中添加相應的nacos依賴

作用:將我們的服務注冊到注冊中心中,同時也可以從注冊中心中發現其他服務

第二步:將 Nacos 伺服器地址配置添加到 /src/main/resources/application.properties 文件中,

給當前服務命名

第三步:使用@EnableDiscoveryClient 註解開啟服務注冊和發現

啟動 Nacos 伺服器

下載 Nacos Server下載頁面

將下載的文件解壓,進入nacos/bin文件夾(),並根據操作系統的實際情況

Linux/Unix/Mac , 執行 sh startup.sh -m standalone

Windows , 執行 cmd startup.cmd

查詢服務

http://127.0.0.1:8848/nacos

用戶名和密碼默認都是nacos

如:member會員服務需要調用coupon優惠券服務的方法

1.在member服務和coupon服務的pom文件中引入feign依賴

2.開啟feign功能,在member服務上開啟

@FeignClient("gulimall-coupon"):其中gulimall-coupon為nacos注冊的被調用的服務名,@RequestMapping("/coupon/coupon/member/list")路徑為gulimall-coupon服務中membercoupons()方法的調用全路徑(添加上controller上的請求路徑)

對應的在gulimall-coupon服務中有membercoupons()方法的具體實現

第一步:引入 Nacos Config 進行配置管理

第二步:在需要管理配置的服務下,添加bootstrap.properties

第三步:需要給配置中心添加數據集(Data Id)gulimall-coupon.properties

第四步:給 應用名.properties 添加任何配置

第五步:在需要讀取配置的類上添加註解@RefreshScope,實時刷新獲取配置文件內容

@RefreshScope:動態獲取並刷新配置

@Value("${配置項的名}")

細節部分:

1.命名空間:主要用來做配置隔離

默認是public(保留空間);默認新增的所有配置都在public空間

a:開發、測試、生產:利用命名空間來做環境隔離

b:每一個微服務之間互相隔離配置,每一個微服務都創建自己的命名空間,只載入自己命名空間下的所有配置

2.配置集

一組相關或者不相關的配置項的集合稱為配置集。在系統中,一個配置文件通常就是一個配

置集,包含了系統各個方面的配置。例如,一個配置集可能包含了數據源、線程池、日誌級

別等配置項。

3.配置集ID

Nacos 中的某個配置集的 ID。配置集 ID 是組織劃分配置的維度之一。Data ID 通常用於組

織劃分系統的配置集。一個系統或者應用可以包含多個配置集,每個配置集都可以被一個有

意義的名稱標識。Data ID 通常採用類 java 包(如 com.taobao.tc.refund.log.level)的命名

規則保證全局唯一性。此命名規則非強制。

4.配置組

Nacos 中的一組配置集,是組織配置的維度之一。通過一個有意義的字元串(如 Buy 或

Trade )對配置集進行分組,從而區分 Data ID 相同的配置集。當您在 Nacos 上創建一個

配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認採用 DEFAULT_GROUP 。配置

分組的常見場景:不同的應用或組件使用了相同的配置類型,如 database_url 配置好

MQ_topic 配置。

載入多配置文件:

官方文檔:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

項目地址:https://github.com/alibaba/Sentinel

隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,

從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

什麼是熔斷降級

除了流量控制以外,降低調用鏈路中的不穩定資源也是關鍵 Sentinel 的使命之一。由於調用關系的復雜性,如果調用鏈路中的某個資源出現了不穩定,最終會導致請求發生堆積。

Sentinel 和 Hystrix 的原則是一致的: 當檢測到調用鏈路中某個資源出現不穩定的表現,例如

如請求響應時間長或異常比例升高的時候,則對這個資源的調用進行限制,讓請求快速失敗,

避免影響到其它的資源而導致級聯故障。

熔斷降級設計理念

在限制的手段上,Sentinel 和 Hystrix 採取了完全不一樣的方法。

Hystrix 通過 線程池隔離 的方式,來對依賴(在 Sentinel 的概念中對應 資源)進行了隔

離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成

本(過多的線程池導致線程數目過多),還需要預先給各個資源做線程池大小的分配。

Sentinel 對這個問題採取了兩種手段

a.通過並發線程數進行限制

b.通過響應時間對資源進行降級

步驟:

1、引入依賴

2、使用 Nacos 注冊中心

3、定義 fallback 實現

在服務消費者中,實現 feign 遠程介面,介面的實現方法即為調用錯誤的容錯方法

4、定義 fallbackfactory 並放在容器中

5、改造 fallback 類接受異常並實現容錯方法

6、遠程介面配置 feign 客戶端容錯

7、開啟 sentinel 代理 feign 功能;在 application.properties 中配置

測試熔斷效果。當遠程服務出現問題,會自動調用回調方法返回默認數據。

⑤ spring cloud集成nacos

MODE:設置使用單機模式
注意:如果伺服器是多網卡,配置NACOS_SERVER_IP參數來指定IP,否則可能會導致外網無法訪問;

啟動成功後,訪問 http://114.116.119.117:8848/nacos/index.html 默認登錄賬號密碼 nacos/nacos

准備3台伺服器;分別執行如下命令;

參數說明:

版本問題可參考:
1. 版本說明
2. spring-boot、spring-cloud、spring-cloud-alibaba版本對應

注意: 引入 nacos管理配置時,要 同時 引入 spring-cloud-starter-bootstrap 這個 jar,不引入這個 jar,bootstrap.properties 配置文件不生效,會導致讀取不到配置。

新建 bootstrap.properties 代替 application.properties(bootstrap是 application 的父類,項目啟動載入配置文件時,先載入父類)
配置如下:

在class 類上添加@RefreshScope 標簽。當 nacos 中修改 downloadExcelUrl 的值時,運行的項目會同步修改對應的值。

版本問題可參考:
1. 版本說明
2. spring-boot、spring-cloud、spring-cloud-alibaba版本對應

在啟動類 ***Application 上添加 @EnableDiscoveryClient 註解,開啟服務注冊與發現相關功能。

⑥ 【Nacos專題】Nacos 快速入門

Nacos 英文全稱 Dynamic Naming and Configuration Service,它是 Spring Cloud Alibaba 的核心組件之一,致力於微服務架構中的服務注冊與發現、配置管理。

Nacos 將注冊中心和配置中心整合在一起,提供了兩個核心功能,即服務注冊與發現和動態配置服務。

Nacos 支持基於 DNS 和 基於 RPC 的服務發現,服務提供者向 Nacos 服務端注冊服務後,服務消費者可以從 Nacos 服務端獲取注冊列表。

提供了一個簡潔易用的 UI,方便用戶管理所有環境的應用配置和服務配置,消除了配置變更時服務需重新部署的過程。還提供了包括 配置版本跟蹤 金絲雀發布 一鍵回滾配置 以及 客戶端配置更新狀態跟蹤 在內的一系列開箱即用的配置管理特性,大大降低配置變更帶來的風險。

Nacos 分為服務端和客戶端,服務端用來提供服務發現與注冊等功能,客戶端就是不同的應用和服務。

在 Nacos 的 Release Notes 可以看到每個版本的相關介紹。當前最新的穩定版本是 1.4.0。

Nacos 服務需要 Java 運行環境,因此,在啟動服務之前需要確保你的伺服器已經有了 Java 運行環境,並且配置好了 JAVA_HOME 。

參數說明:

-m:指定運行模式,standalone 表示單機模式

在 Nacos 配置文件中配置伺服器ip,默認的埠號為8848,默認的用戶名和密碼均為nacos,訪問 http://ip:8848/nacos/index.html 便能夠成功登Nacos管理後台。

(1) 引入依賴

在 SpringBoot 項目中引入 Nacos 客戶端依賴,pom.xml 添加如下內容:

(2) 修改配置

在 application.properties 配置文件中添加 Nacos 的基本配置 (也可以是 application.yml )

1)application.properties

2)application.yml

(3) @EnableDiscoveryClient 註解

在 SpringBoot 的啟動類上添加 @EnableDiscoveryClient 註解來開啟服務注冊。

Nacos Discovery 默認集成了 Netflix Ribbon,服務消費者可以使用 RestTemplate 或 OpenFeign 進行服務的調用。

(1) Nacos 啟動時報如下錯誤

問題原因:通過yum命令安裝的普通的openJDK沒有javac等工具,而且安裝完以後連環境變數都不需要配置,就能使用 java -version 驗證。

解決方案:重新安裝devel開發版openJDK,開發版的openJDK有javac工具,然後配置java環境變數即可。

(2) Nacos Provider 啟動報錯

問題原因:沒有配置 Nacos 服務端的地址,因此,當 Nacos Provider 啟動的時候,無法與注冊中心通信

解決方案:在配置文件中配置 Nacos 服務端地址,如下所示:

熱點內容
安卓手機怎麼看國內 發布:2025-03-15 05:43:01 瀏覽:729
游戲中心密碼在哪裡看 發布:2025-03-15 05:41:09 瀏覽:941
微信支付android開發 發布:2025-03-15 05:29:35 瀏覽:656
密度值演算法 發布:2025-03-15 05:26:41 瀏覽:318
暑期學編程 發布:2025-03-15 05:21:33 瀏覽:346
加密與 發布:2025-03-15 05:21:25 瀏覽:720
安卓如何把時鍾插件調出來 發布:2025-03-15 05:19:11 瀏覽:50
安卓旋鈕主機音量大小怎麼調整 發布:2025-03-15 05:19:05 瀏覽:755
如何將支付密碼關掉 發布:2025-03-15 05:16:55 瀏覽:933
java培訓學院 發布:2025-03-15 05:11:22 瀏覽:34