最近项目接触到了redis cluster,现在趁着使用做一下总结,记录一下遇到过的问题,简单的概述一下常用到的命令和功能。
本篇文章主要是以运维的角度去讲述如何去更好的规划redis cluster和跳坑。
redis cluster 官方文档: https://redis.io/topics/cluster-tutorial
 
一、redis cluster 是什么
    redis cluster是官方redis 3.0版本之后推出的集群方案,之前类似的方案还有豌豆荚的codis集群方案、twemproxy方案,
不过twemproxy有个非常大的弊端就是不能在线扩容节点,这就比较尴尬了。redis cluster发布之后,截至目前为止,redis
cluster已经达到了成熟的程度,很多企业已经在生产系统使用,替换原有的twemproxy的分片方法。
 
二、redis cluster 的优点
 
  1. 支持数据分片功能,可以将数据分配到不同的实例上。
  2. 服务的高可用性、故障自动转移,最大程度避免单点故障
  3. 在线水平扩展能力,可以在线添加节点,转移数据等
  4. 无中心架构,各个节点度等。
  5. 降低原有的数据分片方案的复杂度,节省硬件资源
  6. 系统瓶颈更少,客户端直连方式。
   以上这些优点足以是我们选用redis cluster了。
 
三、redis cluster 应用最佳实践(跳坑)
 
  • 关于redis cluster实例的规划
       为什么要用redis cluster呢,对于运维来讲就是实现服务的高可用,避免单点故障。笔者遇到的最坑的就是前人创建的集群的时候没有添加副本数,
是9台服务器上每台启动24个实例,然后用这216个实例创建的一个cluster。直到上次其中的一台服务器内存故障,导致服务器down机,接着集群的部分
数据不可用,客户服务受到了严重的影响。创建集群的时候建议必须增加一个副本数,不然集群只是分片的作用,达不到高可用的要求。
      redis是使用内存的数据库,规划的时候可按照服务器的内存大小来规划,我们研发说单个实例建议最大设置为20G,是官方文档中看到的,但是我还没找到。集群的最多节点建议是1000个
      笔者目前维护的最大的集群为: 30台512G内存服务器,每台服务器上启动24个实例,共720个实例创建的一个cluster集群,副本数为1,相当于是360个
主和360个从节点。下图为30台机器的内存已使用的监控和整体的汇总展示。

 
  • 服务器数据的选择
   在服务器数据的选择上,建议采用偶数数据的机器,原因如下:
假如选用redis cluster官方教程里面的方法,拿三台主机A、B、C,每台机器上启动两个实例,那么他们的主从关系则为:
A <----B1
A1 ---->B
C <----C1
没错,你会发现,C服务器自己是自己的从,那么问题来了,加入C服务器故障,那么你的数据还是丢失的,所以说你的架构上是存在问题,不是高可用,依然存在单点,此时假如你再增加一台服务器D,那么C和D则会交叉的进行主从关系。
当然,上面这个主从关系是使用redis创建集群工具时候默认的bug,如果你一定要三台,每台上启动两个这样呢,你也可以这样做:
先使用A\B\C创建集群,全部是主节点,然后手动添加从节点,这样交叉添加也可以做到高可用。但是当你实例很多的时候你就力不从心了,所以建议采用偶数数目的服务器。
 
  • 监听地址需要注意的地方
          在配置文件中bind地址的时候千万不要用127.0.0.1,因为是要和其他服务器进行通信的,要采用真是的内网ip进行监听,不然你的集群是创建不成功的。
 
  • 不在支持多数据库
           根据官方文档的描述,redis cluster 是不支持select db的,redis单实例的时候是支持多数据库的。
  • 参数优化
          建议把cluster-require-full-coverage参数设置为no,即使单个slot异常,也不会出现大量的请求异常。
          把cluster-node-timeout参数设置一个较小的值,比如6000(6秒)。这个参数建议不要设置太小或者太大,30s-60s即可。
 
 
以上便是在维护redis cluster的遇到的一些坑,分享给大家,希望大家提前避免。
 
 
 
 
 
 
 

redis cluster 实践总结的更多相关文章

  1. Redis Cluster 实践

    一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...

  2. Redis Cluster 集群三主三从高可用环境搭建

    前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用. Window环境下载地址:https://github.com/tporadowski/redis ...

  3. redis集群与分片(2)-Redis Cluster集群的搭建与实践

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  4. Redis Cluster集群的搭建与实践

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  5. Redis进阶实践之十一 Redis的Cluster集群搭建

    一.引言      本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...

  6. Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)

    说明:无论是否已经搭建好集群,还是使用什么样的客户端去连接,都是必须把全部IP列表集成进去,然后随机往其中一个IP写. 这样做的好处: 1.随机IP写入之后,Redis Cluster代理层会自动根据 ...

  7. Redis Cluster 理论知识

    http://www.ttlsa.com/redis/redis-cluster-theoretical-knowledge/ Redis 集群的 TCP 端口(Redis Cluster TCP p ...

  8. codis集群和redis cluster的优劣对比

    1.codis架构如下: (1)Codis是一整套缓存解决方案,包含高可用.数据分片.监控.动态扩态 etc..走的是 Apps->代理->redis cluster,一定规模后基本都采用 ...

  9. Redis进阶实践之十三 Redis的Redis-trib.rb文件详解

    一.简介     事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的角度来阐述一下,对第一次使用的人来说很重要.redis-trib.rb是redis官方推出的管理re ...

随机推荐

  1. Splash动画启动app时空白屏

    相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_T ...

  2. java sqlite配置和自定义函数

    资源 jetty Jetty Downloads地址 sqlite sqlite JDBC Driver 地址:bitbucket代码托管 和 Github代码托管 jetty配置sqlite 在je ...

  3. 【Linux】 awk应用

    1  统计机器上处于不同状态的所有TCP连接的个数(TCP连接是有状态连接,包含SYN_RECV, ESTABLISHED, TIME_WAIT, FIN_WAIT0, FIN_WAIT1等多种状态, ...

  4. hive job oom问题

    错误信息例如以下:Container [pid=26845,containerID=container_1419056923480_0212_02_000001] is running beyond ...

  5. Android 实现的EditText响应drawableRight的点击事件

    1.自定义Edittext 实现右侧图标点击清空 package com.dxw.live.view; import android.content.Context; import android.g ...

  6. oracle 11g ocr 冗余配置

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/royjj/article/details/30506343  oracle 11g ocr 冗余 ...

  7. Java基础之I/O流

    一.数据流的基本概念 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以是一段.一段地向数据流管道中写入数据, ...

  8. 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

    参考: 1,使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)http://blog.csdn.net/xdwyyan/article/details/4319 ...

  9. html--<meta>设置缓存

    html头文件设置常用之<meta>设置缓存   <meta http-equiv="pragma" content="no-cache"&g ...

  10. PS图片透明处理方法

    // http://www.3lian.com/edu/2014/06-18/149890.html 今天想把图片背景做成透明效果,以前叫美工的妹纸帮忙做过,自己没留意学. 今天需要做这个东西,特别记 ...