项目场景:
redis是一款高效的内存存储工具,通过常用于高速缓存数据。当调试公司代码时,遇到外网访问redis服务器的问题,记录解决问题的调试过程,以方便有类似问题的伙伴借鉴
问题描述
当前项目基于spingMVC+dubbo框架,并采用redis做缓存,整个系统被拆分为16个独立项目,都做为微服务并单独步署。在调试项目时遇到开发机联接测试机redis服务器报错,Could not get a resource from the pool
原因分析:
获取不到资源,的原因主要还是redis的配置问题导致的,而处理docker中的redis的设置
当前很多服务一般情况下都会部署在docker中,笔者也不例外,docker默认启动时与宿主机的网络模式为桥接模式(bridge),在这种模式下,docker会为每个容器创建一个虚拟网络接口,并将这个接口连接到一个内部的网络桥接器。每个容器都有自己的内部IP地址,所以当在这种模式下启动redis集群时,
解决方案:
获取不到资源,的原因主要还是redis的配置问题导致的,而处理docker中的redis的设置
在redis中的配置主要是2点
1)redis.conf中的bind配置
把bind 的ip地址设置为0.0.0.0
bind 0.0.0.0
2)启动集群时指定docker宿主机的ip
使用–cluster-announce-ip 192.168.x.x(换成宿主机能被外网访问的ip)
再来启动redis集群,命令为如下样子:
redis服务服务1:
redis-server 7000-redis.conf --cluster-announce-ip 192.168.0.x
redis-server 7001-redis.conf --cluster-announce-ip 192.168.0.x
redis-server 7002-redis.conf --cluster-announce-ip 192.168.0.x