Nacos簡介最新收藏版
Nacos簡介
背景:當在微服務項目中不同模塊之間需要實現(xiàn)服務調(diào)用時,如何實現(xiàn)服務注冊與發(fā)現(xiàn)?
1、Nacos概述
1.1 什么是Nacos
Nacos 是阿里巴巴推出來的一個新開源項目,這是一個更易于構建云原生應用的動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺。
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置、服務元數(shù)據(jù)及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現(xiàn)代應用架構 (例如微服務范式、云原生范式) 的服務基礎設施
Nacos 支持如下核心特性:
- 1)服務發(fā)現(xiàn): 支持 DNS 與 RPC 服務發(fā)現(xiàn),也提供原生 SDK 、OpenAPI 等多種服務注冊方式和 DNS、HTTP 與 API 等多種服務發(fā)現(xiàn)方式。
- 2)服務健康監(jiān)測: Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發(fā)送請求。
- 3)動態(tài)配置服務: Nacos 提供配置統(tǒng)一管理功能,能夠幫助我們將配置以中心化、外部化和動態(tài)化的方式管理所有環(huán)境的應用配置和服務配置。
- 4)動態(tài) DNS 服務: Nacos 支持動態(tài) DNS 服務權重路由,能夠讓我們很容易地實現(xiàn)中間層負載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單 DNS 解析服務。
- 5)服務及其元數(shù)據(jù)管理: Nacos 支持從微服務平臺建設的視角管理數(shù)據(jù)中心的所有服務及元數(shù)據(jù),包括管理服務的描述、生命周期、服務的靜態(tài)依賴分析、服務的健康狀態(tài)、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統(tǒng)計數(shù)據(jù)。
1.2 常見的注冊中心
- Eureka(原生,2.0遇到瓶頸,停止維護)
- Zookeeper(支持,專業(yè)的獨立產(chǎn)品。例如:dubbo)
- Consul(原生,GO語言開發(fā))
- Nacos
相對于 Spring Cloud Eureka 來說,Nacos 更強大。
Nacos = Spring Cloud Eureka + Spring Cloud Config
Nacos 可以與 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。
- 通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現(xiàn)配置的動態(tài)變更。
- 通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現(xiàn)服務的注冊與發(fā)現(xiàn)。
注:nacos與eureka的區(qū)別(簡單介紹)1)nacos和eureka的范圍不同,Nacos的閾值是針對某個具體Service的,而不是針對所有服務的;但Eureka的自我保護閾值是針對所有服務的。nacos支持CP和AP兩種;eureka只支持AP。nacos使用netty,是長連接; eureka是短連接,定時發(fā)送。2)Eureka保護方式:當在短時間內(nèi),統(tǒng)計續(xù)約失敗的比例,如果達到一定閾值,則會觸發(fā)自我保護的機制,在該機制下,Eureka Server不會剔除任何的微服務,等到正常后,再退出自我保護機制。自我保護開關(eureka.server. enab1e-self-preservation:false)Nacos保護方式:當域名健康實例(Instance)占總服務實例(Instance)的比例小于閾值時,無論實例(Instance)是否健康,都會將這個實例(Instance)返回給客戶端。這樣做雖然損失了一部分流量,但是保證了集群的剩余健康實例(Instance)能正常工作。
1.3 Nacos結構圖

1.4 Nacos下載和安裝
1)軟件環(huán)境
Nacos 版本:2.0.4mysql版本:5.7
2)安轉步驟
此處使用docker安轉nacos(單節(jié)點)
注: 注意啟動時需要配置這個環(huán)境配置 -e MODE=standalone 否則默認啟動為占用內(nèi)存為1G,
1、先拉取鏡像
命令:docker pull nacos/nacos-server:v2.0.4
2、運行容器
命令: docker run --name nacos(容器名稱) -d -p 8848(外部訪問端口):8848(容器內(nèi)端口) -p 9848:9848
-p 9849:9849 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /home/nacos/logs(數(shù)據(jù)卷主機地址):/home/nacos/logs(數(shù)據(jù)卷容器內(nèi)部地址) -v /home/nacos/conf:/home/nacos/conf ea54f31c46e4(容器id)
3)查看容器是否啟動
命令:docker ps

4)查看容器相關日志
命令:docker logs --since 10m nacos的容器id #查看指定容器的輸出日志

注意:如果查看日志發(fā)現(xiàn)報錯如下截圖

