开发者社区 > 云原生 > 正文

nacos 2.0.0 jraft 选主失败导致服务不可用 是否可以让读请求继续可用?

注意到升级到2.0.0版本之后很多用户都提到 code:503,msg:server is DOWN now, please try again later! 这一问题,按照nacos文档给的解决方案

提问77.png

我理解这只是一个临时的解决方案对吧? jraft 所使用的 data/protocol/raft/ 目录下面的各snapshot 里面的存储的是旧的host信息,扩缩容导致新的集群信息跟这里的旧的host信息冲突就很有可能导致选主失败,这个我使用2.0.0-bugfix版本可以稳定复现。 我觉得扩缩容或者机器替换、ip变动应该是个很常见的场景吧?所以请问:

1、这个地方是否有后续的优化计划?

2、选主失败的情况下,是否应该让读操作可用,而不是任何读请求都被拦截然后返回503错误?举个例子,我们仅使用注册中心功能,且仅注册临时服务,只需要distro协议进行同步,这种情况下可不可以即使选主失败,依然让nacos节点工作,只是输出ERROR信息?这样跟出现选主失败然后节点直接503的情况比起来,在生产环境是否影响面小一点?

原提问者GitHub用户MajorHe1

展开
收起
学习娃 2023-05-22 16:39:00 3353 0
1 条回答
写回答
取消 提交回答
  • 1、 优化计划一定是有的,逐渐将使用jraft变得更正确,这个问题不是nacos的,而是所有raft协议都存在的。除非更换协议,否则解决不掉。

    2、 关于可读性问题,由于最初设计时场景是考虑到数据未同步完成的情况不应该可读,会导致客户端读取到错误数据。在启动完成后如果出现问题的话还是可读的。但是加入jraft后会出现经常性的启动选不了主而导致的状态错误。后续会通过优化解决掉。

    原回答者GitHub用户KomachiSion

    2023-05-23 09:53:25
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载