Nacos 安装部署

文章目录

    • 简介
    • 下载和基本配置sql信息
    • 启动-单机部署
    • 集群部署
      • 在一台机器上跑三个节点
      • 启动和关闭
    • 浏览器控制台
    • 运维
      • 负载均衡
      • 密码修改
    • 配置中心:命名空间Namespace和分组
      • 业务隔离-Group分组:
      • Data ID 的命名格式
      • springcloud.nacos配置

简介

Nacos 支持如下核心特性:

1)服务发现: 支持 DNS 与 RPC 服务发现,也提供原生 SDK 、OpenAPI 等多种服务注册方式和 DNS、HTTP 与 API 等多种服务发现方式。
2)动态配置服务: Nacos 提供配置统一管理功能,能够帮助我们将配置以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
3)服务健康监测: Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
4)动态 DNS 服务: Nacos 支持动态 DNS 服务权重路由,能够让我们很容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
5)服务及其元数据管理: Nacos 支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据

常见的注册-配置中心

活跃情况 配置 注册
Eureka 原生,2.0遇到瓶颈,停止维护 X O
Spring Cloud Confifig 只支持git基础上的配置 O X
Zookeeper 专业的独立产品。例如:dubbo O O
Consul 原生,GO语言开发 X O
Nacos 国内比较活跃,已经取代Eureka和Confifig O O
Apollo 在Nacos之前动态配置最活跃和完善的组件 O O

从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,
Spring Cloud Confifig依赖Git场景不适合开 放的大规模自动化运维API,而Spring Cloud Confifig不带运维管理界面,需要自行开发
功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比 Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作

在K8S中服务注册功能已经不再依赖于Nacos等注册服务,以上组件只剩下配置中心的作用,服务发现和心跳检测已经完全由K8S承担。

下载和基本配置sql信息

从nacos官网 https://nacos.io/zh-cn/index.html 下载安装包
1.创建数据库nacos,并设置字符集utf8
2.执行/nacos/conf/nacos-mysql.sql中的语句,创建表,并插入数据
3.修改/nacos/conf/application.properties文件,如下

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

启动-单机部署

centos

cd  /nacos/bin
sh startup.sh -m standalone

windows

cd  /nacos/bin
startup -m standalone

如果直接双击,非如上命令模式启动,会报如下异常
nacos Caused by: java.net.UnknownHostException: jmenv.tbsite.net

集群部署

cp conf/cluster.conf.example conf/cluster.conf

需要配置3个或3个以上节点,生产环境建议分布在多台服务器上,目前咱们仅在一台机器上测试。

vi conf/cluster.conf

127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

在一台机器上跑三个节点

因此启动脚本和关闭脚本需要做一点修改

cp bin/startup.sh bin/startup-port.sh

vi bin/startup-port.sh

## 修改sh脚本
export MODE="cluster"
export FUNCTION_MODE="all"
export SERVER_PORT="8848"
while getopts ":m:f:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        p)
            SERVER_PORT=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done
JAVA_OPT="${JAVA_OPT} -Dserver.port=${SERVER_PORT}"

修改关闭服务脚本

cp bin/shutdown.sh bin/shutdown-port.sh
vi bin/shutdown-port.sh

PORT=$1
if [ ! $PORT ]; then
  echo "please select stop port!" >&2
  exit 1
fi
 
pid=`ps ax | grep -i 'nacos.nacos' |grep java |grep ${PORT} | grep -v grep | awk '{print $1}'`

启动和关闭

默认方式启动是集群模式

sh bin/startup-port.sh ##默认集群模式
sh bin/startup.sh -m standalone #单机模式

单机多节点下-启动方式如下:

sh bin/startup-port.sh -p 8848 

单机多节点下-关闭方式如下:

sh bin/shutdown-port.sh 8848

浏览器控制台

启动后就可以在浏览器打开 http://127.0.0.1:8848/nacos/
即可看到控制台,默认用户名/密码为nacos/nacos。

运维

负载均衡

