vlambda博客
学习文章列表

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...



△Hollis, 一个对Coding有着独特追求的人△
这是Hollis的第 277 篇原创分享
作者 l 张龙
来源 l Hollis(ID:hollischuang)
平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...

近日,国外的商业软件公司HashiCorp在官网宣布:不允许中国境内使用、部署和安装该企业旗下的【企业版】产品和软件。
平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...
PLEASE NOTE THAT THE SOFTWARE MAY NOT BE USED, DEPLOYED OR INSTALLED IN THE PEOPLE’S REPUBLIC OF CHINA.

HashiCorp旗下的知名的开源软件有 Consul、Vagrant、Terraform等,

虽然在最后官方立马对文章进行了修改和解释,指出只是因为国内管制,不允许使用其公司的 VAULT。但是通过这件事,还是建议已经在使用Consul的公司预防万一,今天这篇文章就是专门来解决大家可能担心的万一出现,通过Nacos-Sync 把 Consul 平滑迁移到 Nacos。


迁移方案

方案一(双注册方案)

服务框架在过度期间将服务同时注册到 Consul 和 Nacos。过度完去掉对 Consul 的注册和消费

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


方案二(Nacos-Sync同步方案)

Nacos-Sync是一个跨注册中心服务同步组件,支持Zookeeper/Eureka/Consul/Nacos等注册中心间服务同步和迁移。

下图展示通过Nacos  Sync 完成 Consul 到 Nacos 服务迁移的过程。只需配置服务同步任务,过度期间服务双向同步,新版本升级连到Nacos即可。

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


方案选型

双注册方案相对更稳定,但是需要多次升级发布才能过度完成。相比之下Nacos-Sync侵入性更低,一次性迁移过度,也是我们推荐的一个方案。




Demo演示

下面我们通过一个简单的 Demo 介绍一下怎么用 Nacos-Sync 完成 Consul 到 Nacos 服务迁移。


环境准备


本例子包含 Spring-Cloud 将服务分别注册到Consul、Nacos 两个注册中心互相同步演示


  1. Spring-Cloud 注册到 Consul 的服务 同步到 Nacos

  2. Spring-Cloud 注册到 Nacos 的服务 同步到 Consul


服务 版本
Consul 1.7.3
Nacos 1.2.1
Mysql 5.7
Nacos-Sync 0.3.7


本文演示上面的中间件服务均使用的是Docker Image,下面是docker安装过程


1.Consul 启动,这里启动4个Consul Agent,3个Server(会选举出一个leader),1个Client.


#启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面docker run -d --name=consul1 -p 8900:8500 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --bootstrap-expect=3 --client=0.0.0.0 -ui
#查看启动后的第一个consul 容器IPdocker exec -it consul1 cat /etc/hosts | grep 172
#启动第2个Server节点,并加入集群docker run -d --name=consul2 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 第一个容器ip
#启动第3个Server节点,并加入集群docker run -d --name=consul3 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --client=0.0.0.0 --join 第一个容器ip
#启动第4个Client节点,并加入集群docker run -d --name=consul4 -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 --join 第一个容器ip


2.启动Nacos server


$ docker run --name nacos-standalone -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:1.2.1


3.启动Mysql


$ docker run --name nacos-sync-db -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=nacos_sync -p 3306:3306 -d mysql:5.7


4.启动Nacos-Sync

下载最新Nacos-Sync Release包,并解压,进入解压后的目录,并修改conf/application.properties中的mysql配置


server.port=8081server.servlet.context-path=/
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialectspring.jpa.hibernate.ddl-auto=update

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/nacos_sync?characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=root


5.执行启动脚本


$ ./bin/startup.sh restart


Nacos-Sync 添加集群


打开Nacos-Sync: localhost:8081


添加Consul集群

1.选择 集群配置->新增集群

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


添加Nacos集群


2.选择 集群配置->新增集群

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


添加完成效果

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...




代码演示

创建两个Spring Cloud 应用分别向Consul和Nacos注册服务,并且通过上面的Nacos-Sync完成Consul和Nacos注册中心服务的相互同步.下面贴出一些关键代码,具体代码请参考:https://github.com/paderlol/nacos-sync-example