證明缺少日志文件,我們可以在宿主機配置文件目錄下添加如下內(nèi)容
1)新建文件nacos-logback.xml,在我們宿主機掛載的對應的保存配置文件的目錄下,并在下方添加如下配置;
2)注意log.path 中的value配置要和日志數(shù)據(jù)卷掛載的目錄一致
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="log.path" value="/home/nacos/logs/logback.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.example.logback" level="warn" />
</configuration>5)進行訪問本機IP地址:8848/nacos

注:記得開放對應端口登錄賬號 登錄密碼nacos nacos

2、注冊服務
2.1整合nacos
引入依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>在對應模塊的配置文件中添加nacos配置
#服務名(該服務名,會在nacos上顯示) spring.application.name=服務名稱 # nacos服務地址 spring.cloud.nacos.discovery.server-addr=ip:端口
在啟動類上添加注解

2.2重啟服務,查看
重新啟動服務,登錄nacos頁面查看(下圖發(fā)現(xiàn)服務成功注冊上nacos中)

3、整合外部的mysql(單節(jié)點)
3.1建庫建表
可以直接根據(jù)里面的內(nèi)容創(chuàng)建建表鏈接
注:對應nacos版本建表可能出現(xiàn)的問題

3.2修改數(shù)據(jù)卷掛載出來的nacos配置
進入數(shù)據(jù)卷保存路面
此處我們nacos配置保存在宿主機的/home/nacos/conf中

修改下面內(nèi)容即可

重啟 Nacos 即可,驗證。再次創(chuàng)建相關信息、重啟服務之后依然存在。
4、Nacos集群化部署
之前我們搭建的nacos是standalone(單節(jié)點模式),nacos是支持集群化部署的,最好使用單數(shù)節(jié)點進行集群化部署(因為此處會有投票機制),此處因為只有兩臺機器,所以只演示兩臺機器如何部署
1、使用docker,分別在不同的服務器上運行兩臺nacos容器
注意:2.x版本的nacos需要開放9848 和 9849 端口的映射端口
下面為示例命令:
docker run -d \ # hostname -e PREFER_HOST_MODE=nacos \ # 單例/集群模式 -e MODE=cluster \ # nacos cluster地址,節(jié)點地址 -e NACOS_SERVERS="124.223.xx.xx:8848 106.52.xx.xx:8848" \ # 開啟mysql -e SPRING_DATASOURCE_PLATFORM=mysql \ # mysql主節(jié)點host -e MYSQL_SERVICE_HOST=106.52.xx.xx \ # mysql主節(jié)點端口 -e MYSQL_SERVICE_PORT=3306 \ # 數(shù)據(jù)庫用戶名 -e MYSQL_SERVICE_USER=root \ # 數(shù)據(jù)庫密碼 -e MYSQL_SERVICE_PASSWORD=123456 \ #數(shù)據(jù)庫名稱 -e MYSQL_SERVICE_DB_NAME=nacos_config_cluster \ # 自定義nacos服務器IP(當前) -e NACOS_SERVER_IP=106.52.xx.xx \ # 指定映射端口 8848容器多映射9848 9849 端口 -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ # 容器名 --name nacos-8848 \ --restart=always # 掛載 -v /home/nacos/logs:/home/nacos/logs -v /home/nacos/conf:/home/nacos/conf \ 容器id
2、查看nacos控制臺(通過每個節(jié)點都可以看到對應信息)

3、集群簡介
- leader節(jié)點:負責事務型請求(事務型:創(chuàng)建配置、修改配置、刪除配置)
- follow節(jié)點:負責讀(查詢請求)
- 宕機情況:當leader節(jié)點宕機時,follow節(jié)點進行投票選舉出新的leader節(jié)點(與傳統(tǒng)的redis等不同的是,follow會自動進行重新選舉,不需要借助類似于哨兵機制這種機制進行選舉)

