平滑從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遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

本文演示上面的中間件服務均使用的是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=updatespring.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註冊的服務

平滑從Consul遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

啓動consul-provider-cloud應用

運行 consul-provider-cloud工程下面
com.paderlol.nacos.consul.ConsulProviderApplication類, 應用端口爲18089

平滑從Consul遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

驗證註冊

1.可以看到我們的服務已經在Consul註冊成功了

平滑從Consul遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

2.在瀏覽器輸入:
http://localhost:18089/hello 可以看到頁面返回Hello World from Consul!

通過Nacos註冊Spring Cloud服務

創建一個Controller服務

下面的Controller中, /hello是Nacos本身的restful服務,/consul-hello 是引用的在Consul註冊的服務

平滑從Consul遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

啓動nacos-provider-cloud

運行 nacos-provider-cloud工程下面
com.example.NacosCloudConsulConsumerApplication類, 應用端口爲18088

平滑從Consul遷移到 Nacos,再也不用擔心特朗普發瘋了...

 

驗證註冊

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應用.

稍微美中不足的暫時還沒支持一鍵批量遷移,現在的服務同步,基本都需要建立一個服務維度的服務,後面陸續也會支持,也歡迎社區的小夥伴一起參與共建。

尼采:那些殺不死你的,終將使你變得更強大!

推薦閱讀

馬士兵20年架構師告訴你阿里巴巴P5到P8級別需要掌握什麼技術?

https://blog.csdn.net/weixin_45132238/article/details/106526166

從零開始學架構,每天花四小時學spring全家桶、高併發、分佈式..

https://blog.csdn.net/weixin_45132238/article/details/106357002

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章