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
添加集群节点 IP
,3
个或 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 端口 | |
9848 | 1000 | 客户端 gRPC 请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端 gRPC 请求服务端端口,用于服务间同步等 |
7848 | -1000 | Jraft 请求服务端端口,用于处理服务端间的 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 模式(推荐)
VIP
即 Virtual IP
,虚拟 IP
作为客户端请求的目标 IP
地址。该模式下帮助 Nacos Client
屏蔽了后端真实 IP
,主需要关注 VIP
即可, VIP
很少会发生变化,扩容时,只需要让 VIP
感知到即可。
Nacos
官网也推荐将所有服务列表放到一个 VIP
下面,然后挂到一个域名下:
VIP
模式又可以分为以下两种:
SLB
(负载均衡)模式:使用内网SLB
(不可暴露到公网,以免带来安全风险),下面挂真实的集群节点IP
,客户端直连SLB
即可,地址为SLB
的IP
: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 模式(推荐)3.3.1 Nginx3.3.1 域名 1. 前言…...

LeetCode刷题记录:(15)三角形最小路径和
知识点:倒叙的动态规划 题目传送 解法一:二维动态规划【容易理解】 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.安全技术防范是一种由探测、()、快速反应相结合的安全防范体系。 A.保安 B.出警 C.延迟 D.监控 答案:C 187.安全技术防范是以()和预防犯罪为目的的一项社会公共安全业务。 A.预防灾害 B.预防损失 C.预防失…...

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

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

C语言_结构体初阶(还未写完)
结构体的声明 1. 什么是结构?结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组:一组相同类型元素的集合 结构体:一组不一定相同类型元素的集 2. 结构的声明 struct tag //tag根据实际情况给名字…...

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

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

【前端】上传和下载zip文件,有进度条(el-progess)
文章目录 上传下载进度条 场景:要上传一个zip,调用接口,然后下载一个zip。调用接口的接口响应要显示在进度条中。 上传 上传用的是input原生控件,在页面中隐藏。accept"application/zip"限制只能上传zip。 点击button…...

2024年软件测试面试题,精选100+,附答案+文档
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我…...

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

时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database
AbutionGraph是一款端到端的流式数据实时分析的图谱数据库,实时(流式写入实时、高QPS决策分析实时、流式预处理实时)表现在: 构建实时查询QPS响应时长与历史数据量无关的图模型;接入流式数据并实时更新图计算指标&…...

windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK
文章目录 Loki下载Loki下载安装Loki添加Loki数据源springboot日志推送 Loki下载 下载地址:https://github.com/grafana/loki/releases/ 找到loki-windows-amd64.exe.zip点击开始下载,我这里下载的2.9.9版本 Loki下载 下载地址:https://gr…...

跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle
The side-effects of the TikTok tussle tussle:美 [ˈtəsəl] 激烈扭打;争夺 注意发音 side-effects:副作用;(side-effect的复数) 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组件不满一屏时,还要能滑动和回弹,就向系统设置 - 移动网络 页面一样 List设置如下属性: .edgeEffect(EdgeEffect.Spring, {alwaysEnabled: true}) edgeEffect edgeEffect(value: EdgeEffect, options?: EdgeEffectOptions) 设置边缘滑动效果。…...

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

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

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

python学习2-数据结构与算法-链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指…...

项目一 nfs 共享服务器 Haproxy 代理 Keepalive 高可用集群
深入理解程序的数据存储 配置NFS服务器 配置ansible环境...

TCP粘包解决方法
一. 产生原因及解决方法 产生原因:TCP是面向连接、基于字节流的协议,其无边界标记。当服务端处理速度比不其接收速度时,就很容易产生粘包现象。 解决方法:目前主要有两种解决方法,一个是在内容中添加分割标识…...

高职人工智能专业实训课之“生成对抗网络(GAN)”
一、前言 生成对抗网络(GAN)作为人工智能领域的一项重要技术,已经在图像生成、风格迁移、数据增强等多个领域展现出巨大的潜力和应用价值。为了满足高职院校对GAN专业实训课程的需求,唯众人工智能教学实训凭借其前沿的教育技术平…...

【MySQL系列】隐式转换
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

亿发:信息化建设or面子工程?究竟什么才是真正的信息化解决方案
在现代企业的竞争中,信息化建设扮演着越来越重要的角色。信息化技术不仅是企业提升管理效率、优化运营模式的利器,更是企业在市场竞争中脱颖而出的关键。然而,许多企业在推进信息化的过程中,往往容易陷入“面子工程”的误区。那么…...

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...

树形结构C语言的实现
一.什么是树: 树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一棵树可以简单的表示为根,左子树,右子树。左子树…...

小程序渗透测试的两种方法——burpsuite、yakit
首先呢主要是配置proxifier,找到小程序的流量,然后使用burpsuite或者yakit去抓包。 一、使用burpsuiteproxifier的抓包测试 1、先配置proxifier,开启http流量转发 勾选确定 2、配置burp对应代理端口,选择profile,点…...

代码随想录训练营Day56
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、搜索插入位置二、在排序数组中查找元素的第一个和最后一个位置 前言 提示:这里可以添加本文要记录的大概内容: 今天是跟着代码随想…...