一个排查了许久的bug,终于解决,关于redis的线程池

JumpServer 社区版 v3.10.9,
运行方式:docker 多节点负载均衡,外置Mysql+Redis Sentinel 部署

故障典型,web页面上反复提示:server error occur, contact administrator,或者 账号已退出,请重新登录 ,日志显示redis连接异常,实测redis无故障,且无错误日志。

通过检查日志,定位到问题,怀疑为redis连接池问题,按论坛教程,还有github的issues,在处理后问题依旧,通过修改jms_core 的/opt/jumpserver/apps/jumpserver/settings/base.py文件,恢复正常

import os
import platform
import re
import socket  #增加一行


……
ka_options = {
   socket.TCP_KEEPIDLE: 10,
   socket.TCP_KEEPINTVL: 5,
   socket.TCP_KEEPCNT: 5
}

REDIS_OPTIONS = {
    "REDIS_CLIENT_KWARGS": {
        "health_check_interval": 30
    },
    "CONNECTION_POOL_KWARGS": {
        'max_connections': 100,
        'retry_on_timeout': True,
        'socket_keepalive': True,
        'socket_keepalive_options': ka_options,
        'check_connection': True
    }
}

……

可以在issues上问一下研发