当前位置: 首页 > news >正文

Nacos 2.x 系列【20】集群部署

文章目录

    • 1. 前言
    • 2. 部署服务端
      • 2.1 准备工作
      • 2.2 集群节点配置
      • 2.3 鉴权配置
      • 2.4 配置数据源
      • 2.5 配置 IP
      • 2.6 配置端口
      • 2.7 启动集群
    • 3. 部署模式
      • 3.1 直连模式
      • 3.2 地址服务器模式
        • 3.2.1 地址服务器
        • 3.2.2 配置
      • 3.3 VIP 模式(推荐)
        • 3.3.1 Nginx
        • 3.3.1 域名

1. 前言

官方文档

在实际生产环境中,必须保证 Nacos 高可用,所以需要使用集群模式部署。

2. 部署服务端

2.1 准备工作

由于是演示,所以直接选择在本机进行集群部署,环境说明:

  • JDK 1.8+
  • Windows 10 企业版(生产环境推荐使用 Linux
  • Mysql 5.7(本地单机模式,生产环境推荐主从、集群)
  • 下载最新版的 Nacos (下载地址)

2.2 集群节点配置

解压安装包,将 /nacos/cluster.conf.example 集群配置文件重命名为 cluster.conf

在这里插入图片描述

cluster.conf 添加集群节点 IP3 个或 3 个以上 Nacos 节点才能构成集群,这里只是演示,所以在本地安装三个不同端口的节点:

#it is ip
#example
127.0.0.1:8848
127.0.0.1:8850
127.0.0.1:8852

2.3 鉴权配置

生产环境中,安全性也是很重要的,需要添加相关鉴权配置,参考Nacos 2.x 系列【5】开启鉴权文档,\nacos\conf\application.properties配置文件中添加鉴权:

### If turn on auth system:
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
# 实际使用时请务必更换为自定义的其他有效值
nacos.core.auth.server.identity.key=cluster
nacos.core.auth.server.identity.value=89012345678901234567890123456789
### worked when 
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 String):
# 实际使用时请务必更换为自定义的其他有效值
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

2.4 配置数据源

Nacos 集群模式和单机模式一样,默认也只支持Derby(内嵌数据库)、MySQL 数据库,生产环境建议使用 MySQL 或其他类型数据库,并搭建高可用。

参考 Nacos 2.x 系列【6】持久化 ,\nacos\conf\application.properties配置文件中添加数据源:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
# spring.datasource.platform=mysql
spring.sql.init.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/pearl_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

2.5 配置 IP

application.properties 配置节点 IP ,防止多网卡环境读取 IP 不正确问题:

### Specify local server's IP:
nacos.inetutils.ip-address=127.0.0.1

2.6 配置端口

服务端和客户端之间需要进行通信,集群节点之间也需要通信,会涉及到一些通信端口,需要确保这些端口未被占用,并在防火墙中放行。

涉及的端口:

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

由于是本机环境安装集群,所以将上面修改过配置的安装包,复制为三份:

在这里插入图片描述

修改 nacos-8850 启动端口:

### Default web server port:
server.port=8850

修改 nacos-8852 启动端口:

### Default web server port:
server.port=8852

注意:集群节点需要确保 cluster.conf 、数据库配置是一样的

2.7 启动集群

点击启动脚本 startup.cmd ,查看启动控制台:

在这里插入图片描述
访问任意一个节点控制台,可以查看到使用的是集群模式,在节点列表可以查看到节点信息:

在这里插入图片描述

3. 部署模式

Nacos 常用的部署模式有以下几种:

  • 直连:直接连真实 IP
  • 地址服务器:查询地址进行连接
  • VIP 模式:使用虚拟IP

3.1 直连模式

直连模式中,客户端直接连接所有集群节点,是最简单的模式:

在这里插入图片描述

Spring Cloud 客户端中,spring.cloud.nacos.discovery.server-addr 配置所有集群节点:

