如何平滑将注册中心从Eureka迁移到Nacos?

简介: Nacos与Eureka相比,Nacos的优点非常明显,当然首选Nacos作为注册中心。本文主要介绍如何从Eureka无缝平滑迁移到Nacos注册中心,业务方应用改动最小,业务应用改造一次完成迁移。

1.背景


Nacos与Eureka相比,Nacos的优点非常明显,当然首选Nacos作为注册中心。本文主要介绍如何从Eureka无缝平滑迁移到Nacos注册中心,业务方应用改动最小,业务应用改造一次完成迁移。


2.方案设计


2.1 业务应用多注册到Nacos和Eureka


Spring Cloud应用默认不支持启动时双向注册,但是阿里商业版上云edas-sc-migration-starter组件支持。可以采用如下的方式引入依赖实现多注册和订阅。


<!-- https://mvnrepository.com/artifact/com.alibaba.edas/edas-sc-migration-starter -->
<dependency>
    <groupId>com.alibaba.edas</groupId>
    <artifactId>edas-sc-migration-starter</artifactId>
    <version>1.0.2</version>
</dependency>


也就是引入对应的组件,当应用启动的时候同时向Eureka和Nacos实现双向注册。更多的实现细节和使用细节本文将不进行展开。


微信图片_20220512090835.png


如上图所示,如果只把旧应用只改一部分,会出现只有改造的应用能调到新应用。未改造的应用会出现调不到新应用的情况。即,需要如下图所示的方式,旧应用全部升级改造为双注册到注册中心,才可以支持。


image.png


但是旧应用无法保证同一时刻全部升级改造为同时注册,因此该方案论证失败。


2.2 Nacos Sync方案


Nacos Sync 是一个支持多种注册中心的同步组件,基于 SpringBoot 开发框架,数据层采用 Spring Data JPA,遵循了标准的 JPA 访问规范,支持多种数据源存储,默认使用 Hibernate 实现,更加方便的支持表的自动创建更新。但目前最新版本是如下图所示。


image.png


2.3 注册中心服务端双向同步


2.3.1 方案设计


设计思路是注册中心服务端进行双向同步,做到微服务端完全无侵入,可以随业务迭代逐步完成升级和迁移。改造Eureka Server,Eureka Server引入同步组件实现Nacos和Eureka之间实现双向同步,如下图所示:


image.png


2.3.2 迁移步骤


迁移步骤如下:


  • 1.部署Nacos Server集群用于服务注册与发现


  • 2.在线动态扩容Eureka Server,替换其中的1-2两台Eureka Server。


  • 3.逐渐改造旧应用,只需将新旧应用注册到Nacos上


  • 4.等旧应用全部改造完毕,下线Eureka Server即可。


这样方案的优点,如下:


  • 1.新应用直接注册到Nacos上,不需要同时注册到Eureka和Nacos上


  • 2.旧应用直接改造(引入相关starter即可)注册到Nacos上即可,不需要同时注册到Nacos和Eureka上


  • 3.迁移成本很低,旧应用只需改造一次(所谓的改造即引入新的Starter,修改配置),等全部旧应用迁移完毕,直接下线Eureka Server。


3.迁移落地


3.1 组件开发


开发一个Spring Boot Starter,加入到Eureka Server或Nacos Server中可以实现双向注册。


3.2 spring-cloud-nacos组件介绍


  • spring-cloud-nacos主要由何鹰和瞿礼贡献,


  • Nacos Plus在Nacos上做加法,Nacos client默认是支持安全控制的可以参考阿里云商业版配置中心ACM集成方式

 

https://github.com/alibaba/spring-cloud-alibaba/wiki/ACM 以及 spring cloud alibaba 配置项


https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md 但是开源的Nacos并不含有安全控制模块,在Nacos plus里我们新增了兼容默认Nacos client的安全控制功能。

 

  备注: 可以查看:https://github.com/inacos/nacos


  核心代码主要是NacosSynchronizer.java和EurekaSynchronizer.java,请自行阅读。


