sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.56k stars 1.14k forks source link

Leader发送大size的raftLog给follower会导致CLIENT_SEND_ERROR #987

Closed ReycoLi closed 1 year ago

ReycoLi commented 1 year ago

场景: 我们想从单点scale up到3个点,因为特殊原因还没有实现snapshot. 所以在加入新点的过程中, 新点需要从0开始逐条replicate raftLog, 我们的数据量目前不大(150万条左右),所以可以忍受从0开始复制。但我们因为开始时设计不当,导致在中间有一些size很大的raftLog, 大概每条Log的size在100MB左右,所以AppendEntriesRequest的payload会超过100MB, leader bolt client发这条request给新点的时候会返回 CLIENT_SEND_ERROR,而且除此之外没有其他的error log. 然后复制过程就会一直卡在这里,leader会不断尝试发这个AppendEntriesRequest

我看了一下没有关于request最大大小的配置,请问有什么建议吗?新手求教,万分感谢。

fengjiachun commented 1 year ago

错误在网络层,找一下 bolt 目录的错误日志,调调 bolt 的参数

ReycoLi commented 1 year ago

错误在网络层,找一下 bolt 目录的错误日志,调调 bolt 的参数

感谢回复,调了一下bolt的netty相关参数,已经可以handle 100M请求了。但请问在哪里查bolt的错误日志,sofatJRaft Replicate过程中没有打印bolt的错误日志,只是给了那个CLIENT_SEND_ERROR,我的理解是错误日志应该不需要打开debug level log也能看到把。同时我也去node本地的raft folder下找了,也没有找到bolt的错误日志。

killme2008 commented 1 year ago

~/logs 下面。

ReycoLi commented 1 year ago

~/logs 下面。

找到了, 谢谢。