• redis cluster 实践总结


     
    最近项目接触到了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,如果你一定要三台,每台上启动两个这样呢,你也可以这样做:
    先使用ABC创建集群,全部是主节点,然后手动添加从节点,这样交叉添加也可以做到高可用。但是当你实例很多的时候你就力不从心了,所以建议采用偶数数目的服务器。
     
    • 监听地址需要注意的地方
              在配置文件中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的遇到的一些坑,分享给大家,希望大家提前避免。
     
     
     
     
     
     
     
  • 相关阅读:
    浏览器 显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字。window.prompt()
    JS字符串转换为JSON对象的四种方法
    js中 json对象与json字符串相互转换的几种方式 $.parseJSON(jsonStr)json字符串转换为json对象
    C#变量命名规则(命名规范)
    C#中AppDomain.CurrentDomain.BaseDirectory(获取程序的基目录)及各种路径获取方法
    C# 的 Path.GetFileName、Path.GetExtension、Path.GetDirectoryName千一网络 http://www.itpow.com/
    js计算两个时间相差天数,获取时间的毫秒数之差
    C#将DataTable转化为List<T>
    https://www.cnblogs.com/sizhizhiyue/p/4820973.html asp.net后台导出excel的方法一:使用response导出excel
    .NET调用AS/400上的程序(.NET CALL AS/400 PGM)
  • 原文地址:https://www.cnblogs.com/topicjie/p/7258579.html
Copyright © 2020-2023  润新知