服务器Nacos集群搭建及使用总结


title: 服务器Nacos集群搭建及使用总结
date: 2022-02-07 23:46:19
tags:

  • 服务器
  • Nacos
    categories:
  • 服务器
    cover: https://cover.png
    feature: false

1. 架构图

在这里插入图片描述
实际使用:
在这里插入图片描述

2. 下载

官网地址:home (nacos.io)

GitHub 下载地址:Releases · alibaba/nacos (github.com)

选择对应版本进行下载,下载有可能会很慢

在这里插入图片描述

3. 单机模式

1、下载完成后上传到服务器

在这里插入图片描述

2、解压文件

tar -zxvf nacos-server-2.2.0.tar.gz

在这里插入图片描述

3、重命名一下文件(非必要)

mv nacos nacos-2.2.0

在这里插入图片描述

4、进入 Nacos 的 conf 目录下,在 Nacos 配置文件 application.properties 里设置端口为 3333(默认为 8848),并且设置 MySQL 连接属性进行持久化配置,这里的 nacos_config 数据库使用 Nacos 自带的 mysql-schema.sql 数据库脚本构建

在这里插入图片描述

server.port=3333

###########################################################
spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=xxx

5、进入 Nacos 的 bin 目录下,直接执行如下命令即可启动

sh startup.sh -m standalone
或者 ./startup.sh -m standalone

由于 Nacos 默认模式为 cluster,即集群模式,需设置启动参数 -m standalone 为单机模式,也可在 application.properties 配置文件里修改默认模式为单机模式,则可直接通过 ./startup.sh 启动单机模式

在这里插入图片描述

在这里插入图片描述

4. 集群模式

4.1 配置 Nacos

前 4 步与单机版同

5、复制 cluster.conf.example 文件为 cluster.conf

cp cluster.conf.example cluster.conf

6、在集群配置文件 cluster.conf 里配置集群节点,IP:Port,IP 为服务器 IP 地址,端口为 Nacos 的端口,即 application.properties 配置文件里的 server.port=3333,包括其他集群节点的端口,同时在服务器防火墙中开放需要访问的端口 3333、4444、5555

10.0.4.9:3333
10.0.4.9:4444
10.0.4.9:5555

7、以集群模式启动,./startup.sh

在这里插入图片描述

可以看到 3333 的节点已经启动

在这里插入图片描述

8、如法炮制,再复制两份 Nacos,在 application.properties 配置文件里分别设置端口为 4444、5555,这样就有了三个 Nacos 文件,端口分别为 3333、4444、5555,并且在 cluster.conf 配置文件里都配置了这三个节点

9、分别启动三个 Nacos,假如服务器内存不够,会出现只能启动一两个,三个服务不能全部启动的情况,或者启动另一个之后,之前启动的服务关闭,可以修改 startup.sh 文件的启动参数数值大小,改小一点

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

在这里插入图片描述

4.2 配置 Nginx

1、进入 Nginx 的 conf 目录下修改配置文件 nginx.conf

# 代理转发地址
upstream cluster{
        server 124.222.xxx.90:3333;
        server 124.222.xxx.90:4444;
        server 124.222.xxx.90:5555;
}

server {
        listen       1111; # 监听端口
        server_name  124.222.xxx.90; # 访问地址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://cluster;
        }
}

2、在服务器的防火墙里开放监听端口,即 1111

3、进入 Nginx 的 sbin 目录下,执行命令启动 Nginx

./nginx
或指定配置文件启动:./nginx -c /usr/nginx/conf/nginx.conf

假如 Nginx 已启动,则执行

./nginx -s reload

重新加载 Nginx 即可

4、访问 124.222.xxx.90:1111/nacos,其实就是转发到访问 124.222.xxx.90:3333/nacos 或 124.222.xxx.90:4444/nacos 或 124.222.xxx.90:5555/nacos

5、查看 Nacos 的启动情况,在集群节点里可以看到三个节点全是 UP 的状态,由于服务器内存原因,这里只启动了两个,内存不够了
在这里插入图片描述

5. 微服务注册进 Nacos

5.1 引入依赖

这里用的是 Spring Cloud,假如只使用 Spring Boot 参考官网的 Spring Boot 快速开始:Nacos Spring Boot 快速开始

按照对应关系来选择对应的版本,这里使用的版本是 Spring Boot 2.7.7、Spring Cloud Alibaba 2021.0.4.0、Spring Cloud 2021.0.4

在这里插入图片描述

<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-web</artifactId>
</dependency>

5.2 修改配置文件

spring:
  application:
    name: discovery-config
  cloud:
    nacos:
      discovery:
        server-addr: 124.222.xxx.90:3333

5.3 添加注解

在启动类上添加 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能

@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

5.4 注意

Nacos2.0 版本相比 1.X 新增了 GRPC 的通信方式,Nacos 2.0 的 GRPC 端口都是通过主端口的偏移量产生,GRPC 端口 = Nacos 主端口 + 1000,因此还要额外开放 主端口 + 1000 的端口,如主端口为 3333,则还需开放端口 4333,这里为客户端 GRPC 请求服务端端口。假如服务端 GRPC 请求服务端接口,还需开放偏移量为 1001 的端口,即 4334

否则会报 com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING 异常

5.5 启动

启动主启动类后,即可在 Nacos 管理页面看到服务已经被注册了进来

在这里插入图片描述

6. Nacos 作为配置中心

