redis集群外网访问连接不上--问题总结

RedisCluster 总共八个节点,主从各四个,端口为7001–7008

集群创建命令如下

./redis-cli --cluster create 47.94.80.41:7001 47.94.80.41:7002 47.94.80.41:7003 47.94.80.41:7004 47.94.80.41:7005 47.94.80.41:7006 47.94.80.41:7007 47.94.80.41:7008 --cluster-replicas 1

添加成功后会在每个节点下生成一个节点配置文件nodes.conf,7001节点如下

a32685e732726e19726750e73ac701f2c1a5c633 172.17.88.176:7001@17001 myself,master - 0 1603443306000 1 connected 333-5460
1600191ac47472b4d154025ab3ee388c8730c9e1 47.94.80.41:7008@17008 slave c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 0 1603443310208 7 connected
e0850c61610ee4986e05ff17eac65bf8e77e5008 47.94.80.41:7004@17004 slave a32685e732726e19726750e73ac701f2c1a5c633 0 1603443310003 4 connected
aed092db54171729cc0c739e913339d4b0af3e2c 47.94.80.41:7003@17003 master - 0 1603443310000 3 connected 11256-16383
8a67079c69c720bc3b6c2e875cc38d1299394a77 47.94.80.41:7002@17002 master - 0 1603443310000 2 connected 5795-10922
dcfcb437f2d306588c208bd405c6819866736050 47.94.80.41:7006@17006 slave aed092db54171729cc0c739e913339d4b0af3e2c 0 1603443310000 6 connected
c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 47.94.80.41:7007@17007 master - 0 1603443310000 7 connected 0-332 5461-5794 10923-11255
50bcd19f87b1c0999640454660ad41663999473a 47.94.80.41:7005@17005 slave 8a67079c69c720bc3b6c2e875cc38d1299394a77 0 1603443311006 5 connected
vars currentEpoch 7 lastVoteEpoch 0

然后使用JedisCluster客户端连接,代码示例如下

public static void main(String[] args) {
    //连接池配置,不指定有默认值
    JedisPoolConfig config = new JedisPoolConfig();
    Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7001));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7002));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7003));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7004));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7005));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7006));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7007));
    jedisClusterNode.add(new HostAndPort("47.94.80.41", 7008));
    JedisCluster jcd = new JedisCluster(jedisClusterNode, config);
    jcd.set("name", "zhaoyun");
    String value = jcd.get("name");
    System.out.println(value);
}

连接时会报如下错误 Too many Cluster redirections?
在这里插入图片描述
在这里插入图片描述
连接不上原因及解决方式如下:

  1. redis配置文件 注释掉 bind 127.0.0.1 或者配置为 bind 0.0.0.0
  2. 安全组配置7001-7008端口开放
  3. 创建集群时使用外网ip,如下
./redis-cli --cluster create 47.94.80.41:7001 47.94.80.41:7002 47.94.80.41:7003 47.94.80.41:7004 47.94.80.41:7005 47.94.80.41:7006 47.94.80.41:7007 47.94.80.41:7008 --cluster-replicas 1
  1. 修改节点配置文件nodes.conf

即使用外网ip创建集群,生成的节点配置文件nodes.conf 也会存在内网ip ,此处47.94.80.41为外网,172.17.88.176为内网,可以看到每个当前节点对应的ip都是内网,如172.17.88.176:7001@17001 myself,master,myself 就是表示这个配置为当前节点,关闭集群,手动把内网ip改成外网ip重启即可。集群访问应该是根据这个nodes.conf 配置的ip端口访问。

a32685e732726e19726750e73ac701f2c1a5c633 172.17.88.176:7001@17001 myself,master - 0 1603443306000 1 connected 333-5460
1600191ac47472b4d154025ab3ee388c8730c9e1 47.94.80.41:7008@17008 slave c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 0 1603443310208 7 connected
e0850c61610ee4986e05ff17eac65bf8e77e5008 47.94.80.41:7004@17004 slave a32685e732726e19726750e73ac701f2c1a5c633 0 1603443310003 4 connected
aed092db54171729cc0c739e913339d4b0af3e2c 47.94.80.41:7003@17003 master - 0 1603443310000 3 connected 11256-16383
8a67079c69c720bc3b6c2e875cc38d1299394a77 47.94.80.41:7002@17002 master - 0 1603443310000 2 connected 5795-10922
dcfcb437f2d306588c208bd405c6819866736050 47.94.80.41:7006@17006 slave aed092db54171729cc0c739e913339d4b0af3e2c 0 1603443310000 6 connected
c722d4c0a7a10178322dfb52b0c56dbe2e3ae671 47.94.80.41:7007@17007 master - 0 1603443310000 7 connected 0-332 5461-5794 10923-11255
50bcd19f87b1c0999640454660ad41663999473a 47.94.80.41:7005@17005 slave 8a67079c69c720bc3b6c2e875cc38d1299394a77 0 1603443311006 5 connected
vars currentEpoch 7 lastVoteEpoch 0
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值