通过Consul注册Spring Cloud服务


创建一个Controller服务


下面的Controller中, /hello是注册在Consul的restful服务,/nacos-hello 是引用的在Nacos注册的服务


@RestControllerpublic class HelloController { @GetMapping(value = "/hello") public String hello() { return "Hello World from Consul!"; } @Autowired private HelloService helloService; // 注册在Nacos注册中心的服务 @GetMapping(value = "/nacos-hello") public String hello2() { return helloService.hello(); }}

启动consul-provider-cloud应用


运行 consul-provider-cloud工程下面com.paderlol.nacos.consul.ConsulProviderApplication类, 应用端口为18089


@SpringBootApplication@EnableFeignClientspublic class ConsulProviderApplication { public static void main(String[] args) { SpringApplication.run(ConsulProviderApplication.class, args); } // 引用Nacos同步过来的服务 @FeignClient(name = "nacos-provider-cloud") public interface HelloService { @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello(); }}

验证注册


1.可以看到我们的服务已经在Consul注册成功了


平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


2.在浏览器输入: http://localhost:18089/hello 可以看到页面返回Hello World from Consul!


通过Nacos注册Spring Cloud服务


创建一个Controller服务


下面的Controller中, /hello是Nacos本身的restful服务,/consul-hello 是引用的在Consul注册的服务


@RestControllerpublic class HelloController { @Autowired private HelloService helloService; @GetMapping(value = "/consul-hello") public String hello() { return helloService.hello(); } @GetMapping(value = "/hello") public String hello2() { return "Hello World from Nacos!"; }}


启动nacos-provider-cloud

运行 nacos-provider-cloud工程下面com.example.NacosCloudConsulConsumerApplication类, 应用端口为18088


@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class NacosCloudConsulConsumerApplication { public static void main(String[] args) { SpringApplication.run(NacosCloudConsulConsumerApplication.class, args); } @FeignClient(name = "consul-provider-cloud") public interface HelloService { @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello(); }}

验证注册


1.可以看到我们的服务已经在Nacos注册成功了


平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


2.在浏览器输入: http://localhost:18088/hello 可以看到页面返回Hello World from Nacos!


添加同步任务


添加同步任务


1.打开Nacos-Sync 控制台,添加同步任务。
选择 服务同步 -> 新增同步, 如图

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...

2.添加完成效果

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...



打开Nacos 控制台 查看同步结果


打开Nacos 控制台: http://localhost:8848/nacos


选择 服务管理-> 服务列表 ,如图

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


打开浏览器: http://localhost:18088/consul-hello  如图

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...


打开Consul 控制台 查看同步结果


打开Consul 控制台: http://localhost:8900/ui/dc1/services

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...



打开浏览器: http://localhost:18089/nacos-hello  如图


平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...



总结


从上面的演示中,我们可以看到Nacos-Sync已经可以支持Nacos和Consul的Spring Cloud应用的双向同步,可以很好的在Spring Cloud中支持Consul平滑迁移到Nacos应用.


稍微美中不足的暂时还没支持一键批量迁移,现在的服务同步,基本都需要建立一个服务维度的服务,后面陆续也会支持,也欢迎社区的小伙伴一起参与共建。


尼采:那些杀不死你的,终将使你变得更强大!



关于作者 张龙 Nacos PMC,Github ID:paderlol,长沙蜜獾信息科技有限公司





福利时间


GIFT TIME






万众期待的送书环节又来了

感谢大家一直以来的陪伴与支持


今天给大家赠送15本书

机械工业出版社赞助

中奖者可以在以下书籍中任选一本

也欢迎大家自行购买

本次送书不需要评论,也不需要转发

采用最公平的抽奖方式。

平滑从Consul迁移到 Nacos,再也不用担心特朗普发疯了...

即可参与抽奖

 
   
   
 


往期推荐





 

直面Java第319期:Java中的四种引用类型?

深入并发第013期:拓展synchronized——锁优化


如果你喜欢本文,
请长按二维码,关注 Hollis.
转发至 朋友圈 ,是对我最大的支持。




点个 在看 
喜欢是一种感觉
在看是一种支持
↘↘↘