Nacos超详细整理,入门+性能对比+linux单机+集群部署

Nacos 服务注册和配置中心

简介

gitHub

中文文档

全名NamingConfiguration,一个更易于构建云原生的动态服务发现,配置管理和服务管理平台.Nacos就是注册中心+配置中心的组合,替代Eureka做服务注册中心,替代Config做服务配置中心

注册进Nacos

DisCovery Example gitHub

  • maven
父工程
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.3.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

   <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  • 启动类
    @EnableDiscoveryClient

  • yml

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #配置nacos地址

Nacos默认集成了ribbon,所以服务提供者实现负载的情况下,调用方会自动使用默认策略来进行选择

服务注册中心对比

服务注册与发现框架 CAP模型 控制台管理 社区活跃度
Eureka AP 支持 低(2.x版本闭源)
Zookeeper CP 不支持
Consul CP 支持
Nacos AP/CP 支持

据说 Nacos 在阿里巴巴内部有超过10万的实例运行,已经过了累死双十一等各种大型流量的考验

  • Nacos与其他注册中心特性对比
>> Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP / CP
健康检查 TCP/HTTP/Mysql/Client Beat Client Beat TCP/HTTP/gRPC/Cmd / Client Beat
负载均衡 权重/DSL/metadata/CMDB Ribbon Fabio RR /
雪崩保护 支持 支持 不支持 不支持 不支持
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS/UDP HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心 支持 不支持 支持 不支持 不支持
SpringCloud 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8s集成 支持 不支持 支持 支持 不支持

总之我很欣赏阿里的一点,野心很大!网上可以搜到他的Nacos全景图,几乎所有的覆盖面他都要去做,包括他的官网建议抛弃zookeeper直接Nacos整合Dubbo,也就诞生了唯一一个AP,CP都支持的注册中心

注: C是所有节点在同一时间看到的数据时一致的;而A的定义是所有的请求都会受到响应

何时选择使用何种模式?

一般来说如果不需要存储服务级别的信息且服务实例是从nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式.当前主流的服务如Spring Cloud和Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例

如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8s服务和DNS服务则适用于CP模式,CP模式下则支持注册持久化实例,此时则是以Raft协议为集群模式运行,该模式下注册实例之前必须先注册服务,如果服务不存在则会返回错误.

Nacos切换CAP选择

curl -X PUT "$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP"

分布式配置中心

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

config 的yml要区分于出来的bootstrap.yml,Nacos同Springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取之后,才能保证项目的正常启动

bootstrap.yml

spring:
 application:
  name: nacos-config-client
 cloud:
  nacos:
   discovery:
    server-addr: 192.168.10.63:8848
   config:
    server-addr: 192.168.10.63:8848
    file-extension: yaml #指定yaml格式的配置

application.yml

server:
  port: 3377

spring:
  profiles:
    active: dev
    

在控制台添加对应DataId的配置文件,具体规则我们在官网可以查看Nacos Config gitHub

也就是分为三部分组成,实例名称+profile级别+后缀名

感兴趣的也可以看我以前的文章Spring Cloud Config,原理就是用SpringCloudConfig做的,也同时支持动态刷新

发布之后我们就可以用配置中心的文件来进行项目配置了

具体原理是怎么通知到项目,以及项目是怎么以配置中心为基准的我也整理过
Spring Cloud Bus,Nacos 也是参照Cloud一步一步整合升级来的

分类配置

Nacos已经干翻了eureka+config+bus,并且他们没有的他也有,介绍点新功能

  • Namespace 命名空间

Nacos默认的命名空间是public,Namespace主要用来实现隔离
比如说我们现在有三个环境:开发,测试和生产环境,我们就可以创建三个Namespace.不同的Namespace之间是隔离的

  • Group 组

Group默认DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

  • Cluster 集群 默认DEFAULT

集群配置&持久化

在单机版启动的情况下,Nacos默认是采用内嵌式数据库derby,所以在我们重启或断点的情况下,只要重启就可以保证我们配置的文件还在,但在我们集群的环境下不可能每个服务去单独配置一遍,并且还不共享,所以官网就推荐我们必须要配置集群环境,并且支持mysql数据库来持久化,官网推荐使用linux环境

  1. 修改conf文件里的application.properties,添加数据库对应项和配置,详细看官网

  2. 修改启动命令,添加 -p命令

while getopts ":m:f:s:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
    p)  
        PORT=$OPTARG;;

  1. 修改luster.conf, 配置指定的集群端口

  2. 修改启动命令,添加port指定

nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
  1. 重启nacos,并端口形式,例: `./startup.sh -p 8849

  2. 配置nginx代理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容