Redis Cluster

Redis项目实战(二)---Redis集群原理

点点圈 提交于 2020-11-22 19:28:48
一、 Redis官方推荐集群方案:Redis Cluster 注:适用于redis3.0以后版本(官方集群版本); redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了redis分布式的需求,当一个redis节点挂了可以快速的切换到另一个节点。   简介: 1)设计上使用了去中心化,去中间件,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。 2)哈希槽设计,使用 哈希槽 (hash slot) 的方式来分配数据,redis cluster 默认分配了 16384 个slot,每set一个key 时,会用 CRC16 算法来取模得到所属的 slot ,然后将这个key 分到哈希槽区间的节点上,即: CRC16(key) % 16384 。 优点:去中心化,无中心节点    (1)数据按照 slot 存储分布在多个 Redis 实例上,能够平滑的进行扩容/缩容节点;由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。 (2)自动故障转移(节点之间通过 Gossip 协议交换状态信息,进行投票机制完成 Slave 到 Master 角色的提升),提高了系统的可扩展性和高可用性。 缺点:严重依赖外部 Redis-Trib

redis-rdb-tools安装部署及使用

自古美人都是妖i 提交于 2020-11-22 18:52:46
redis-rdb-tools安装部署及使用 redis内存分析工具redis-rdb-tools安装部署 项目地址: https://github.com/sripathikrishnan/redis-rdb-tools 安装部署 安装Python2.7 下载redis-rdb-tools git clone https://github.com/sripathikrishnan/redis-rdb-tools.git 安装redis-rdb-tools pip2.7 install python-lzf cd redis-rdb-tools python2.7 setup.py install 常见用法: # 以json格式输出 > rdb --command json /var/redis/6379/dump.rdb # 以json格式输出,模糊查找 > rdb --command justkeyvals --key "user.*" /var/redis/6379/dump.rdb user003 fname Ron,sname Bumquist, user001 fname Raoul,sname Duke, user002 fname Gonzo,sname Dr, user_list user003,user002,user001 # 查找确定键信息 > redis

运维:终于不用再背着数万实例的Redis集群了!

♀尐吖头ヾ 提交于 2020-11-18 17:52:34
背景 小米的Redis使用规模很大,现在有数万个实例,并且每天有百万亿次的访问频率,支撑了几乎所有的产品线和生态链公司。之前所有的Redis都部署在物理机上,也没有做资源隔离,给管理治理带来了很大的困难。我们的运维人员工作压力很大,机器宕机网络抖动导致的Redis节点下线都经常需要人工介入处理。由于没有做CPU的资源隔离,slave节点打RDB或者由于流量突增导致节点QPS升高造成的节点CPU使用率升高,都可能对本集群或其他集群的节点造成影响,导致无法预测的时延增加。 Redis分片方式采用社区的Redis Cluster协议,集群自主分片。Redis Cluster带来了一定的易用性的同时,也提高了应用开发的门槛,应用开发人员需要一定程度上了解Redis Cluster,同时需要使用智能客户端访问Redis Cluster。这些智能客户端配置参数繁多,应用开发人员并无法完全掌握并设置这些参数,踩了很多坑。同时,由于智能客户端需要做分片计算,给应用端的机器也带来了一定的负载。 一、Why K8s 1、资源隔离 当前的Redis Cluster部署在物理机集群上,为了提高资源利用率节约成本,多业务线的Redis集群都是混布的。由于没有做CPU的资源隔离,经常出现某Redis节点CPU使用率过高导致其他Redis集群的节点争抢不到CPU资源引起时延抖动。因为不同的集群混布

SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

时光总嘲笑我的痴心妄想 提交于 2020-11-16 01:57:47
本文源码: GitHub·点这里 || GitEE·点这里 一、Redis集群简介 1、RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务宕机可以快速的切换到另外一个服务。redis cluster主要是针对海量数据+高并发+高可用的场景。 二、与SpringBoot2.0整合 1、核心依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>${spring-boot.version}</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${redis-client.version}</version> </dependency> 2、核心配置 spring: # Redis 集群 redis: sentinel: # sentinel 配置 master: mymaster nodes: 192.168.0.127:26379 maxTotal:

Redis 实现分布式锁

╄→尐↘猪︶ㄣ 提交于 2020-11-11 17:54:01
redis的常见部署方式: 1.单机 单点问题 2.mster-slave 读写分离,不能切换 3.哨兵 哨兵模式 通过哨兵监控节点,主节点宕机自动切换slave为master 4.cluster 基于槽点16348个槽点 多主多从,组合形成 Redis分布式锁要保证的几个方面: 1.互斥性 2.不能死锁 3.大多数节点正常,锁不能丢失。 分布式锁的实现方案: 1.可以直接通过 set key value px milliseconds nx 命令实现加锁, 通过Lua脚本实现解锁 存在的风险,锁所在的节点发生宕机,导致锁会丢失的。 2.Redission 实现 Redission在Redis的基础上实现Java驻内存数据网格。提供了一系列的分布式的Java常用对象,重入锁,读写锁,公平锁,红锁,还提供了很多的分布式服务。Redission提供了使用Redis的最简单和便捷的方式。 / 1.构造redisson实现分布式锁必要的Config Config config = new Config(); config.useSingleServer().setAddress( "redis://127.0.0.1:5379" ).setPassword( "123456" ).setDatabase( 0 ); // 2.构造RedissonClient RedissonClient

