Nacos簡介最新收藏版
Nacos簡介
背景:當(dāng)在微服務(wù)項(xiàng)目中不同模塊之間需要實(shí)現(xiàn)服務(wù)調(diào)用時(shí),如何實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)?
1、Nacos概述
1.1 什么是Nacos
Nacos 是阿里巴巴推出來的一個(gè)新開源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。
Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施
Nacos 支持如下核心特性:
- 1)服務(wù)發(fā)現(xiàn): 支持 DNS 與 RPC 服務(wù)發(fā)現(xiàn),也提供原生 SDK 、OpenAPI 等多種服務(wù)注冊(cè)方式和 DNS、HTTP 與 API 等多種服務(wù)發(fā)現(xiàn)方式。
- 2)服務(wù)健康監(jiān)測: Nacos 提供對(duì)服務(wù)的實(shí)時(shí)的健康檢查,阻止向不健康的主機(jī)或服務(wù)實(shí)例發(fā)送請(qǐng)求。
- 3)動(dòng)態(tài)配置服務(wù): Nacos 提供配置統(tǒng)一管理功能,能夠幫助我們將配置以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置。
- 4)動(dòng)態(tài) DNS 服務(wù): Nacos 支持動(dòng)態(tài) DNS 服務(wù)權(quán)重路由,能夠讓我們很容易地實(shí)現(xiàn)中間層負(fù)載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單 DNS 解析服務(wù)。
- 5)服務(wù)及其元數(shù)據(jù)管理: Nacos 支持從微服務(wù)平臺(tái)建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù),包括管理服務(wù)的描述、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)、服務(wù)的流量管理、路由及安全策略、服務(wù)的 SLA 以及最首要的 metrics 統(tǒng)計(jì)數(shù)據(jù)。
1.2 常見的注冊(cè)中心
- Eureka(原生,2.0遇到瓶頸,停止維護(hù))
- Zookeeper(支持,專業(yè)的獨(dú)立產(chǎn)品。例如:dubbo)
- Consul(原生,GO語言開發(fā))
- Nacos
相對(duì)于 Spring Cloud Eureka 來說,Nacos 更強(qiáng)大。
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 實(shí)現(xiàn)配置的動(dòng)態(tài)變更。
- 通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn)。
注:nacos與eureka的區(qū)別(簡單介紹)1)nacos和eureka的范圍不同,Nacos的閾值是針對(duì)某個(gè)具體Service的,而不是針對(duì)所有服務(wù)的;但Eureka的自我保護(hù)閾值是針對(duì)所有服務(wù)的。nacos支持CP和AP兩種;eureka只支持AP。nacos使用netty,是長連接; eureka是短連接,定時(shí)發(fā)送。2)Eureka保護(hù)方式:當(dāng)在短時(shí)間內(nèi),統(tǒng)計(jì)續(xù)約失敗的比例,如果達(dá)到一定閾值,則會(huì)觸發(fā)自我保護(hù)的機(jī)制,在該機(jī)制下,Eureka Server不會(huì)剔除任何的微服務(wù),等到正常后,再退出自我保護(hù)機(jī)制。自我保護(hù)開關(guān)(eureka.server. enab1e-self-preservation:false)Nacos保護(hù)方式:當(dāng)域名健康實(shí)例(Instance)占總服務(wù)實(shí)例(Instance)的比例小于閾值時(shí),無論實(shí)例(Instance)是否健康,都會(huì)將這個(gè)實(shí)例(Instance)返回給客戶端。這樣做雖然損失了一部分流量,但是保證了集群的剩余健康實(shí)例(Instance)能正常工作。
1.3 Nacos結(jié)構(gòu)圖
1.4 Nacos下載和安裝
1)軟件環(huán)境
Nacos 版本:2.0.4mysql版本:5.7
2)安轉(zhuǎn)步驟
此處使用docker安轉(zhuǎn)nacos(單節(jié)點(diǎn))
注: 注意啟動(dòng)時(shí)需要配置這個(gè)環(huán)境配置 -e MODE=standalone 否則默認(rèn)啟動(dòng)為占用內(nèi)存為1G,
1、先拉取鏡像
命令:docker pull nacos/nacos-server:v2.0.4
2、運(yùn)行容器
命令: 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ù)卷主機(jī)地址):/home/nacos/logs(數(shù)據(jù)卷容器內(nèi)部地址) -v /home/nacos/conf:/home/nacos/conf ea54f31c46e4(容器id)
3)查看容器是否啟動(dòng)
命令:docker ps
4)查看容器相關(guān)日志
命令:docker logs --since 10m nacos的容器id #查看指定容器的輸出日志
注意:如果查看日志發(fā)現(xiàn)報(bào)錯(cuò)如下截圖
證明缺少日志文件,我們可以在宿主機(jī)配置文件目錄下添加如下內(nèi)容
1)新建文件nacos-logback.xml,在我們宿主機(jī)掛載的對(duì)應(yīng)的保存配置文件的目錄下,并在下方添加如下配置;
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)進(jìn)行訪問本機(jī)IP地址:8848/nacos
注:記得開放對(duì)應(yīng)端口登錄賬號(hào) 登錄密碼nacos nacos
2、注冊(cè)服務(wù)
2.1整合nacos
引入依賴
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
在對(duì)應(yīng)模塊的配置文件中添加nacos配置
#服務(wù)名(該服務(wù)名,會(huì)在nacos上顯示) spring.application.name=服務(wù)名稱 # nacos服務(wù)地址 spring.cloud.nacos.discovery.server-addr=ip:端口
在啟動(dòng)類上添加注解
2.2重啟服務(wù),查看
重新啟動(dòng)服務(wù),登錄nacos頁面查看(下圖發(fā)現(xiàn)服務(wù)成功注冊(cè)上nacos中)
3、整合外部的mysql(單節(jié)點(diǎn))
3.1建庫建表
可以直接根據(jù)里面的內(nèi)容創(chuàng)建建表鏈接
注:對(duì)應(yīng)nacos版本建表可能出現(xiàn)的問題
3.2修改數(shù)據(jù)卷掛載出來的nacos配置
進(jìn)入數(shù)據(jù)卷保存路面
此處我們nacos配置保存在宿主機(jī)的/home/nacos/conf中
修改下面內(nèi)容即可
重啟 Nacos 即可,驗(yàn)證。再次創(chuàng)建相關(guān)信息、重啟服務(wù)之后依然存在。
4、Nacos集群化部署
之前我們搭建的nacos是standalone(單節(jié)點(diǎn)模式),nacos是支持集群化部署的,最好使用單數(shù)節(jié)點(diǎn)進(jìn)行集群化部署(因?yàn)榇颂帟?huì)有投票機(jī)制),此處因?yàn)橹挥袃膳_(tái)機(jī)器,所以只演示兩臺(tái)機(jī)器如何部署
1、使用docker,分別在不同的服務(wù)器上運(yùn)行兩臺(tái)nacos容器
注意:2.x版本的nacos需要開放9848 和 9849 端口的映射端口
下面為示例命令:
docker run -d \ # hostname -e PREFER_HOST_MODE=nacos \ # 單例/集群模式 -e MODE=cluster \ # nacos cluster地址,節(jié)點(diǎn)地址 -e NACOS_SERVERS="124.223.xx.xx:8848 106.52.xx.xx:8848" \ # 開啟mysql -e SPRING_DATASOURCE_PLATFORM=mysql \ # mysql主節(jié)點(diǎn)host -e MYSQL_SERVICE_HOST=106.52.xx.xx \ # mysql主節(jié)點(diǎn)端口 -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服務(wù)器IP(當(dāng)前) -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控制臺(tái)(通過每個(gè)節(jié)點(diǎn)都可以看到對(duì)應(yīng)信息)
3、集群簡介
- leader節(jié)點(diǎn):負(fù)責(zé)事務(wù)型請(qǐng)求(事務(wù)型:創(chuàng)建配置、修改配置、刪除配置)
- follow節(jié)點(diǎn):負(fù)責(zé)讀(查詢請(qǐng)求)
- 宕機(jī)情況:當(dāng)leader節(jié)點(diǎn)宕機(jī)時(shí),follow節(jié)點(diǎn)進(jìn)行投票選舉出新的leader節(jié)點(diǎn)(與傳統(tǒng)的redis等不同的是,follow會(huì)自動(dòng)進(jìn)行重新選舉,不需要借助類似于哨兵機(jī)制這種機(jī)制進(jìn)行選舉)
5、可能遇到的問題
1、conf無法掛載出來
在使用docker運(yùn)行時(shí),將容器內(nèi)的conf掛載出來時(shí),發(fā)現(xiàn)并沒有對(duì)應(yīng)的配置文件
1)先運(yùn)行一個(gè)測試nacos容器
docker run -p 8848:8848 --name nacostest -d 容器id
2)將容器內(nèi)的文件復(fù)制出來
#配置文件復(fù)制 #第一個(gè)目錄為容器內(nèi)目錄 第二個(gè)為宿主機(jī)目錄 docker cp nacostest(容器名):/home/nacos/logs/ /home/nacos/logs docker cp nacostest(容器名):/home/nacos/conf/ /home/nacos/conf
3)強(qiáng)制關(guān)閉容器
docker rm -f 容器id
4)然后在重新運(yùn)行,包含數(shù)據(jù)卷掛載命令的啟動(dòng)命令
docker運(yùn)行命令介紹
名稱 | 描述 | 值 |
---|---|---|
MODE | 系統(tǒng)啟動(dòng)方式: 集群/單機(jī) cluster/standalone | 默認(rèn) cluster |
NACOS_SERVERS | 集群地址 | p1:port1空格ip2:port2 空格ip3:port3 |
PREFER_HOST_MODE | 支持IP還是域名模式 | hostname/ip 默認(rèn) ip |
NACOS_SERVER_PORT | Nacos 運(yùn)行端口 | 默認(rèn) 8848 |
NACOS_SERVER_IP | 多網(wǎng)卡模式下可以指定IP | |
SPRING_DATASOURCE_PLATFORM | 單機(jī)模式下支持MYSQL數(shù)據(jù)庫 | mysql / 空 默認(rèn):空 |
MYSQL_SERVICE_HOST | 數(shù)據(jù)庫 連接地址 | |
MYSQL_SERVICE_PORT | 數(shù)據(jù)庫端口 | 默認(rèn) : 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ù)庫編號(hào) | 默認(rèn) :1 |
JVM_XMS | -Xms | 默認(rèn) :1g |
JVM_XMX | -Xmx | 默認(rèn) :1g |
JVM_XMN | -Xmn | 默認(rèn) :512m |
JVM_MS | -XX:MetaspaceSize | 默認(rèn) :128m |
JVM_MMS | -XX:MaxMetaspaceSize | 默認(rèn) :320m |
NACOS_DEBUG | 是否開啟遠(yuǎn)程DEBUG y/n | 默認(rèn) :n |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | 默認(rèn) :false |
NACOS_AUTH_SYSTEM_TYPE | 權(quán)限系統(tǒng)類型選擇,目前只支持nacos類型 | 默認(rèn) :nacos |
NACOS_AUTH_ENABLE | 是否開啟權(quán)限系統(tǒng) | 默認(rèn) :false |
NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效時(shí)間 | 默認(rèn) :18000 |
NACOS_AUTH_TOKEN | token | 默認(rèn) :SecretKey012345678901234567890123456789012345678901234567890123456789 |
NACOS_AUTH_CACHE_ENABLE | 權(quán)限緩存開關(guān) ,開啟后權(quán)限緩存的更新默認(rèn)有15秒的延遲 | 默認(rèn) : false |
MEMBER_LIST | 通過環(huán)境變量的方式設(shè)置集群地址 | 例子: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 | 是否開啟集群嵌入式存儲(chǔ)模式 embedded | 默認(rèn) : 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/ |
到此這篇關(guān)于Nacos簡介最新收藏版的文章就介紹到這了,更多相關(guān)Nacos簡介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaWeb Session 會(huì)話管理實(shí)例詳解
這篇文章主要介紹了JavaWeb Session 會(huì)話管理的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09解決IDEA上循環(huán)依賴報(bào)錯(cuò)問題Error:java: Annotation processing&n
這篇文章主要介紹了解決IDEA上循環(huán)依賴報(bào)錯(cuò)問題Error:java: Annotation processing is not supported for module cycles,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2023-10-10關(guān)于Logback+MyBatis日志輸出問題的一些思考
這篇文章主要介紹了關(guān)于Logback+MyBatis日志輸出問題的一些思考,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-09-09Java中將一個(gè)列表拆分為多個(gè)較小列表的三種不同方法
有時(shí)候我們需要將大集合按指定的數(shù)量分割成若干個(gè)小集合,這篇文章主要給大家介紹了關(guān)于Java中將一個(gè)列表拆分為多個(gè)較小列表的三種不同方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09IDEA-Maven項(xiàng)目的jdk版本設(shè)置方法
我們需要設(shè)置jdk的版本,不然會(huì)提示導(dǎo)致語法錯(cuò)誤,這篇文章主要介紹了IDEA-Maven項(xiàng)目的jdk版本設(shè)置方法,小編覺得不錯(cuò),一起來了解一下2019-04-04使用JAVA+Maven+TestNG框架實(shí)現(xiàn)超詳細(xì)Appium測試安卓真機(jī)教程
這篇文章主要介紹了使用JAVA+Maven+TestNG框架實(shí)現(xiàn)超詳細(xì)Appium測試安卓真機(jī)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Netty客戶端接入流程N(yùn)ioSocketChannel創(chuàng)建解析
這篇文章主要為大家介紹了Netty客戶端接入流程N(yùn)ioSocketChannel創(chuàng)建源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03