首页 > 其他分享 >Nacos 2.x 系列【20】集群部署

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

时间:2024-07-05 15:28:34浏览次数:15  
标签:127.0 20 0.1 IP Nacos nacos 地址 集群 server

文章目录

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-demo
  cloud:
    nacos:
      # 服务端用户名密码
      username: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        # 服务端地址,默认:127.0.0.1:8848
        server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
      # 配置中心
      config:
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        server-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: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        endpoint: 127.0.0.1:8080
      # 配置中心
      config:
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        endpoint: 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: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        # 服务端地址,默认:127.0.0.1:8848
        server-addr: nacos.com
      # 配置中心
      config:
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        server-addr: nacos.com

标签:127.0,20,0.1,IP,Nacos,nacos,地址,集群,server
From: https://blog.csdn.net/qq_43437874/article/details/140105242

相关文章

  • 河南一胡辣汤店燃气闪爆致20人受伤,燃气泄漏如何及时预警
    在2024年7月3日正午12时47分,高新区赵营社区的一家胡辣汤店突遇了一场燃气闪爆事故。事故的原因已经得到了初步确认:这是由物业公司在进行小区自来水管维修施工过程中,不慎对燃气管道造成了损害。由于燃气管道的破裂,导致了燃气的泄漏,进而引发了这场惊险的闪爆事故。由此可见,对燃......
  • 在Docker中搭建rabbit MQ集群 (Mac + OrbStack)
    我以为用docker搭建一个rabbitMq集群会非常简单,但是结果却出乎意料,我花了差不多两个半天才搞定。这还是依赖了AI的协助,否则难度不敢想象。我的环境是Mac上的OrbStack。用了Kimi+文心一言+ChatGPT+Claude,还是Kimi价值最大。backandforth的过程就不讲了,这里直接说一下......
  • VMware vSphere Tanzu部署_16_TKC集群节点VM密码获取
    SupervisorControlPlaneVM密码获取通过SSH方式登录vcentervcenter开启SSH服务通过SSH工具登录vcenter执行获取密码脚本在vcentershell模式下执行/usr/lib/vmware-wcp/decryptK8Pwd.py命令WARNING!TheremoteSSHserverrejectedX11forwardingrequest.Connect......
  • 全网最全网络安全入门指南(2024版)零基础可学_网络安全学习指南
    下一个十年的饭碗就是它了!据悉,2019年9月27日,工信部发布**《关于促进网络安全产业发展的指导意见(征求意见稿)》,明确提出2025年培育形成一批营收20亿元以上的网络安全企业,网络安全产业规模超过2000亿元的发展目标;据市场调研机构Gartner预测,我国网络安全预计将以......
  • 【SPIE 独立出版 | 高录用稳检索 | 过往4届均已检索】第五届计算机视觉和数据挖掘国际
    第五届计算机视觉与数据挖掘国际学术会议(ICCVDM2024)将于2024年7月19-21日在中国长春举行。此前,ICCVDM系列会议于2020年在中国西安、2021年在中国长沙(线上)、2022年在中国呼伦贝尔(线上+线下)、2023年在中国长春(线上+线下)皆已成功举办。ICCVDM为世界各地该领域的专家、学者......
  • 2024年亚太中文赛数学建模竞赛B题 洪水灾害的数据分析与预测详细思路解析
    2024年亚太中文赛数学建模竞赛B题洪水灾害的数据分析与预测详细思路解析解题方法:首先就是对数据进行数据的预处理包括缺失值和异常值处理,之后就是分析哪些指标与洪水的发生有着密切的关联,可以使用相关性分析(建议使用斯皮尔曼相关系数法,斯皮尔曼相关系数是一种度量两个变量......
  • 2024年最佳鼠标灵敏度转换工具——“Mouse Sensitivity Converter“
    一、引言在现代的竞技游戏中,鼠标灵敏度是每个玩家都无法忽视的重要因素。无论你是FPS射击游戏达人,还是MOBA策略游戏爱好者,你都需要一款合适的鼠标灵敏度来提升你的游戏表现。然而,在不同游戏之间调整灵敏度常常让人头疼。今天我们将为大家介绍一款能够解决这一难题的神器——"Mous......
  • 2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
    ​​​​2024年虚拟现实、图像和信号处理国际学术会议(ICVISP2024)2024InternationalConferenceonVirtualReality,ImageandSignalProcessing———————————————————————————————————————会议时间:2024年8月2日-4日   会议地......
  • Kafka集群部署(手把手部署图文详细版)
    1.1.1部署zookpeer在node02下载并解压zookeeper软件包cd/usr/localwgethttps://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz或者:[email protected]:/home/cat/zookeeper-3.4.6.tar.gz/tmp(注意目录)mvzookeeper-3.4.6.tar.gz......
  • 极狐GitLab 将亮相2024空天信息大会暨数字地球生态峰会,携手中科星图赋能空天行业开发
    GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab:https://gitlab.cn/install?channel=content&utm_source=csdn是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。极狐GitLab在5月28......