1.Nacos 本地基础环境搭建

93 阅读7分钟

Nacos 快速开始

这个快速开始手册是帮忙您快速在您的电脑上,下载、安装并使用 Nacos。

注意

  • 快速开始旨在帮助您快速上手安装、部署及入门使用Nacos,本快速开始所生产出的Nacos服务为单机模式未开启鉴权,建议仅在测试中使用,若在实际生产环境中部署,请部署集群模式开启鉴权,以避免存在稳定性和安全性的风险。
  • Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。

0. 版本选择

您可以通过Nacos的版本下载页面release notes 及 发布声明中找到每个版本支持的功能的介绍,当前推荐的稳定版本为2.4.2.

1. 预备环境准备

Nacos 依赖 Java 环境来运行,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置

2. 下载安装包

你可以通过Nacos官网网站及Github两种方式来获取 Nacos 发行包 。

进入Nacos官网版本下载页面,选择 稳定版本, 然后点击二进制包下载列中的${nacos.version}.zip进行下载。

注意:有时大量用户同时进行下载时,可能会遇到下载限流失败的情况,若出现下载限流失败,请稍等后重试,或采用从 Github 下载方式

3. 解压缩Nacos 发行包

Terminal window

  unzip nacos-server-$version.zip
  # 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

4.启动服务器

  • 注:Nacos的运行建议至少在2C4G 60G的机器配置下运行。

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

5.验证Nacos服务是否启动成功

进入${nacos.home}/logs/ 目录下, 使用tail -f start.out 查看日志,如果看到如下日志,说明服务启动成功。

Nacos started successfully in stand alone mode. use embedded storage

可以通过下列服务,快速检验Nacos的功能。

5.1. 服务注册

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

5.2. 服务发现

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

5.3. 发布配置

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

5.4. 获取配置

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

5.5. Nacos控制台页面

打开任意浏览器,输入地址:http://127.0.0.1:8848/nacos,即可进入Nacos控制台页面。

6.关闭服务器

6.1. Linux/Unix/Mac

sh shutdown.sh

6.2. Windows

shutdown.cmd

或者双击shutdown.cmd运行文件。

相关项目

注意事项

  1. 版本问题 客户端的版本要求和nacos 服务端版本一定要一致 我本地使用的版本如下
客户端服务端
0.2.12nacos-server-2.4.2
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>
 
  1. 端口问题 若nacos 部署到单独的服务器需要开启防火墙端口
    http 端口 8848 grpc 端口 9848 否则客户端会连接不上服务端报错 -401

下面的开启防火墙端口的命令


sudo ufw allow 8848
sudo ufw allow 9848
sudo ufw allow 9849
sudo ufw allow 7848

查看端口开放情况

root@hcss-ecs-c287:~# sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
20/tcp                     ALLOW       Anywhere
21/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
888/tcp                    ALLOW       Anywhere
14024/tcp                  ALLOW       Anywhere
39000:40000/tcp            ALLOW       Anywhere
8888                       ALLOW       Anywhere
8888/tcp                   ALLOW       Anywhere
9848                       ALLOW       Anywhere
20/tcp (v6)                ALLOW       Anywhere (v6)
21/tcp (v6)                ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
888/tcp (v6)               ALLOW       Anywhere (v6)
14024/tcp (v6)             ALLOW       Anywhere (v6)
39000:40000/tcp (v6)       ALLOW       Anywhere (v6)
8888 (v6)                  ALLOW       Anywhere (v6)
8888/tcp (v6)              ALLOW       Anywhere (v6)
9848 (v6)                  ALLOW       Anywhere (v6)

Nacos部署手册

Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。

以下文档中提及的VIP,网卡等所有网络相关概念均处于内部网络环境。

1. Nacos部署架构

Nacos2.X版本新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port,默认8848)基础上,进行一定偏移量自动生成,具体端口内容及偏移量请参考如下:

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等
7848-1000Jraft请求服务端端口,用于处理服务端间的Raft相关请求

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

对外暴露端口时,只需要暴露主端口(默认8848)和gRPC端口(默认9848),其他端口为服务端之间的通信端口,请勿暴露其他端口,同时建议所有端口均不暴露在公网下。

nacos2_port_exposure.png

客户端拥有相同的计算逻辑,用户如同1.X的使用方式,配置主端口(默认8848),通过相同的偏移量,计算对应gRPC端口(默认9848)。

因此如果客户端和服务端之前存在端口转发,或防火墙时,需要对端口转发配置和防火墙配置做相应的调整。