附1: 可通过Nginx配置只访问一个地址负载均衡到三个节点上:

upstream nacos-cluster{
    server 127.0.0.1:8848;
    server 127.0.0.1:8849;
    server 127.0.0.1:8850;
}

密码修改

附:集群模式下控制台的用户名密码都存在了数据库的users表,用户名直接修改就行,密码需要用org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder加密

配置中心:命名空间Namespace和分组

Nacos 安装部署_第1张图片
Nacos 引入命名空间 Namespace 的概念来进行多环境配置和服务的管理及隔离。例如,你可能存在本地开发环境dev、测试环境test、生产环境prod 三个不同的环境,那么可以创建三个不同的 Namespace 区分不同的环境

Nacos 安装部署_第2张图片

# 对应创建的命名空间的ID,此处对应的是dev命名空间
spring.cloud.nacos.config.namespace=483bb765-a42d-4112-90bc-50b8dff768b3

业务隔离-Group分组:

Group 也可以实现环境隔离的功能,但 Group 设计的目的主要是做同一个环境中的不同服务分组,把不同的微服务的配置文件划分到同一个分组里面去,Nacos 如果不指定 Group,则默认的分组是 DEFAULT_GROUP。

如果没有 Group,试想一下这个场景:
在DEV环境中有两个微服务,一个是订单系统,一个是用户系统,但是他们有着相同Msql依赖但是使用不同的数据库地址的配置,比如 datasource-url,那么如何区分呢?
这时候 Group 就派上用场了。上述场景中订单系统、用户系统可以单独分为一个组,比如 ORDER_GROUP、USER_GROUP,当然这是比较细粒度的分组,根据企业的业务也可以多个微服务分为一组。

没个不同服务配置不同的分组

spring.cloud.nacos.config.group=ORDER_GROUP

Data ID 的命名格式

新建一个 DataID 为 cloud-producer-server-dev.yaml 的数据集
那么 Data ID 怎么取值呢?格式通俗一点就是 “前缀-环境-扩展名”,如下所示:

${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

在项目中一般也由这些配置来动态确定唯一的配置文件

prefix:前缀,默认是 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。

# 若不指定,默认采用应用名的方案
spring.application.name=cloud-producer-server
 
# 手动指定配置的dataID前缀标识
# spring.cloud.nacos.config.prefix=cloud-producer-server-config

active:配置运行环境,即为当前环境对应的 profile。
注意:当 spring.profiles.active 为空时,对应的连接符 ”-“ 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}

# dev表示开发环境
spring.profiles.active=dev

file-exetension:配置文件的类型,默认是 properties,也可以通过配置项 spring.cloud.nacos.config.file-extension 来配置,目前支持的类型有 TEXT、JSON、XML、YAML、HTML、Properties

# 指定配置文件类型为yaml文件
spring.cloud.nacos.config.file-extension=yaml

springcloud.nacos配置

spring:
  profiles:
    active: test
  application:
    name: @project.name@
  cloud:
    nacos:
    #nacos服务地址
      addr: @nacos.url@
      discovery:
        server-addr: ${spring.cloud.nacos.addr} #和nacos的地址一样
        namespace: ${nacos.group.id}
        group: DEFAULT_GROUP
        service: ${project.name}${_use-local:}
      config:
        prefix: ${project.name}
        namespace: ${nacos.group.id}
        group: DEFAULT_GROUP
        server-addr: ${spring.cloud.nacos.addr}
        file-extension: yaml
        enabled: true
        #配置多个配置文件可以使用[0],[1]
        shared-configs[0]:
          data-id: redis.yml  #共用配置
          # 默认为DEFAULT_GROUP
          group: PUBLIC
          ## 是否动态刷新,默认为false
          refresh: true
        shared-configs[1]:
          data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
          # 默认为DEFAULT_GROUP
          group: DEFAULT_GROUP
          ## 是否动态刷新,默认为false
          refresh: true

你可能感兴趣的:(spring-cloud,nacos)