Closed luckyxiaoqiang closed 10 months ago
我们的应用使用 JRaft 作为持久化模块,部署在 K8S 中(Statefulset)。Raft 集群节点之间通过 K8S headless 域名通信。应用存在多租户场景,同一个 K8S 集群中会部署多个应用集群。
更新前 app-cluster-a-0 的 IP 10.10.10.10 在更新后被分配给了 app-cluster-b-0。
由于域名解析存在延迟,包括 JVM、GRPC、K8S CoreDNS 等各个层面,更新后集群 a 中的节点(app-cluster-a-1 或 app-cluster-a-2)通过域名连接 app-cluster-a-0 时,实际可能连接到 app-cluster-b-0 节点。会带来的 2 大问题:
问题与 Issue https://github.com/sofastack/sofa-jraft/issues/683 有些类似,但 PR https://github.com/sofastack/sofa-jraft/pull/690 并不能彻底解决我们面临的问题。
期望 JRaft 能够解决 DNS 解析延迟带来的问题:
不同 Raft 集群非预期通信导致 Raft 状态异常
java -version
uname -a
jraft 当然有严格校验 cluster 和peer DNS 延迟不是一个类库能完全解决的,操作系统, jvm 都可能去缓存这个信息,我觉的你们更应该想的是怎么去避免这种 ip 的短期复用。
应用层或部署环境,是可以去做一些工作来尽量避免 IP 短期复用问题的
Describe the bug
我们的应用使用 JRaft 作为持久化模块,部署在 K8S 中(Statefulset)。Raft 集群节点之间通过 K8S headless 域名通信。应用存在多租户场景,同一个 K8S 集群中会部署多个应用集群。
更新前 app-cluster-a-0 的 IP 10.10.10.10 在更新后被分配给了 app-cluster-b-0。
由于域名解析存在延迟,包括 JVM、GRPC、K8S CoreDNS 等各个层面,更新后集群 a 中的节点(app-cluster-a-1 或 app-cluster-a-2)通过域名连接 app-cluster-a-0 时,实际可能连接到 app-cluster-b-0 节点。会带来的 2 大问题:
问题与 Issue https://github.com/sofastack/sofa-jraft/issues/683 有些类似,但 PR https://github.com/sofastack/sofa-jraft/pull/690 并不能彻底解决我们面临的问题。
Expected behavior
期望 JRaft 能够解决 DNS 解析延迟带来的问题:
Actual behavior
不同 Raft 集群非预期通信导致 Raft 状态异常
Steps to reproduce
Minimal yet complete reproducer code (or GitHub URL to code)
Environment
java -version
):uname -a
):