远程连接池无法获取Jedis
详细描述
- redis已经配置允许远程链接
- 远程可以直接连接 redis服务,如
192.168.0.100:6379
- jedis可以连接到 哨兵服务,默认端口
26379
- 使用Jedis哨兵连接池或者集群无法正常获取Jedis
原因分析
- 很可能是因为服务端配置哨兵或者集群时使用了本地回环网卡
127.0.0.1
作为地址,而没有使用外网网卡192.168.xxx.xxx
这样的地址 - 当远程主机和哨兵服务通信时,哨兵会将配置服务时使用的ip直接发送给远程主机,
- 如果配置文件中的地址是
127.0.0.1
,返回给远程Jedis的地址也是127.0.0.1
,Jedis会直接使用这个地址构建连接池。最终导致Jedis并没有创建到Redis服务器的连接池,程序发生获取Jeids实例失败,抛出Connect timed out
异常
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Connect timed out
- 如果配置文件中的地址是
解决方案
- 将redis哨兵服务中的地址改成其他网卡地址即可