Nacos 运维部署流程与常见配置方法

  • Post author:
  • Post category:其他


在使用

Nacos

时进行了一些配置的调整,过程中也遇到了一些问题,所以对

Nacos

部署上的一些要点进行了整理,详见官方文档:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html

部署

Nacos

需要

JDK

环境,版本要求为

1.8

及其以上版本。如果采用源码部署方案,则需要

Maven

,版本要求为

3.2

及其以上版本。



一、单机部署

  1. 单机模式下,最简化运行无须进行配置,可直接启动:

    bin/startup.sh -m standalone
    

    建议在

    Nacos

    主目录下启动,

    Nacos



    work

    目录和

    start.out

    日志采用的相对路径。

    首次启动时,

    Nacos

    默认账户为

    Nacos

    ,默认密码为

    Nacos

  2. 停止

    Nacos

    服务:

    bin/shutdown.sh
    



二、配置 MySQL 数据库


Nacos

支持使用

MySQL

作为外置数据库,需要准备一个

MySQL

服务,版本要求为

5.6.5+



  1. Nacos

    创建库,使用

    conf/mysql-schema.sql

    文件初始化数据库表。

  2. 修改

    conf/application.properties

    ,开启数据库相关的配置,并配置为实际的数据库地址和账户信息。

    ### Count of DB:
    db.num=1
    
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=username
    db.password.0=password
    
    ### 数据库连接池配置: hikariCP
    db.pool.config.connectionTimeout=30000
    db.pool.config.validationTimeout=10000
    db.pool.config.maximumPoolSize=20
    db.pool.config.minimumIdle=2
    
  3. 重启

    Nacos

    配置即生效。



三、权限校验


Nacos

默认没有开启权限校验,没有登录

api

接口依旧可以访问,需要手动配置权限。开启权限校验后,服务上需要配置

username



password

才可正常注册。

  1. 修改

    conf/application.properties

    设置

    nacos.core.auth.enabled



    true

    nacos.core.auth.enabled=true
    


    nacos.core.auth.server.identity.key



    nacos.core.auth.server.identity.value

    配置,将这两个配置项分别作为

    Header

    头的

    key



    value

    ,添加到

    Header

    可绕过权限校验。

    可以理解为一个自定义的固定

    Token

    nacos.core.auth.server.identity.key=serverIdentity
    nacos.core.auth.server.identity.value=security
    
  2. 重启

    Nacos

    配置即生效。

  3. 服务上需要添加

    username



    password

    两个配置项,否则将抛出 403 异常。

    本文使用的服务端版本为

    2.1.2



    nacos-client

    版本最开始使用的

    1.4.2

    出现了

    403

    异常,通过将

    nacos-client

    升级到

    2.0.3

    解决。

    Tips:但是升级版本后我又降回版本进行测试,该 403 问题又消失了,只记得的异常信息包含了

    [check-update] get changed dataId error, code: 403



四、context-path 配置


nacos

默认的

context-path



/nacos

,通过配置这里更换路径前缀。

server.servlet.contextPath=/

修改后在服务的配置文件上也需要做对应的配置,否则将抛出

404

异常。


spring.cloud.nacos.discovery.context-path

配置

idea

可能会有黄色提示,但是这部分配置是会生效的,且不可缺失。

spring:
  cloud:
    nacos:
      discovery:
        context-path: /
      config:
        context-path: /



五、配置启动内存


Nacos

单机启动时内存配置默认为

-Xms512m -Xmx512m -Xmn256m

,集群启动时内存默认配置为

-Xms2g -Xmx2g -Xmn1g

打开

bin/startup.sh

文件,定位到

86-97

行这段区间:

if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

fi



六、1.x与2.x区别


服务端:


Nacos 1.x

占用了两个端口:


  • 8848

    端口,可通过

    server.port

    配置,提供Web管理端访问,客户端模块通过该端口进行服务注册和配置同步;

  • 7848

    端口,对

    8848

    端口

    -1000

    得到端口号,是

    Nacos

    集群通信的端口,用于节点选举来确定集群主节点。


Nacos 2.x

额外占用了两个端口:


  • 9848

    端口,对

    8848

    端口

    +1000

    得到端口号,是客户端

    gRPC

    请求的端口,用于客户端向

    Nacos

    发起连接和请求;

  • 9849

    端口,对

    8848

    端口

    +1001

    得到端口号,是

    Nacos


    gRPC

    请求方式进行集群通信的端口,用于

    Nacos

    集群间数据同步。


Nacos

单机模式启动时依旧要占用

7848



9849

两个端口,让我不是很能理解。


客户端:


Nacos 1.x

通过

Http

方式(

8848

端口)与服务端进行通信,

2.x

的服务端向下兼容到

1.x

的客户端。


Nacos 2.x

也需要通过

Http

方式(

8848

端口)与服务端进行通信,但只用于权限校验等操作,主要功能通过

gRPC

方式(

9848

端口)与服务端进行通信,不能向下兼容到

1.x

的服务端。

对于客户端访问而言,如果客户端是

1.x

版本仅需要开通

8848

端口,如果是

2.x

版本需要增加开通

9848

端口。



七、我的 Maven 配置

在使用

Nacos

前我使用的

SpringBoot 2.3.12.RELEASE



Spring Cloud Hoxton.SR12

,在全局父

pom.xml

配置如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 全局父

    pom.xml

    添加配置:

    <dependencyManagement>
        <dependencies>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-alibaba-dependencies</artifactId>
           <version>2.2.7.RELEASE</version>
           <type>pom</type>
           <scope>import</scope>
        </dependencies>
    </dependencyManagement>
    

    导入

    Spring Cloud Alibaba

    依赖不是必须,可直接指定

    Nacos

    依赖的版本为

    2.2.7.RELEASE

  2. 使用

    Nacos

    客户端的微服务模块的

    pom.xml

    添加如下配置:

    <dependencies>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    



版权声明:本文为nineya_com原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。