直接回答

故障转移时不丢会话的核心思路是不依赖单机内存存会话。主流做法有三种:把会话存入外部共享存储(如 Redis)、使用客户端自包含令牌(如 JWT)、或让负载均衡器做会话保持(sticky session)配合会话复制。前两种在节点故障时可无缝切换,是更稳健的选择。

展开解析

共享会话存储最常用:所有应用节点读写同一个 Redis 集群,任一节点宕机,流量切到其他节点后会话依然有效,Redis 自身再靠主从/哨兵保证高可用。JWT 把会话数据签进令牌由客户端携带,服务端无状态,天然免疫单点故障,但无法即时吊销、体积较大,适合短过期+刷新令牌组合。Sticky session 配合节点间会话复制成本最低,但切换时仍可能丢失未同步的数据,扩缩容也不灵活。还要注意:会话要有合理 TTL、故障转移要演练、异地多活下会话复制会引入延迟与一致性权衡。追问:JWT 如何踢人下线、Redis 挂了会话层如何降级。