先看现象。两台机器挂到负载均衡后面,用户登录后刷新就掉线,后台操作经常要重新登录。
真正麻烦的地方在于,几个原因的现象几乎一样。会话存在本机内存里,请求被分发到另一台。也可能是没有开启会话保持。
还有一种情况,两台机器的会话密钥不一致。
先确认会话存储方式
grep -rn 'session.save_handler' /etc/php.ini
接着把会话改到共享存储
redis-cli -h 缓存地址 ping
随后在负载均衡上开启会话保持
echo '在监听配置中开启会话保持'
等前面都确认过,再验证多台机器登录态一致
curl -I -b cookies.txt https://域名/admin
白天有业务在跑,能验证的部分都压到了晚上做。
当时还开着另一个排查窗口,两边日志对照着看才定位到。
怎么算真的好了,看的是同一批现象。请求分发到任意后端都保持登录状态,用户不再被踢。
会话保持只是临时方案,后端扩容或重启仍会丢;共享存储加统一密钥才是长期做法。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。