面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」

拟墨画扇 提交于 2020-11-10 05:37:10
这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制、剪辑、做 PPT、写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值。 1 面试题 Redis 是如何实现高可用的?它的实现方式有哪些? 2 涉及问题 什么是高可用? Redis 中高可用的实现方式有哪些? 各种实现方式的优缺点有哪些? 3 视频 视频内容如下: 4 答案 高可用是指通过设计减少程序不能提供服务的时间叫做高可用。 Redis 实现高可用的方式有四种: 持久化 主从同步(主从复制) Redis Sentinel Redis Cluster 1)持久化 持久化有三种方式: RDB(Redis DataBase)全量复制 AOF(Append Only File)增量复制 混合持久化(支持版本 Redis 4.0+) 持久化让 Redis 的数据不再丢失,当某个节点奔溃时,可以很快的重新启动或重新搭建一个 Redis 服务器端,加载持久化文件即可恢复 Redis 的正常运行,为 Redis 奔溃恢复节省了宝贵的时间。 更多介绍详见视频部分。 2)主从同步 提供的功能是从单机 Redis 变成多机 Redis。 提供两种模式:主从模式和从从模式。 主从模式, 如下图所示 : 从 从模式,如下图所示: 当主节点出现问题

基于redis-cluster搭建redis高可用集群

穿精又带淫゛_ 提交于 2020-11-10 01:53:24
本次,我们以6台redis实例搭建3个master和3个slave组成的集群。 第一步, 在/usr/local/redis/目录下创建一个名叫cluster的文件夹 cd /usr/local/redis mkdir cluster 然后在cluster下面创建7001-7006为名字的6个文件夹 mkdir 7001 第二步,在6个文件夹下分别建一个redis.conf文件 vi redis.conf ##端口 port 7001 ##开启集群模式 cluster-enabled yes ##生成集群的配置文件 cluster-config-file nodes.conf ##实例间通信的超时时间 cluster-node-timeout 5000 ##开启AOF持久化,会创建一个appendonly.aof的持久化文件 appendonly yes ##redis后台启动 daemonize yes #bind 0.0.0.0 ##关闭保护模式,允许外部访问 protected-mode no 每一个redis.conf的端口分别为7001-7006 第三步,把redis-server和redis-cli两个脚本复制到7001-7006文件加下面 第四步,分别进入6个文件夹,启动redis实例 ./redis-server ./redis.conf 第五步

Redis Cluster搭建高可用Redis服务器集群

混江龙づ霸主 提交于 2020-11-09 20:30:43
一、Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节点,当遇到单机内存、并发等瓶颈时,可以采用分布式方案要解决问题。 二、集群原理 Redis Cluster架构图 Redis Cluster集群采用了P2P的模式,完全去中心化,Redis把所有的Key分成了16384个slot,每个Redis实例负责其中一部分slot,集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新,Redis客户端可以在任意一个Redis实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。 其结构特点: 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 节点的fail是通过集群中超过半数的节点检测失效时才生效。 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。 redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster负责维护node<->slot<->value。 Redis集群预分好16384个桶,当需要在Redis集群中放置一个key

最中肯的Redis规范全在这了

被刻印的时光 ゝ 提交于 2020-11-08 13:35:56
Redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用。通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁、通用的思想去考虑问题,而不是绑定在某种实现上。 Redis 根据不同的用途,会有不同的持久化策略和逐出策略,所以,在使用和申请 Redis 集群前,请明确是用来做缓存还是存储。redis 的集群有主从和 cluster 两种模式,各有优缺点。以下规范不区分集群模式,我们分别从使用场景和操作限制两方面说明。 使用规范 冷热数据区分 虽然 Redis支持持久化,但将所有数据存储在 Redis 中,成本非常昂贵。建议将热数据 (如 QPS超过 5k) 的数据加载到 Redis 中。低频数据可存储在 Mysql、 ElasticSearch中。 业务数据分离 不要将不相关的数据业务都放到一个 Redis中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。 消息大小限制 由于 Redis 是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。 连接数限制 连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机宕机。请确保使用了正确的 Redis 客户端连接池配置。 缓存 Key 设置失效时间

这可能是最中肯的Redis规范了

杀马特。学长 韩版系。学妹 提交于 2020-11-08 10:12:09
点击上方蓝色“ 方志朋 ”,选择“设为星标” 回复“ 666 ”获取独家整理的学习资料! 来源:小姐姐味道 redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用。通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁、通用的思想去考虑问题,而不是绑定在某种实现上。 Redis 根据不同的用途,会有不同的持久化策略和逐出策略,所以,在使用和申请 Redis 集群前,请明确是用来做缓存还是存储。redis 的集群有主从和 cluster 两种模式,各有优缺点。以下规范不区分集群模式,我们分别从使用场景和操作限制两方面说明。 使用规范 冷热数据区分 虽然 Redis支持持久化,但将所有数据存储在 Redis 中,成本非常昂贵。建议将热数据 (如 QPS超过 5k) 的数据加载到 Redis 中。低频数据可存储在 Mysql、 ElasticSearch中。 业务数据分离 不要将不相关的数据业务都放到一个 Redis中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。 消息大小限制 由于 Redis 是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。 连接数限制 连接的频繁创建和销毁,会浪费大量的系统资源