当前位置: 首页 > 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
http://www.lryc.cn/news/392173.html

相关文章:

  • LeetCode刷题记录:(15)三角形最小路径和
  • 【大数据面试题】35 Spark 怎么做优化?
  • 2024年保安员职业资格考试题库大数据揭秘,冲刺高分!
  • 怎么搭建个人博客教程,附云主机选购指南
  • 使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程
  • C语言_结构体初阶(还未写完)
  • MyBatis-Plus:快速入门
  • 【高级篇】第9章 Elasticsearch 监控与故障排查
  • 【前端】上传和下载zip文件,有进度条(el-progess)
  • 2024年软件测试面试题,精选100+,附答案+文档
  • 在vue项目的.gitignore文件忽略不想要提交到git仓库的文件
  • 时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database
  • windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK
  • 跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle
  • Ubuntu安装PostgreSQL
  • 【HarmonyOS NEXT】鸿蒙如何让List组件不满一屏时,还要能滑动和回弹
  • JDK-SPI-服务提供者接口
  • 【docker】容器内配置环境变量
  • Java 乐观锁与悲观锁
  • python学习2-数据结构与算法-链表
  • 项目一 nfs 共享服务器 Haproxy 代理 Keepalive 高可用集群
  • TCP粘包解决方法
  • 高职人工智能专业实训课之“生成对抗网络(GAN)”
  • 【MySQL系列】隐式转换
  • 亿发:信息化建设or面子工程?究竟什么才是真正的信息化解决方案
  • 【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)
  • 树形结构C语言的实现
  • 小程序渗透测试的两种方法——burpsuite、yakit
  • 代码随想录训练营Day56
  • S32K3 工具篇4:如何在S32DS中使用lauterbach下载