Eureka 平滑迁移 Nacos 方案

news2024/11/26 12:32:39

博主介绍:✌全网粉丝4W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅开源项目免费哦:点击这里克隆或者下载 ,已经发布Vue3版   🍅

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

 Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

 uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

目录

一、本方案特点

二、多注册和聚合订阅平滑迁移架构

三、迁移步骤

第一步,支持多注册和多订阅

1、修改 pom.xml,添加 spring-cloud-starter-alibaba-nacos-discovery 依赖:

2、支持多注册

4、将修改后的应用打包,并部署

5、验证迁移是否成功

6、完成应用迁移

第二步,迁移所有应用。

第三步,删除原有配置中心信息,完成迁移。

四、风险点和回滚

五·、其他问题

如何选择最先迁移哪个应用

💖微服务实战


一、本方案特点

  1. 迁移的过程中,业务不受任何影响。
  2. 迁移的过程中,不增加机器成本。

二、多注册和聚合订阅平滑迁移架构

通过多注册和聚合订阅平滑迁移到 Nacos 的架构图如下:

 

  • 通过引入 edas-sc-migration-starter 使得 Spring Cloud 应用支持多注册,这样确保原有系统的应用可以调用 注册到 Nacos 中的服务。
  • 通过引入 edas-sc-migration-starter 并配置 RibbonClients Configuration 支持聚合订阅,使得迁移到 Nacos中的应用可以调用原有系统的服务。
  • 迁移过程中,支持通过配置中心动态地修改订阅策略,支持通过 Endpoint 监控聚合订阅的详情,做到可配置可监控。

三、迁移步骤

第一步,支持多注册和多订阅

1、修改 pom.xml,添加 spring-cloud-starter-alibaba-nacos-discovery 依赖:

<dependency>
 	<groupId>org.springframework.cloud</groupId>
 	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 	<version>{相应的版本}</version>
 </dependency>

并在 application.properties 中添加 nacos-server 的地址:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

2、支持多注册

默认情况下 Spring Cloud 只支持在依赖中引入一个注册中心,当存在多个注册中心时,启动会报错。所以这里        需要添加一个依赖 edas-sc-migration-starter ,使得 Spring Cloud 应用支持多注册。

<dependency>
 	<groupId>com.alibaba.edas</groupId>
 	<artifactId>edas-sc-migration-starter</artifactId>
 	<version>1.0.1</version>
 </dependency>

3、修改 Ribbon 配置,支持同时从多个注册中心订阅 
在应用启动的主类中,显示地指定 RibbonClients 的配置为 MigrationRibbonConfiguration
假设原有的应用主类启动代码如下:

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


那么修改后的应用主类启动代码如下:

@SpringBootApplication
 @RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
 public class ConsumerApplication {
     public static void main(String[] args) {
         SpringApplication.run(ConsumerApplication.class, args);
     }
 }


注意,默认的订阅策略是从所有注册中心订阅,并对数据做一些简单的聚合。
您可以通过 spring.cloud.edas.migration.subscribes 属性来选择从哪几个注册中心订阅数据。

spring.cloud.edas.migration.subscribes=nacos,eureka # 同时从 Eureka 和 Nacos 订阅服务
 
 spring.cloud.edas.migration.subscribes=nacos        # 只从 Nacos 订阅服务


如果想在应用运行时动态修改从哪些注册中心订阅数据,直接使用 Spring Cloud 配置管理功能在运行时修改此属性即可。

4、将修改后的应用打包,并部署

5、验证迁移是否成功

  1. 最重要的一点,观察业务本身是否正常。
  2. 如果您的应用开启了 Actuator 监控,那么可以通过 Actuator 来查看此应用订阅的各服务的 RibbonServerList 的信息。metaInfo 中的 serverGroup 字段 代表了此节点来源于哪个服务注册中心。
http://ip:port/migration_server_list             ## Spring Boot 1.x 版本

 http://ip:port/actuator/migration-server-list    ## Spring Boot 2.x 版本

6、完成应用迁移

第二步,迁移所有应用。

  1. 如果按照第一步中的步骤完整地迁移完一个应用,且各项数据都显示业务正常,则可以开始迁移剩余应用。

第三步,删除原有配置中心信息,完成迁移。

当应用都已经迁移到 Nacos 之后,此时可以删除原有的注册中心的配置 和 迁移过程专用的依赖 edas-sc-migration-starter ,完成整个迁移。

  1. 从 pom.xml 中删除原有的注册中心的依赖 和 edas-sc-migration-starter
  2. 参考第一步中第2小步骤中的部署方式,将修改后的应用依次全部重新部署。
  3. 停止原有的 Eureka 集群。

