玩转Redis集群(下)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

接上一篇《玩转Redis集群(上)》,我们来继续玩~

Redis集群操作实践

数据的分布性

wKioL1jBWouwIK0JAADFSCC9LRs672.png

从上面的操作,你可以看到,当存储某一个数据的时候,会分配一个slot,而这个slot从属于某一个Master,也就是说你需要明白,数据是分布的存储在Redis集群当中的。


在线水平扩容

Redis Cluster有一个非常重要的特点就是可以在线的添加节点,实现不影响业务的水平扩容。在这里,我将会在原来6个redis节点上,再添加2个redis节点。做法和以前一致,注意修改redis.conf,然后在启动8007、8008这2个redis实例。

wKioL1jBWynSIlw1AAAtrPi5eqc891.png


wKiom1jBW03B5vC3AACQSpX0GUo758.png


wKioL1jBW2nhGjwkAABVgXnJldk477.png

其实,目前虽然启动了新加的2个redis实例,但是它们是不属于集群的。下面,我们来让它们加入集群中。


wKiom1jBW47yY6OoAAC_UBSuTwI350.png


1
2
3
. /redis-trib .rb add-node 192.168.99.121:8007 192.168.99.121:8006
 
. /redis-trib .rb add-node 新节点 集群中已经存在的节点


在往集群中添加节点A的时候,需要提供一个在集群中已经存在的节点B的信息。因为知道了B的信息,就知道了整个集群的信息。为什么这么说呢,来,我们看一个文件,你就知道了。

wKiom1jBW-LijIu_AADh3t7Ptzg879.png

要知道集群中的每一个节点都有这么一个文件,存储着集群中每一个节点的信息:节点的角色、节点的ID、连接状态、slot范围、IP/PORT信息等。仔细观察图中,你可以发现,新加入的8007节点,实际上被默认为master节点,并且没有slot分配!这说明,新加入的节点现在还不可以存储数据,因此我们要为新节点分配slot槽。

1
[root@mydream121 bin] # ./redis-trib.rb reshard 192.168.99.121:8001


要知道slot都分配在master上,因此其实我们要做的就是从集群的masters上进行重新分配。上面的命令需要指定一个master节点进行reshard分片。

wKioL1jBXDHj8ktvAACThrpWMj8439.png


图中要为新加入的节点8007分配500个slot,而且分配的方式是"all",all是什么意思呢?all代表从已经存在的所有的master上均匀的分配一部分slot给8007。当然你可以通过"done"来指定某一个master进行分配。注意分配给8007是通过节点ID来指定的。

wKiom1jBXFjxJpd1AABoB7e9DIE714.png

按照上面的操作,我将8008节点也加入集群中,我的想法是让8008成为8007的从节点。既然是从节点,就不需要分配slot槽。注意到add-node方式加入的节点,默认就是master节点,因此这里我们得利用replicate指定主节点。

1
[root@mydream121 bin] # ./redis-trib.rb add-node 192.168.99.121:8008 192.168.99.121:8001

wKiom1jBXJPxE3IhAADqFZt8QPM182.png

那么到现在,我们就在线完成了对Redis集群的水平扩容。那么如何删除节点呢?删除节点时,数据怎么办呢?对于从节点,删除就删除了,并不要紧,关键是主节点,因为主节点上有slot。因此,在删除主节点前,我们要对主节点的slot进行重新分配,完成数据的迁移。这里我就不再演示了,直接给出命令。

1
2
删除主节点:先reshard + 后del-node
删除从节点:直接del-node

Redis实现Session共享

Redis可以被用于Session共享,不过现在CAS实现单点登录更容易些。(CAS以后为大家介绍)

wKioL1jBXNCy75npAABUhyVjheY404.png

不论是Nginx挂了,还是其中的Tomcat挂掉,都不会丢失Session信息。在实现上,有现成的插件,比如:https://github.com/jcoleman/tomcat-redis-session-manager 

Java操作Redis

在单机Redis环境:Jedis

这个没什么好说的,就是给定IP/PORT实例化Jedis操作即可。

1
Jedis jedis =  new  Jedis( "192.168.99.121" 8001 );


在多台Redis环境:ShardedJedis+ShardedJedisPool

wKioL1jBXSOD9bKKAABja7mHgR0762.png


这是一种切片的方式来操作redis,通过hash而均匀的分配到pool里的redis机器中。

在Redis集群环境:JedisCluster

wKiom1jBXVCwPuJDAAC9YMiQICw820.png


与Spring整合

我们直接来看配置文件吧!

wKioL1jBXXqz1GyPAACNC1_whOI374.png


同上文Java操作Redis集群的代码对比下,其实XML就是代码的映射。只不过通过spring的方式,帮助我们配置生成了一个bean:redisCluster。我们可以通过注入的方式得到redisCluster,然后我们想干啥就可以干啥,就这么简单~


到这里,redis集群部分整个就结束了,下一篇文章是关于什么的呢,我不告诉你,哈哈~

本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1904954,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
73 12
|
12天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
401 0
|
12天前
|
负载均衡 监控 NoSQL
Redis的几种主要集群方案
【5月更文挑战第15天】Redis集群方案包括主从复制(基础,读写分离,手动故障恢复)、哨兵模式(自动高可用,自动故障转移)和Redis Cluster(官方分布式解决方案,自动分片、容错和扩展)。此外,还有Codis、Redisson和Twemproxy等工具用于代理分片和负载均衡。选择方案需考虑应用场景、数据量和并发需求,权衡可用性、性能和扩展性。
193 2
|
12天前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
186 2
|
12天前
|
存储 NoSQL Redis
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(下)
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群
231 1
|
12天前
|
监控 NoSQL Redis
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(上)
Redis源码、面试指南(5)多机数据库、复制、哨兵、集群
281 0
|
12天前
|
存储 监控 NoSQL
Redis哨兵&分片集群
Redis哨兵&分片集群
34 0
|
12天前
|
NoSQL 算法 Java
深入浅出Redis(八):Redis的集群模式
深入浅出Redis(八):Redis的集群模式
|
12天前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
159 10
透视Redis集群:心跳检测如何维护高可用性
|
12天前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
111 11
Redis集群模式:高可用性与性能的完美结合!