3个节点从Nacos 1.3.2升级到Nacos 2.0.1,按照升级文档操作后,3个节点都持续打印upgrade check result false。
定位到完成Check工作的类是com.alibaba.nacos.naming.core.v2.upgrade.UpgradeJudgement类,改造了checkServiceAndInstanceNumber方法打印Check工作的现场信息。
改造后checkServiceAndInstanceNumber方法如下:
private boolean checkServiceAndInstanceNumber() { boolean result = serviceManager.getServiceCount() == MetricsMonitor.getDomCountMonitor().get(); result &= serviceManager.getInstanceCount() == MetricsMonitor.getIpCountMonitor().get();
Loggers.SRV_LOG.error("TAG: ServiceCount-{}-{}, InstanceCount-{}-{}", serviceManager.getServiceCount(),
MetricsMonitor.getDomCountMonitor().get(), serviceManager.getInstanceCount(),
MetricsMonitor.getIpCountMonitor().get());
return result;
}
基于改造后的JAR包运行后,发现日志如下:
2021-05-10 14:33:50,785 ERROR TAG: ServiceCount-0-0, InstanceCount-0-0 2021-05-10 14:33:55,775 ERROR TAG: ServiceCount-38-0, InstanceCount-251-251 2021-05-10 14:34:00,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-251 2021-05-10 14:34:05,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-251 2021-05-10 14:34:10,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-251 2021-05-10 14:34:15,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-251 2021-05-10 14:34:20,776 ERROR TAG: ServiceCount-38-38, InstanceCount-251-251 2021-05-10 14:34:25,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-219 2021-05-10 14:34:30,776 ERROR TAG: ServiceCount-38-38, InstanceCount-251-182 2021-05-10 14:34:35,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-182 2021-05-10 14:34:40,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-182 2021-05-10 14:34:45,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-182 2021-05-10 14:34:50,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-182 2021-05-10 14:34:55,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-214 2021-05-10 14:35:00,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-214 2021-05-10 14:35:05,774 ERROR TAG: ServiceCount-38-38, InstanceCount-251-214
也就是说通不过Check的原因是serviceManager.getInstanceCount() == MetricsMonitor.getIpCountMonitor().get()持续返回false.
问题1:请问如何解决以上问题?
问题2:另外,还有1个困惑:假如当前升级成功+关闭双写后,下次重启一个节点是否仍然会做以上检查,如果彼时检查通不过,会不会产生数据一致性问题,而不能正常工作?
原提问者GitHub用户dslztx
1、由于实例数量无法达到一致,所以无法升级,您可以看一下naming-event,是哪些实例在变化
2、关闭双写后,关闭双写的标记会被持久化到SwitchDomain里,该内容会通过raft协议持久化,重启后会在启动时读取raft持久化的数据,自动关闭双写,关闭双写的时候会清理掉旧版本的数据内容,只保留新版本的数据内容。应该能够正常工作。
原回答者GitHub用户KomachiSion
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。