在云服务器部署redis集群遇到的问题 - 简书

标签: | 发表时间:2020-06-03 10:59 | 作者:
出处:https://www.jianshu.com

具体环境:两台云端服务器 专有网络
一台云端服务器 经典网络
软件环境: jedis 2.9.0 redis3.2.10
1、先是设置了redis密码再集群,见 http://blog.csdn.net/jtbrian/article/details/53691540
补充点: /usr/lib/ruby/gems/1.8/gems/redis-3.3.0/lib/redis/client.rb这里的 client.rb文件路径是按照你安装ruby、在通过gems安装redis3.3的时候的路径(不熟悉ruby的软件安装)。像我通过rvm安装的ruby, client.rb就在 /usr/local/rvm/gems/ruby-2.3.3/gems/redis-3.3.3/lib/redis/client.rb路径因ruby的安装方法而异。

2、集群之后,在本地使用jedisCluster进行操作的时候出现 Could not get a resource from the pool
原因:出现这个原因有很多,例如:确实分配资源不够。但是我只是写了一个小demo,而且集群的配置确实没问题,可以在本地通过redis-cli访问集群。而且我的jedisCluster还有神奇的地方,只是个别Master无法操作(会报异常),其他点操作正常。
解决方法:
1、先研究jedisCluster源码,发现jedisCluster这么处理集群的:
1)依次获取集群中的 HostAndPort
2)对于每个 HostAndPort获取各CLusterNodes节点消息,并保存。

2、jedisCluster是如何获取各ClusterNodes节点消息?
他是通过命令 cluster nodes获取的,也就是根据 服务器端产生的 nodes-xxx.conf( xxx为端口号)。

3、登陆服务器端,查看对应cluster 配置文件, 我的是默认存放在 /nodes-6379.conf。可以发现,在阿里云的专有网络里面,主机只拥有内网网卡,所以cluster只绑定了内网地址。
修改方法,先停止该节点,然后修改 /node-6379.conf

    053420032000043aa9983d5b30e09c83258b3186 内网IP地址:6379 myself,master - 0 0 1 connected 0-5460

改为

    053420032000043aa9983d5b30e09c83258b3186 你的公网IP地址:6379 myself,master - 0 0 1 connected 0-5460

其他无需改动。

后感

因为在redis的配置文件里面已经说明cluster是自动产生的配置文件,一般情况下无需自己去修改,但是有时候例如我这种情况,只拥有内网网卡,公网IP地址估计是通过NAT转换到私有地址的话,自己不尝试去修改一下配置文件,也许问题一直都无法解决。还有能找到这个bug也只是恰好三台服务器里面有一台还是经典网络帮我配置好了公网网卡,所以jedisCluster通过这个节点可以访问所有的Master。

另附源码: jedis-2.9\src\main\java\redis\clients\jedis\JedisClusterConnectionHandler.java

    private void initializeSlotsCache(Set<HostAndPort> startNodes, GenericObjectPoolConfig poolConfig, String password, String clientName) {
    for (HostAndPort hostAndPort : startNodes) {
      Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort());
      try {
        if (password != null) {
          jedis.auth(password);
        }
        if (clientName != null) {
          jedis.clientSetname(clientName);
        }
        cache.discoverClusterNodesAndSlots(jedis);
        break;
      } catch (JedisConnectionException e) {
        // try next nodes
      } finally {
        if (jedis != null) {
          jedis.close();
        }
      }
    }
  }

jedis-2.9\src\main\java\redis\clients\jedis\JedisClusterInfoCache.java:

    private void discoverClusterSlots(Jedis jedis) {
    List<Object> slots = jedis.clusterSlots();
    this.slots.clear();

    for (Object slotInfoObj : slots) {
      List<Object> slotInfo = (List<Object>) slotInfoObj;

      if (slotInfo.size() <= MASTER_NODE_INDEX) {
        continue;
      }

      List<Integer> slotNums = getAssignedSlotArray(slotInfo);

      // hostInfos
      List<Object> hostInfos = (List<Object>) slotInfo.get(MASTER_NODE_INDEX);
      if (hostInfos.isEmpty()) {
        continue;
      }

      // at this time, we just use master, discard slave information
      HostAndPort targetNode = generateHostAndPort(hostInfos);
      assignSlotsToNode(slotNums, targetNode);
    }
  }