2. Nacos支持三种部署模式

  • 单机模式 - 又称单例模式,主要用于测试和单机试用。
  • 集群模式 - 主要用于生产环境,确保高可用。
  • 多集群模式(TODO) - 用于多数据中心场景。

Nacos部署模式图

2.1. 单机模式

单机模式又称单例模式, 拥有所有Nacos的功能及特性,具有极易部署、快速启动等优点。但无法与其他节点组成集群,无法在节点或网络故障时提供高可用能力。单机模式同样可以使用内置Derby数据库(默认)和外置数据库进行存储。

单机模式主要适合于工程师于本地搭建或于测试环境中搭建Nacos环境,主要用于开发调试及测试使用;也能够兼顾部分对稳定性和可用性要求不高的业务场景。

单机模式的部署参考文档: 单机模式部署

2.2. 集群模式

集群模式通过自研一致性协议Distro以及Raft协议,将多个Nacos节点构建成了高可用的Nacos集群。数据将在集群中各个节点进行同步,保证数据的一致性。集群模式具有高可用、高扩展、高并发等优点,确保在故障发生时不影响业务的运行。集群模式默认采用外置数据库进行存储,但也可以通过内置数据库进行存储。

该模式主要适合于生产环境,也是社区最为推荐的部署模式。

集群模式的部署参考文档: 集群模式部署

2.3. 多集群模式(TODO)

Nacos支持NameServer路由请求模式,通过它您可以设计一个有用的映射规则来控制请求转发到相应的集群,在映射规则中您可以按命名空间或租户等分片请求…

3. 多网卡IP选择

当本地环境比较复杂的时候,Nacos服务在启动的时候需要选择运行时使用的IP或者网卡。Nacos从多网卡获取IP参考Spring Cloud设计,通过nacos.inetutils参数,可以指定Nacos使用的网卡和IP地址。目前支持的配置参数有:

  • ip-address参数可以直接设置nacos的ip
nacos.inetutils.ip-address=10.11.105.155
  • use-only-site-local-interfaces参数可以让nacos使用局域网ip,这个在nacos部署的机器有多网卡时很有用,可以让nacos选择局域网网卡
nacos.inetutils.use-only-site-local-interfaces=true
  • ignored-interfaces支持网卡数组,可以让nacos忽略多个网卡
nacos.inetutils.ignored-interfaces[0]=eth0
nacos.inetutils.ignored-interfaces[1]=eth1
  • preferred-networks参数可以让nacos优先选择匹配的ip,支持正则匹配和前缀匹配
nacos.inetutils.preferred-networks[0]=30.5.124.
nacos.inetutils.preferred-networks[0]=30.5.124.(25[0-5]|2[0-4]\d|((1d{2})|([1-9]?\d))),30.5.124.(25[0-5]|2[0-4]\d|((1d{2})|([1-

4. SpringCloud Alibaba 集成Nacos 注册配置中心

  1. SpringCloud引用配置 父Pom配置


<properties>
    <java.version>8</java.version>
    <spring.cloud.version>3.1.1</spring.cloud.version>
    <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!--springcloud 初始化包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>
        <!--融合cloud 配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
        </dependency>

        <!--融合cloud 注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 实现模块配置
<!--融合cloud 启动-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

<!--融合cloud 注册中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 本地启动文件配置


spring.application.name=app
spring.profiles.active=dev
# ${prefix}-${spring.profiles.active}.${file-extension} = {spring.application.name}-{spring.profiles.active}.${file-extension}=app-dev.properties
#app-dev.properties
spring.cloud.nacos.config.server-addr=kunge2013.top:8848
#spring.cloud.nacos.config.server-addr=localhost:8848
# 配置文件前缀
spring.cloud.nacos.config.prefix=dev
# 命名空间
#spring.cloud.nacos.config.namespace=public
# 配置文件格式 properties 或者 yaml
spring.cloud.nacos.config.file-extension=properties
#spring.cloud.nacos.config.extension-configs[0].data-id=xxx2.properties
#spring.cloud.nacos.config.extension-configs[1].data-id=xxx2.properties
#spring.cloud.nacos.discovery.server-addr=kunge2013.top:8848

  1. nacos配置中心配置文件配置 {spring.application.name}-{spring.profiles.active}.spring.cloud.nacos.config.file-extension app-dev.properties;xxx1.properties;xxx2.properties

app-dev.properties 配置内容如下

# nacos 注册中心地址配置
spring.cloud.nacos.discovery.server-addr=kunge2013.top:8848
# 其他配置文件
testKey=12121211221
# 日志级别配置
logging.level.root=info
# 日志级别配置
logging.level.com.alibaba=debug