spring:application:name: order-democloud:nacos:# 服务端用户名密码username: nacospassword: nacos# 服务发现discovery:# 命名空间namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec# 服务端地址,默认:127.0.0.1:8848server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852# 配置中心config:namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ecserver-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852

这种方式,简单却不够灵活,一旦 IP 发生变化,需要修改配置重启应用,生产环境不推荐。

3.2 地址服务器模式

地址服务器即查询地址的服务器,发送一个请求,返回一串地址列表。在阿里内部比较普及,也是阿里中间件使用最广的一种寻址模式。

在这里插入图片描述
地址服务器模式,只需要配置一个地址即可,该地址可以使用 DNS 域名,而且可以轮询感知地址的变化。相较于直连模式来说,可靠性、可伸缩性更好,如果生产环境有地址服务器,可以选择该模式。

3.2.1 地址服务器

com.alibaba.nacos.client.naming.core.ServerListManager 服务列表管理器类中,可以看到在初始化服务器地址列表时,会优先根据 endpoint 参数查询从地址服务器查询地址列表,并开启线程轮询查询最新的地址并更新:

    private void initServerAddr(NacosClientProperties properties) {// 获取 endpoint 参数this.endpoint = InitUtils.initEndpoint(properties);// endpoint 不为空if (StringUtils.isNotEmpty(this.endpoint)) {// this.serversFromEndpoint = this.getServerListFromEndpoint();// 多线程轮询感知地址变化,及时更新地址列表this.refreshServerListExecutor = new ScheduledThreadPoolExecutor(1, new NameThreadFactory("com.alibaba.nacos.client.naming.server.list.refresher"));this.refreshServerListExecutor.scheduleWithFixedDelay(this::refreshServerListIfNeed, 0L, this.refreshServerListInternal, TimeUnit.MILLISECONDS);} else {// endpoint 为空, serverAddr 参数获取服务器地址列表,多个使用逗号分割String serverListFromProps = properties.getProperty("serverAddr");if (StringUtils.isNotEmpty(serverListFromProps)) {this.serverList.addAll(Arrays.asList(serverListFromProps.split(",")));if (this.serverList.size() == 1) {this.nacosDomain = serverListFromProps;}}}}

getServerListFromEndpoint 获取服务器地址列表方法:

在这里插入图片描述
endpoint 参数只需要配置 IP 和端口即可,请求接口的固定格式为:

String urlString = "http://" + this.endpoint + "/nacos/serverlist";

这里直接创建一个 Spring Boot 工程,添加一个访问接口(请求路径必须为/nacos/serverlist),直接返回多个集群节点地址:

@Controller
public class AddressController {@RequestMapping("/nacos/serverlist")public ResponseEntity<String> serverlist() {return ResponseEntity.ok().header("Content-Type", "text/plain").body("127.0.0.1:8848\r\n" +"127.0.0.1:8850\r\n" +"127.0.0.1:8852\r\n");}
}
3.2.2 配置

spring.cloud.nacos.discovery.endpoint 参数用于配置地址服务器,示例:

spring:cloud:nacos:# 服务端用户名密码username: nacospassword: nacos# 服务发现discovery:# 命名空间namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ecendpoint: 127.0.0.1:8080# 配置中心config:namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ecendpoint: 127.0.0.1:8080

3.3 VIP 模式(推荐)

VIPVirtual IP ,虚拟 IP作为客户端请求的目标 IP 地址。该模式下帮助 Nacos Client 屏蔽了后端真实 IP ,主需要关注 VIP 即可, VIP 很少会发生变化,扩容时,只需要让 VIP 感知到即可。

Nacos 官网也推荐将所有服务列表放到一个 VIP 下面,然后挂到一个域名下:
在这里插入图片描述
VIP 模式又可以分为以下两种:

  • SLB(负载均衡)模式:使用内网SLB(不可暴露到公网,以免带来安全风险),下面挂真实的集群节点IP,客户端直连SLB即可,地址为SLBIP:port
  • 域名 + SLB模式(推荐):使用内网SLB,并将其 IP 映射为域名,客户端直连域名即可,地址为nacos.com:port,可读性好,而且换IP方便
3.3.1 Nginx

SLB 这里使用开源的 Nginx ,在官网下载解压,nginx.conf 中使用 upstream 配置节点地址:

	# Nacos 集群节点upstream nacos {server 127.0.0.1:8848;server 127.0.0.1:8850;server 127.0.0.1:8850;}

location 中配置转发:

		location / {proxy_pass http://nacos;}

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

3.3.1 域名

这里直接在 hosts 中配置一个本机域名:

127.0.0.1 nacos.com

启动 Nginx 访问http://nacos.com/nacos/

在这里插入图片描述
客户端服务地址直接填写域名即可:

spring:cloud:nacos:# 服务端用户名密码username: nacospassword: nacos# 服务发现discovery:# 命名空间namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec# 服务端地址,默认:127.0.0.1:8848server-addr: nacos.com# 配置中心config:namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ecserver-addr: nacos.com

相关文章:

Nacos 2.x 系列【20】集群部署

文章目录 1. 前言2. 部署服务端2.1 准备工作2.2 集群节点配置2.3 鉴权配置2.4 配置数据源2.5 配置 IP2.6 配置端口2.7 启动集群 3. 部署模式3.1 直连模式3.2 地址服务器模式3.2.1 地址服务器3.2.2 配置 3.3 VIP 模式&#xff08;推荐&#xff09;3.3.1 Nginx3.3.1 域名 1. 前言…...

LeetCode刷题记录:(15)三角形最小路径和

知识点&#xff1a;倒叙的动态规划 题目传送 解法一&#xff1a;二维动态规划【容易理解】 class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();if (n 1) {return triangle.get(0).get(0);}// dp[i][j]:走到第i层第…...

【大数据面试题】35 Spark 怎么做优化?

一步一个脚印,一天一道大数据面试题 博主希望能够得到大家的点赞收,藏支持!非常感谢~ 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! Spark 如何做优化一直是面试过程中常问的问题。那么这次也仅以此篇文章总结梳理,希望对大家有帮助。 通用优化 Spark 一般遇…...

2024年保安员职业资格考试题库大数据揭秘,冲刺高分!

186.安全技术防范是一种由探测、&#xff08;&#xff09;、快速反应相结合的安全防范体系。 A.保安 B.出警 C.延迟 D.监控 答案&#xff1a;C 187.安全技术防范是以&#xff08;&#xff09;和预防犯罪为目的的一项社会公共安全业务。 A.预防灾害 B.预防损失 C.预防失…...

怎么搭建个人博客教程,附云主机选购指南

一、搭建个人博客教程 1. 规划博客内容与技术栈 确定博客主题&#xff1a;首先明确博客的定位和主题&#xff0c;这将影响后续的技术选择和内容规划。选择技术栈&#xff1a;根据个人偏好和技术背景&#xff0c;选择合适的建站技术。例如&#xff0c;可以使用WordPress&#…...

使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程

目前市面上有不少基于大模型的 Code Copilot 产品&#xff0c;部分产品对于个人开发者来说可免费使用&#xff0c;比如阿里的通义灵码、百度的文心快码等。这些免费的产品均通过 API 的方式提供服务&#xff0c;因此调用时均必须联网、同时需要把代码、提示词等内容作为 API 的…...

C语言_结构体初阶(还未写完)

结构体的声明 1. 什么是结构&#xff1f;结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组&#xff1a;一组相同类型元素的集合 结构体&#xff1a;一组不一定相同类型元素的集 2. 结构的声明 struct tag //tag根据实际情况给名字…...

MyBatis-Plus:快速入门

1. 概念 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。其突出的特性如下&#xff1a; * **无侵入**&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有…...

【高级篇】第9章 Elasticsearch 监控与故障排查

9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…...

【前端】上传和下载zip文件,有进度条(el-progess)

文章目录 上传下载进度条 场景&#xff1a;要上传一个zip&#xff0c;调用接口&#xff0c;然后下载一个zip。调用接口的接口响应要显示在进度条中。 上传 上传用的是input原生控件&#xff0c;在页面中隐藏。accept"application/zip"限制只能上传zip。 点击button…...

2024年软件测试面试题,精选100+,附答案+文档

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我…...

在vue项目的.gitignore文件忽略不想要提交到git仓库的文件

在Vue项目中&#xff0c;使用.gitignore文件来忽略不需要提交到Git仓库的文件是一个常见的做法。.gitignore文件包含了一系列的规则&#xff0c;这些规则告诉Git哪些文件或目录应该被忽略。以下是一些Vue项目中常用的.gitignore文件示例和具体规则说明&#xff1a; 示例 .gitig…...

时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database

AbutionGraph是一款端到端的流式数据实时分析的图谱数据库&#xff0c;实时&#xff08;流式写入实时、高QPS决策分析实时、流式预处理实时&#xff09;表现在&#xff1a; 构建实时查询QPS响应时长与历史数据量无关的图模型&#xff1b;接入流式数据并实时更新图计算指标&…...

windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK

文章目录 Loki下载Loki下载安装Loki添加Loki数据源springboot日志推送 Loki下载 下载地址&#xff1a;https://github.com/grafana/loki/releases/ 找到loki-windows-amd64.exe.zip点击开始下载&#xff0c;我这里下载的2.9.9版本 Loki下载 下载地址&#xff1a;https://gr…...

跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle

The side-effects of the TikTok tussle tussle&#xff1a;美 [ˈtəsəl] 激烈扭打&#xff1b;争夺 注意发音 side-effects&#xff1a;副作用&#xff1b;&#xff08;side-effect的复数&#xff09; As the app’s future hangs in the balance, the ramifications of …...

Ubuntu安装PostgreSQL

Ubuntu(在线版) 更新软件源 sudo apt-get update 添加PostgreSQL官方数字签名 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo "deb http://apt.postgresql.org/pub/repos/a…...

【HarmonyOS NEXT】鸿蒙如何让List组件不满一屏时,还要能滑动和回弹

当List组件不满一屏时&#xff0c;还要能滑动和回弹,就向系统设置 - 移动网络 页面一样 List设置如下属性&#xff1a; .edgeEffect(EdgeEffect.Spring, {alwaysEnabled: true}) edgeEffect edgeEffect(value: EdgeEffect, options?: EdgeEffectOptions) 设置边缘滑动效果。…...

JDK-SPI-服务提供者接口

归档 GitHub: JDK-SPI-服务提供者接口 SPI 源码说明 java.util.ServiceLoader /*** 服务加载器&#xff1a;给定接口&#xff0c;查找实现类。实现可迭代接口 */ public final class ServiceLoader<S> implements Iterable<S> {/*** 返回 ServiceLoader 实例 *…...

【docker】容器内配置环境变量

背景&#xff1a; 我要把下面的环境变量写到bash脚本里&#xff0c;起名叫environment_start.sh。 目的&#xff1a; 用于每次进入容器dev_into.sh的时候&#xff0c;让系统获取到环境变量。 操作步骤&#xff1a; 先在容器外找个合适的位置写环境变量bash脚本&#xff0c…...

Java 乐观锁与悲观锁

1. 前言 本节内容主要是对 Java 乐观锁与悲观锁进行更加深入的讲解,本节内容更加偏重于对乐观锁的讲解,因为 synchronized 悲观锁对于大部分学习者并不陌生,本节主要内容如下: 乐观锁与悲观锁的概念,之前有所讲解,这里用很小的篇幅进行知识的回顾,巩固;乐观锁与悲观锁…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...