四、风险点和回滚

从目前方案的设计中,没有发现明显的风险点。但是因为在迁移的过程中涉及到所有应用的两次修改和重启,所以建议在迁移的过程中实时关注业务数据监控的详情,确保完全不影响业务的情况下再进行下一步操作。

如果遇到异常情况,针对于不同阶段的处理方案如下:

  1. 执行第一步的过程中出现业务异常。还原代码,重新部署到原有机器,恢复业务。查清楚具体问题,排查完毕后再重新执行。主要排查是否是机器权限的问题。
  2. 执行第二步的过程中出现业务异常。还原正在迁移的应用的代码,重新部署到原有机器,恢复业务。查清楚具体问题,排查完毕后再重新执行。主要排查是否是机器权限的问题。
  3. 执行第三步的过程中出现业务异常。还原正在迁移的应用的代码,重新部署到原有机器,恢复业务。

五·、其他问题

如何选择最先迁移哪个应用

  • 建议是从最下层 Provider 开始迁移。但如果调用链路太复杂,比较难分析,所以设计的方案中是支持随便找一个非流量入口应用进行迁移。
  • 因为流量入口的应用比较特殊,所以建议迁移流量入口应用时需要根据自己应用的实际情况考虑迁移方案。

💖微服务实战

✨【微服务】SpringCloud的OpenFeign与Ribbon配置

✨集Oauth2+Jwt实现单点登录

✨Spring Cloud Alibaba微服务第29章之Rancher

✨Spring Cloud Alibaba微服务第27章之Jenkins

✨Spring Cloud Alibaba微服务第24章之Docker部署

✨Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

✨Spring Cloud Alibaba微服务第22章之Oauth2

✨Spring Cloud Alibaba微服务第21章之分布式事务

✨Spring Cloud Alibaba微服务第18章之消息服务

✨Spring Cloud Alibaba微服务第16章之服务容错

✨Spring Cloud Alibaba微服务第14章之分库分表

✨Spring Cloud Alibaba微服务第11章之MyBatis-plus

✨Spring Cloud Alibaba微服务第8章之OpenFeign

✨Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

✨SpringCloud Alibaba微服务第6章之Gateway

✨SpringCloud Alibaba微服务第4章之Nacos

✨SpringCloud Alibaba微服务开篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础语法1(语法和规则)

Python是一门脚本语言&#xff0c;相比与C/C&#xff0c;Java的优势就是不用事先进行编译&#xff0c;可以直接读取脚本文件&#xff0c;一边解释一边执行 大家好&#xff0c;我是纪宁 本文将介绍pytho的基础语法第一部分&#xff0c;关于一些python写代码的基本规则 博主也正…

14-2利用遗传算法求解BP神经网络初始化权值和阈值的最优问题(附matlab程序)

1.简述 核心问题&#xff1a; BP网络是前向网络的核心部分&#xff0c;是神经网络中的最精华、最完美的部分&#xff0c;由于其简单的结构&#xff0c;可调整的参数多&#xff0c;训练算法也多&#xff0c;而且可操作性好&#xff0c;BP神经网络获得了非常广泛的应用&#xff0…

易基因:ChIP-seq等揭示METTL14调控哺乳动物二价结构域的表观遗传机制|科研进展

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 组蛋白及其翻译后修饰在调控基因表达和其他染色质模板化过程中起着重要作用。组蛋白H3赖氨酸4三甲基化&#xff08;H3K4me3&#xff09;和组蛋白H3K27me3分别在小鼠植入前胚胎的基因激活…

C盘中哪些文件可以删除?这些文件放心删!

我的c盘动不动就显示爆满&#xff0c;想删一些c盘的文件吧&#xff0c;又害怕误操作删了电脑的系统文件。有没有电脑高手能总结一下c盘里哪些文件可以删除呀&#xff01; C盘作为我们默认的存储盘&#xff0c;会自动保存很多文件&#xff0c;久而久之我们可能会发现&#xff0c…

【保姆级教程】Vue项目调试技巧

前言 在Vue项目开发过程中&#xff0c;当遇到应用逻辑出现错误&#xff0c;但又无法准确定位的时候&#xff0c;知晓Vue项目调试技巧至关重要&#xff0c;debug是必备技能。 同后台项目开发一样&#xff0c;可以在JS实现的应用逻辑中设置断点&#xff0c;并进行单步、进入方法…

sqoop导入实战

Sqoop导入实战 Sqoop-import 案例1 表没有主键&#xff0c;需要指定map task的个数为1个才能执行 Sqoop导入原理: ​ Sqoop默认是并行的从数据库源导入数据。您可以使用-m或--num-mappers参数指定用于执行导入的map任务(并行进程)的数量。每个参数都取一个整数值&#xff0…

