本人在服务器上搭建了redis集群,并且经过测试集群一切运行正常,但是连接时发现报错:
"dial xxx i/o timeout"
我的代码是这样的

然后我通过连接每个redis节点都是正常的

经过我的一顿分析,因为我的redis是搭建在服务器上的,并且配置文件中bind的是内网ip,而我单个节点通过公网ip访问确实没有问题,但是一使用集群模式就会自动使用集群中配置的ip,即内网ip,这样就导致了本地无法访问的该ip
解决办法:
添加配置,修改每个集群节点
添加NewClient配置后会根据配置Addrs的输了进行循环
opt会返回当前节点的信息,我们可以从从获取到返回的配置的内网ip

userPassForAddr是自定义的函数,通过传入的内网ip对比端口号,返回公网ip,从而实现将每个节点改为公网ip,这样集群就能正常连接了

另外我还有2中解决办法,日后有空了更新
作者在服务器搭建Redis集群,测试运行正常,但连接报错。经分析,因Redis配置文件bind内网IP,集群模式自动用内网IP致本地无法访问。解决办法是添加配置,修改集群节点,通过自定义函数将内网IP转为公网IP,使集群正常连接,还表示后续会更新其他解决办法。

被折叠的 条评论
为什么被折叠?