github地址:https://github.com/inacos/spring-cloud-nacos


image.png


4.实现迁移落地


按如下,迁移步骤进行迁移。具体细节在本文省略。 1.部署Nacos Server集群用于服务注册与发现 2.在线动态扩容一台Eureka Server 3.逐渐改造旧应用,只需将新旧应用注册到Nacos上 4.等旧应用全部改造完毕,下线Eureka Server即可。

下面将在本地进行测试说明,用到的演示说明列表如下所示:


服务 说明
Eureka注册中心(http://eureka.springcloud.cn/) 模拟生产上的Eureka注册中心
本地基于源码方式启动一个Nacos实例 模拟生产上新建的Nacos
同步服务(本地基于Eureka Server扩展启动的同步服务) 模拟生产上启动了一个Nacos与Eureka之间双向同步的服务
本地启动一个服务注册到(http://eureka.springcloud.cn/) 验证从eureka同步服务到nacos
本地启动一个服务注册到Nacos 验证从nacos同步服务到Eureka上

 

4.1 模拟生产上的注册中心


Spring Cloud中国社区公网上有个Eureka注册中心,地址


为:http://eureka.springcloud.cn/


微信图片_20220512092619.png


4.2 基于源代码方式启动Nacos


基于Nacos的最新Master代码,本地IDEA设置环境变量-Dnacos.standalone=true,启动Nacos,如下所示:


微信图片_20220512092715.png


2.打开浏览器访问http://localhost:8848/nacos/index.html,输入用户名和密码(均为nacos)登录。


微信图片_20220512092741.png


4.3 启动同步服务测试


4.3.1 搭建同步服务


1. 示例工程如spring-cloud-nacos-eureka-proxy-example所示,在一个Eureka Server中引入如下的pom依赖:


<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
          <!-- 引入Nacos与Eureka之间同步的Starter
        <dependency>
            <groupId>net.nacos</groupId>
            <artifactId>spring-cloud-nacos-eureka-proxy</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>


2. 在application.properties配置如下信息


server.port=8761
spring.application.name=eureka-proxy
spring.cloud.nacos.discovery.serverAddr=localhost:8848
eureka.client.serviceUrl.defaultZone=http://eureka.springcloud.cn/eureka/
#eureka.client.fetchRegistry=false
#eureka.client.registerWithEureka=false
eureka.instance.preferIpAddress=true
eureka.server.enable-self-preservation=false


4.3.2 启动服务


启动同步服务,访问Nacos页面发现已经把Eureka上面的服务同步到Nacos,如下所示:


微信图片_20220512092852.png


说明,因为是从公网Eureka上同步过来的服务列表,部分服务不在本地。因此Naocs将会从服务列表中踢除。但不影响验证功能。


4.3.3 验证从Eureka同步到Nacos


启动一个moss-sample-2.1.x的服务只注册到http://eureka.springcloud.cn/,立即同步到Nacos上,可以自行验证。


4.3.4 验证从Nacos同步到Eureka


启动一个服务一个服务只注册到Nacos上,发现立即同步到


http://eureka.springcloud.cn/上,如下图所示:


微信图片_20220512092908.png


5.总结


本文从迁移的方案入手,进行论证如何将注册中心从Eureka迁移到Nacos。如何在迁移的过程中有任何疑问,欢迎沟通交流。

 

 

文章转载: https://xujin.org/blog/eureka-sync-nacos/

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas&nbsp;
相关文章
|
5天前
|
存储 缓存 负载均衡
Nacos注册中心
Nacos注册中心
18 1
Nacos注册中心
|
4天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
14 4
|
4天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
16 3
|
4天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
15 3
|
2月前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
55 0
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述
|
3月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
244 0
|
3月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
69 0
下一篇
无影云桌面