Closed zzl221000 closed 3 months ago
可以通过接口把问题节点先移除掉,通过两个节点提供服务,这样可以先恢复服务。
# 下面的127.0.0.1:8848换成主节点地址
# [1, 2, 3]把问题节点移除,比如节点2有问题,迁移2后就剩下 [1, 3]
curl -X POST "http://127.0.0.1:8848/nacos/v1/raft/change-membership" -H "Content-Type: application/json" -d '[1, 2, 3]'
之后可以再通过扩容补充节点。
这个能力目前的helm模板应该是不直接支持的,还需要手动操作配合。
如果你们的节点存储方便支持手动清空,也可以将问题节点清空后重启,再通过以下接口加入集群中。
# 下面的127.0.0.1:8848换成主节点地址
# [2, "127.0.0.1:9849"] 为新加入的节点号与节点grpc端口号
curl -X POST "http://127.0.0.1:8848/nacos/v1/raft/joinnode" -H "Content-Type: application/json" -d '[2, "127.0.0.1:9849"]'
ok,我明天尝试一下 我临时切换到了老的nacos
好的,到时如果还有什么问题再说。
对了,上面的两个接口也在鉴权校验范围内,操作过程需要先关闭鉴权再操作。 如果你们能拿接口到accessToken,在url中拼接?accessToken=$TOKEN 应该也可以。
后面有计划把这两个接口对应的管理集群节点功能透出到控制台,目前只能先手动通过接口操作。
root@rnacos-0:/io# curl -v -X POST "http://127.0.0.1:8848/nacos/v1/raft/change-membership" -H "Content-Type: application/json" -d '[1, 3]'
Note: Unnecessary use of -X or --request, POST is already inferred.
* Trying 127.0.0.1:8848...
* Connected to 127.0.0.1 (127.0.0.1) port 8848 (#0)
> POST /nacos/v1/raft/change-membership HTTP/1.1
> Host: 127.0.0.1:8848
> User-Agent: curl/7.88.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 6
>
< HTTP/1.1 404 Not Found
< content-length: 0
< date: Tue, 06 Aug 2024 00:23:00 GMT
<
* Connection #0 to host 127.0.0.1 left intact
为啥一直404 @heqingpan
你是在主节点容器中执行的命令? 换成主节点ip试试,也可以检查下端口号(使用http端口号)
你通过集群信息可以确认当前集群的状态
可能确认是不是其中一个节点状态有问题,也可能确认主节点的ip与端口;上面截图的端口是grpc端口,http端口需要减一千。
root@rnacos-0:/io# curl -v -X POST "http://rnacos-2.rnacos-headless:8848/nacos/v1/raft/change-membership" -H "Content-Type: application/json" -d '[1, 3]'
Note: Unnecessary use of -X or --request, POST is already inferred.
* Trying 10.42.0.13:8848...
* Connected to rnacos-2.rnacos-headless (10.42.0.13) port 8848 (#0)
> POST /nacos/v1/raft/change-membership HTTP/1.1
> Host: rnacos-2.rnacos-headless:8848
> User-Agent: curl/7.88.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 6
>
< HTTP/1.1 404 Not Found
< content-length: 0
< date: Tue, 06 Aug 2024 00:34:40 GMT
<
* Connection #0 to host rnacos-2.rnacos-headless left intact
还是404,能走到404说明进服务了
2024-08-06T08:34:40.179690764+08:00 [2024-08-06 00:34:40.179531 +00:00 INFO actix_web::middleware::logger] 10.42.1.122 "POST /nacos/v1/raft/change-membership HTTP/1.1" 404 0 "-" "curl/7.88.1" 0.000059
root@rnacos-0:/io# curl -v -X POST "http://127.0.0.1:8848/nacos/v1/raft/change-membership" -H "Content-Type: application/json" -d '[1, 3]' Note: Unnecessary use of -X or --request, POST is already inferred. * Trying 127.0.0.1:8848... * Connected to 127.0.0.1 (127.0.0.1) port 8848 (#0) > POST /nacos/v1/raft/change-membership HTTP/1.1 > Host: 127.0.0.1:8848 > User-Agent: curl/7.88.1 > Accept: */* > Content-Type: application/json > Content-Length: 6 > < HTTP/1.1 404 Not Found < content-length: 0 < date: Tue, 06 Aug 2024 00:23:00 GMT < * Connection #0 to host 127.0.0.1 left intact
为啥一直404 @heqingpan
我刚才在本地查了下原因,是因为之前有调整过这个接口的前缀,然后raft接口被/nacos
覆盖了。
你们现在用的是什么版本,方便升级吗? 我临时发个beta版本修复这个接口路径问题,让你们先使用。
让你们先使用。
只要发到dockerhub,可以自动升级
你们可以指定升级到beta版本吧?
你们可以指定升级到beta版本吧?
可以的,指定下tag就行
好的,那我现在发个beta版本。
已发布 https://github.com/nacos-group/r-nacos/actions/runs/10258329952 tag: v0.5.20-beta
节点报错大概率是服务器断电,导致raft数据没能及时落盘,其中一个节点启动时数据不对。
关于 固定三次查询就会出现一次报错
,这部分服务端有什么报错信息吗?这个报错看起来是路由到问题节点造成的。
上面的change-membership
接口主要是调整集群节点,把问题节点移除,集群能正常恢复工作。
不过路由的问题可能还存在,这需要看nacos-client是怎么链接到r-nacos的,如果是通过k8s service,那到还要想办法从service中把问题节点移除。
另一个处理思路是修复问题节点:
# 下面的127.0.0.1:8848换成主节点地址
# [2, "127.0.0.1:9849"] 为新加入的节点号与节点grpc端口号
curl -X POST "http://127.0.0.1:8848/nacos/v1/raft/joinnode" -H "Content-Type: application/json" -d '[2, "127.0.0.1:9849"]'
另一个处理思路是修复问题节点:
- 关闭问题节点r-nacos服务,清理问题节点的raft数据(删除nacos_db目录文件)
- 关闭问题节点r-nacos服务
- 如果(集群主节点有变化)问题节点没有顺利加入集群,使用joinnode接口加入集群
# 下面的127.0.0.1:8848换成主节点地址 # [2, "127.0.0.1:9849"] 为新加入的节点号与节点grpc端口号 curl -X POST "http://127.0.0.1:8848/nacos/v1/raft/joinnode" -H "Content-Type: application/json" -d '[2, "127.0.0.1:9849"]'
移除问题节点nacos_db下所有文件,重启服务恢复了,报错也没有了 固定三次报错一次,我通过日志发现,http请求是轮询节点的,到问题节点上请求就会报错 不知道为什么问题节点能正常启动,只是不能configs,是不是数据校验有问题
应该是问题节点的部分raft数据没能及时落盘与其它节点数据不一致,导致raft数据校验有问题。
现在集群服务已经恢复了是吧,问题算解决了?
解决了
helm部署的三个节点,周末断电后,再次启动有一个节点查看config会固定返回
{"data":null,"success":false,"code":"SYSTEM_ERROR","message":null}
现在是三个节点,固定三次查询就会出现一次报错
有没有节点重建的方案?