【软件工程题库】第六章 编码和测试

&#x1f57a;作者&#xff1a; 迷茫的启明星 学习路线C语言从0到1C初阶数据结构从0到1 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Python基础(15)——Python字典(dict)详解

Python基础&#xff08;15&#xff09;——Python字典&#xff08;dict&#xff09;详解 文章目录 Python基础&#xff08;15&#xff09;——Python字典&#xff08;dict&#xff09;详解课程&#xff1a;字典目标一. 字典的应用场景二. 创建字典的语法三. 字典常见操作3.1 增…

arm64架构的linux中断分析(一)

文章目录 1. 中断的概念和作用2. Linux中断处理机制2.1 中断请求2.2 中断处理2.3 中断完成2.4.中断触发和处理步骤详解2.4.1 异常向量表的解读 2.5 硬件中断号和软件中断号 1. 中断的概念和作用 当计算机的CPU需要在执行任务的同时响应外部事件时&#xff0c;中断是一种重要的…

Python基础(13)——Python列表(list)详解

Python基础&#xff08;13&#xff09;——Python列表&#xff08;list&#xff09;详解 文章目录 Python基础&#xff08;13&#xff09;——Python列表&#xff08;list&#xff09;详解课程&#xff1a;列表目标一. 列表的应用场景二. 列表的格式三. 列表的常用操作3.1 查找…

持 PMP®证书增持 CSPM-2证书,值不值?

2023年起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表(简历和业绩不用填&am…

ChatGPT批量生成文章软件:创意无限,内容源源不断

ChatGPT是一种基于人工智能技术的自然语言处理模型&#xff0c;它能够生成各种主题的文章。这种软件具有创意无限、内容源源不断的特点&#xff0c;能够满足用户对于大量文章的需求。 方面一&#xff1a;文化艺术 ChatGPT软件可以生成关于文化艺术的文章&#xff0c;包括绘画、…

C++基础入门教程(2)

3 运算符 作用&#xff1a; 用于执行代码的运算 本章我们主要讲解以下几类运算符&#xff1a; 运算符类型 作用 算术运算符 用于处理四则运算 赋值运算符 用于将表达式的值赋给变量 比较运算符 用于表达式的比较&#xff0c;并返回一个真值或假值 逻辑运算符 用于根据表达式的…

DevExpress WPF功能区控件,更轻松创建商业应用工具栏!(下)

在上文中(点击这里回顾>>&#xff09;&#xff0c;我们主要介绍了DevExpress WPF的Ribbon、Toolbar和Menus组件支持MVVM、功能区命令栏和视图等&#xff0c;本文将继续介绍这些组件的自定义功能等。 DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超…

行业报告 | 生成式人工智能:人人可用的新时代

原创 | 文 BFT机器人 01 人工智能的发展迎来新拐点 ChatGPT 正在唤醒全球对人工智能 (AI)变革潜力的认知&#xff0c;激发起前所未有的关注和创造力浪潮。 该技术可以模仿人类的对话和决策能力&#xff0c;使我们站上了公众采用人工智能的第一个真正拐点。最终&#xff0c;所有…

k8s volume简单总结 —— 筑梦之路

Kubernetes目前支持的Volume类型包括Kubernetes的内部资源对象类型、开源共享存储类型、存储厂商提供的硬件存储设备和公有云提供的存储等。 将Kubernetes特定类型的资源对象映射为目录或文件&#xff0c;包括以下类型的资源对象&#xff1a; 类型描述ConfigMap应用配置Secret加…

WPF开发txt阅读器15:C#合并段落

文章目录 清理空格段落拼接去除空行按键事件 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录&#x1f48e;快捷键翻页字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放&#x1f48e;播放进度显…

Cell -- PARADIGM算法可预测药物与微生物组的关联关系

在癌症患者中&#xff0c;药物对肠道细菌群的影响很难确定。以往的研究主要关注抗生素对肠道微生物组的影响&#xff0c;而对非抗生素药物的影响在人体中了解较少&#xff0c;这是由于缺乏可靠的药物暴露数据和长期粪便样本的收集。 2023年6月8日发表于《Cell》的“High-resolu…

2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【openGauss基本概念---快速入门】

【openGauss简单使用---快速入门】 &#x1f53b; 一、基本概念&#x1f530; 1.1 openGauss&#x1f530; 1.2 数据库&#xff08;Database&#xff09;&#x1f530; 1.3 数据块&#xff08;Block&#xff09;&#x1f530; 1.4 行&#xff08;Row&#xff09;&#x1f530; …