`

相关 [服务器 redis 集群] 推荐:

在云服务器部署redis集群遇到的问题 - 简书

- -
具体环境:两台云端服务器 专有网络. 软件环境: jedis 2.9.0 redis3.2.10. 1、先是设置了redis密码再集群,见. /usr/lib/ruby/gems/1.8/gems/redis-3.3.0/lib/redis/client.rb这里的. client.rb文件路径是按照你安装ruby、在通过gems安装redis3.3的时候的路径(不熟悉ruby的软件安装).

Redis服务器监控工具redis-live

- - 企业架构 - ITeye博客
Redis服务器监控工具redis-live. 413 views     comments 暂无评论. 目前来说,越来越多的使用多了NOSQL的业务,但是这方面的监控缺不多. 今天给大家介绍几个专业监控redis服务的工具,便于大家进行redis性能分析. 这个工具是用ruby语言写的,ruby是小鬼子弄出来的,个人真心觉得比较难用.

Redis集群功能说明

- gOODiDEA - NoSQLFan
虽然目前可以通过在客户端做hash的方法来构建Redis集群,但Redis原生的集群支持还是颇受期待. 本文是对Redis集群功能官方描述文档的一个翻译,译者是@PPS萝卜同学,也感谢他的投稿分享. 这篇文档主要是为了说明正在进展中的Redis集群功能. 文档主要分为两个部分,前一部分主要介绍我在非稳定分支已完成的代码,后一部分主要介绍还有哪些功能待实现.

redis集群(主从配置)

- - 操作系统 - ITeye博客
市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实. 今天主要内容便是redis主从实现简单的集群,实际上redis的安装配置砸门ttlsa之前就有个文章,废话少说,进入正题吧.

Redis集群明细文档

- - CSDN博客架构设计推荐文章
  Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式). 目前根据文档已经看到Redis正在开发集群功能,其中一部分已经开发完成,但是具体什么时候可以用上,还不得而知. 文档来源: http://redis.io/topics/cluster-spec.

BDRP分布式redis集群

- - 百度运维团队技术博客
BDRP(baidu distributed redis platform)是包含 twemproxy, redis,redis-sentinel等多个模块开发的分布式redis平台. bdrp已经在github上进行了开源, bdrp的github项目点这里. 目前redis集群架构主要有以下几个组件: twemproxy:redis的代理系统,可以选择多种数据分片算法 redis:集群的redis存储节点 sentinel:redis官方的集群高可用组件,可以监控redis主节点故障,并进行主备切换.

Redis集群“倾斜”问题

- - 今天
对分布式存储系统的架构和运维管理,如何保证每个Node的数据存储容量和请求量尽量均衡,是非常重要的. 本文介绍Redis大集群运维过程中,常见导致数据和请求量“倾斜”的场景,及规避措施. Redis数据容量或请求量严重”倾斜”的影响. 以下从运维的角度解释,Redis数十节点的集群,出现数据容量和请求量倾斜情况下,存在的一些痛点:.

Redis核心解读–集群管理工具(Redis-sentinel)

- - NoSQLFan
Redis作为高性能的key-value存储,一直在单实例上表现良好,但是长期以来一直缺乏一种官方的 高可用方案支持. 于是 Redis-sentinel应运而生,提供了对客户端透明的高可用支持. 下面文章对Redis- sentinel的原理进行了系统的讲解. 文章来源: www.wzxue.com.

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

- - 开源软件 - ITeye博客
本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求;.

Redis cluster tutorial Redis集群教程 官方教程 翻译 (一)

- - 互联网 - ITeye博客
这篇文档是一个总体介绍, 不使用复杂的分布式概念. 本文介绍如何建立一个集群, 测试和使用, 详细说明请参看 Redis Cluster specification. 注意, 如果你打算实际使用Redis集群, 推荐看正式的规范文档. Redis集群现在还在alpha测试, 请加入Redis邮件列表, 或Github repository的讨论组.