一、升级背景
近期在搭建公司内部的统一技术平台,其中使用到Alibaba Spring Cloud技术栈,原先的nacos版本为1.3.2,近期官方nacos版本已升级到2.0.1,据介绍,大版本的升级在服务发现及稳定性有很大提升。刚好碰到笔者所在公司,需要将旧的docker集群平台迁移到k8s集群平台,计划将公共的组件例如(nacos\sentinel\skywalking\elk等)迁移过去,于是在升级nacos的过程中碰到一些问题,在此做过记录,为将来有同样需求的人员做个指引。
二、版本情况
1、Spring Cloud:Hoxton.SR9
2、Spring Cloud Alibaba:2.2.5.RELEASE
3、Spring Boot:2.3.6.RELEASE
4、Nacos Server:1.3.2
三、升级步骤
1、在K8s上部署Nacos集群
根据官方部署文档:https://nacos.io/zh-cn/docs/u...
2、将应用切换到新的Nacos集群地址
修改环境的配置文件,将nacos的配置与注册地址修改为:nacos-headless.nacos.svc.cluster.local:8848
3、重新部署应用,发现应用没有报错,交易也正常
四、碰到问题及解决方式
1、大约过了几天,由于k8s节点服务出现问题,nacos服务器中断了几分钟,在应用程序中出现连接异常,应用报“[com.alibaba.nacos.client.naming] failed to update serviceName:DEFAULT_GROUP@@fone-auth-test。The IpV4 address【集群地址】is incorrect”,
报了该错误之后,应用就与nacos server失去连接,从nacos server上面也看不到该服务的注册信息。重启应用后解决。
2、通过查看官方升级文档
https://nacos.io/zh-cn/docs/2...
https://nacos.io/zh-cn/docs/2...
后才发现原来应用程序端也需要做升级改造,即把客户端的jar包升级到2.0.1,由于现有的的Alibaba Spring Cloud的版本仍未支持nacos2.0.1
故需要应用手工排除旧的1.3.2包,并引用最新的2.0.1版本,如下:
3、由于最新的nacos2.0.1版本新增了两个端口:
gRpc端口客户端:9848
gRpc端口服务端:9849
Jraft端口:7848(兼容1.4.x版本的选举端口)
因此要注意在服务器防火墙和VPN上访问策略要添加上如上端口(9848/9849/7848)的访问权限,否则开发人员升级本地JAR包后会出现本地应用无法访问服务器情况
五、问题总结
1、升级基础组件一定要查阅官方材料(升级策略,评估对现有应用影响)后再进行,不要蛮目地开展,在此也建议nacos的升级步骤中应该留有一个快速链接或者Tips 能够链接到兼容性及使用
2、nacos官方提到新的nacos2.0.1版本Server端能够支持旧的客户端ApI连接,但是实际上测试还是有缺陷,服务端断线后客户端出现异常,后续服务无法再自动发现与注册
3、新的服务比之前多开放了两个端口,需要服务器和VPN(公司有该安全管控要求,按需开放)对应开放端口
4、直到写稿现在,Spring Cloud Alibaba的版本已升级到2021.1,但其支持的Nacos还仍为1.4.1,未支持nacos 2.0.1。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。