在上面注册中心的基础上

6.1 引入依赖

由于在 SpringCloud 2020.* 版本把 bootstrap 禁用了,导致在读取文件的时候读取不到报错 No spring.config.import property has been defined,所以要重新引入 bootstrap 依赖

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

6.2 配置

这里需要两个配置文件 bootstrap.yml 和 application.yml,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。而 SpringBoot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application

1、bootstrap.yml

server:
  port: 9001

spring:
  application:
    name: discovery-config
  cloud:
    nacos:
      discovery:
        server-addr: 124.222.xxx.90:3333
      config:
        server-addr: 124.222.xxx.90:3333
        file-extension: yaml # 指定 yaml 格式的配置

2、application.yml

 spring:
  profiles:
    active: dev # 表示开发环境

6.3 ConfigController

通过 SpringCloud 原生注解 @RefreshScope 实现配置的自动更新

@RestController
@RefreshScope
public class ConfigController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

6.4 持久化配置

在 Nacos 的配置列表里新建一个配置,这里的 Data ID,计算公式为:

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

在这里插入图片描述

在这里插入图片描述

在前面已经配置好了持久化配置属性,配置信息会保存到数据库中
在这里插入图片描述

6.5 查看配置

启动服务,访问 http://localhost:9001/config/info,即可读取到配置中心的配置信息

在这里插入图片描述

更新一下配置信息

在这里插入图片描述

可以发现读取的配置信息也随之动态刷新

在这里插入图片描述

6.6 加载方案

6.61 Data ID 方案

默认空间 + 默认分组 + Data ID,主要通过不同的 Data ID 来进行区分,即上面的配置

在这里插入图片描述

6.6.2 Group 方案

通过 Group 实现环境区分

1、新建 Group

在这里插入图片描述

在这里插入图片描述

2、增加 group 配置

bootstrap.yml

server:
  port: 9001

spring:
  application:
    name: discovery-config
  cloud:
    nacos:
      discovery:
        server-addr: 124.222.xxx.90:3333
      config:
        server-addr: 124.222.xxx.90:3333
        file-extension: yaml
        group: DEV_GROUP

application.yml

spring:
  profiles:
    # active: dev # 表示开发环境
    active: info # 表示开发环境

6.6.3 Namespace 方案

1、新建命名空间

在这里插入图片描述

在这里插入图片描述

2、选择该命名空间进行配置管理

在这里插入图片描述

3、配置命名空间

bootstrap.yml

server:
  port: 9001

spring:
  application:
    name: discovery-config
  cloud:
    nacos:
      discovery:
        server-addr: 124.222.118.90:8848
      config:
        server-addr: 124.222.118.90:8848
        file-extension: yaml
        namespace: a404abf6-f7ca-40f5-a106-2a892793fb48
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Nacos 是一个支持动态配置和服务发现的云原生注册中心。当您以集群方式启动 Nacos 时,端口 8848 用于通信和管理 Nacos 集群。另一个端口 8847 则用于与 Nacos 集群的客户端进行通信,比如服务消费者和服务提供者。客户端可以通过这个端口与 Nacos 集群进行交互,以获取服务注册信息和动态配置信息。 ### 回答2: 在Nacos集群方式启动时,端口8848是用于Nacos的主要通信端口,它用于提供对外部客户端的服务注册和发现功能。而端口8847则用于Nacos的通信和同步。 具体来说,8848端口是Nacos服务器接收客户端请求的HTTP通信端口,客户端可以通过该端口向Nacos注册服务、订阅服务,以及查询服务的相关信息。也就是说,通过8848端口,Nacos提供了服务注册与发现的核心功能。 而8847端口用于Nacos集群节点之间的通信和同步,用于实现集群中的各个节点之间的数据同步与复制。当Nacos集群启动时,各个节点之间会通过8847端口进行数据同步,以保证集群中的数据一致性和高可用性。例如,当一个节点接收到客户端的注册请求时,它会将该请求的数据同步给其他节点,以便让整个集群都能感知到服务的注册信息。 因此,Nacos集群方式启动时,同时使用了8848端口和8847端口。8848端口用于对外提供服务注册和发现功能,8847端口用于集群节点之间的数据同步与复制。这两个端口的协同工作,保证了Nacos的高可用性和可扩展性。 ### 回答3: 在Nacos集群中,当以8848端口启动集群时,8847端口用于集群节点之间进行内部通信和数据同步。 Nacos是一个分布式的配置中心和服务发现工具,在集群中可以有多个Nacos节点组成一个集群。8848端口是Nacos的默认管理端口,用于外部客户端与Nacos进行交互,比如通过HTTP请求进行服务注册、发现以及配置读写等操作。通过8848端口,我们可以使用Nacos的控制台进行服务的注册和管理。 而8847端口则是集群内部用于节点之间的通信端口。当有多个Nacos节点组成集群时,它们需要进行数据同步、保持一致性和节点间的通信。8847端口就是为了实现这种内部通信而设立的。 在Nacos集群中,节点之间会相互同步各自的注册信息、配置信息等数据,保证集群的高可用性和一致性。8847端口的使用,使得集群节点之间可以通过内部通信来实现数据的同步。当一个节点发生变化时,比如有新的服务注册或者配置更新,它会通过8847端口将这些变化发送给其他节点,从而实现数据的同步更新。 因此,8847端口在Nacos集群中起着非常重要的作用,确保了集群的正常运行和数据的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fan 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值