5、可能遇到的問題
1、conf無法掛載出來
在使用docker運行時,將容器內(nèi)的conf掛載出來時,發(fā)現(xiàn)并沒有對應的配置文件
1)先運行一個測試nacos容器
docker run -p 8848:8848 --name nacostest -d 容器id
2)將容器內(nèi)的文件復制出來
#配置文件復制 #第一個目錄為容器內(nèi)目錄 第二個為宿主機目錄 docker cp nacostest(容器名):/home/nacos/logs/ /home/nacos/logs docker cp nacostest(容器名):/home/nacos/conf/ /home/nacos/conf
3)強制關閉容器
docker rm -f 容器id
4)然后在重新運行,包含數(shù)據(jù)卷掛載命令的啟動命令
docker運行命令介紹
| 名稱 | 描述 | 值 |
|---|---|---|
| MODE | 系統(tǒng)啟動方式: 集群/單機 cluster/standalone | 默認 cluster |
| NACOS_SERVERS | 集群地址 | p1:port1空格ip2:port2 空格ip3:port3 |
| PREFER_HOST_MODE | 支持IP還是域名模式 | hostname/ip 默認 ip |
| NACOS_SERVER_PORT | Nacos 運行端口 | 默認 8848 |
| NACOS_SERVER_IP | 多網(wǎng)卡模式下可以指定IP | |
| SPRING_DATASOURCE_PLATFORM | 單機模式下支持MYSQL數(shù)據(jù)庫 | mysql / 空 默認:空 |
| MYSQL_SERVICE_HOST | 數(shù)據(jù)庫 連接地址 | |
| MYSQL_SERVICE_PORT | 數(shù)據(jù)庫端口 | 默認 : 3306 |
| MYSQL_SERVICE_DB_NAME | 數(shù)據(jù)庫庫名 | |
| MYSQL_SERVICE_USER | 數(shù)據(jù)庫用戶名 | |
| MYSQL_SERVICE_PASSWORD | 數(shù)據(jù)庫用戶密碼 | |
| MYSQL_SERVICE_DB_PARAM | 數(shù)據(jù)庫連接參數(shù) | default : |
| MYSQL_DATABASE_NUM | 數(shù)據(jù)庫編號 | 默認 :1 |
| JVM_XMS | -Xms | 默認 :1g |
| JVM_XMX | -Xmx | 默認 :1g |
| JVM_XMN | -Xmn | 默認 :512m |
| JVM_MS | -XX:MetaspaceSize | 默認 :128m |
| JVM_MMS | -XX:MaxMetaspaceSize | 默認 :320m |
| NACOS_DEBUG | 是否開啟遠程DEBUG y/n | 默認 :n |
| TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | 默認 :false |
| NACOS_AUTH_SYSTEM_TYPE | 權限系統(tǒng)類型選擇,目前只支持nacos類型 | 默認 :nacos |
| NACOS_AUTH_ENABLE | 是否開啟權限系統(tǒng) | 默認 :false |
| NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效時間 | 默認 :18000 |
| NACOS_AUTH_TOKEN | token | 默認 :SecretKey012345678901234567890123456789012345678901234567890123456789 |
| NACOS_AUTH_CACHE_ENABLE | 權限緩存開關 ,開啟后權限緩存的更新默認有15秒的延遲 | 默認 : false |
| MEMBER_LIST | 通過環(huán)境變量的方式設置集群地址 | 例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
| EMBEDDED_STORAGE | 是否開啟集群嵌入式存儲模式 embedded | 默認 : none |
| NACOS_AUTH_CACHE_ENABLE | nacos.core.auth.caching.enabled | default : false |
| NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | nacos.core.auth.enable.userAgentAuthWhite | default : false |
| NACOS_AUTH_IDENTITY_KEY | nacos.core.auth.server.identity.key | default : serverIdentity |
| NACOS_AUTH_IDENTITY_VALUE | nacos.core.auth.server.identity.value | default : security |
| NACOS_SECURITY_IGNORE_URLS | nacos.security.ignore.urls | default : /,/error,//*.css,//.js,/**/.html,//*.map,//.svg,/**/.png,//*.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/ |
到此這篇關于Nacos簡介最新收藏版的文章就介紹到這了,更多相關Nacos簡介內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解springMVC兩種方式實現(xiàn)多文件上傳及效率比較
本篇文章介紹了springMVC兩種方式實現(xiàn)多文件上傳及效率比較。springMVC實現(xiàn)多文件上傳有兩種,一種是字節(jié)流的方式進行文件上傳,另外一種是使用springMVC包裝好的解析器進行上傳,有興趣的可以了解一下。2016-12-12
一文詳解Java17中LinkedList類的用法和應用場景
LinkedList 是 Java 集合框架中基于雙向鏈表實現(xiàn)的類,實現(xiàn)了 List 和 Deque 接口,本文將為大家介紹一下它在Java 17 中如何更高效的使用吧2025-03-03
SpringCloudAlibaba整合Feign實現(xiàn)遠程HTTP調(diào)用的簡單示例
這篇文章主要介紹了SpringCloudAlibaba 整合 Feign 實現(xiàn)遠程 HTTP 調(diào)用,文章中使用的是OpenFeign,是Spring社區(qū)開發(fā)的組件,需要的朋友可以參考下2021-09-09
Spring事務執(zhí)行流程及如何創(chuàng)建事務
這篇文章主要介紹了Spring事務執(zhí)行流程及如何創(chuàng)建事務,幫助大家更好的理解和學習使用spring框架,感興趣的朋友可以了解下2021-03-03

