【深入解读Redis系列】Redis系列(五):切片集群详解
Redis系列深入解析】Redis系列(五):详解分片集群是一种存储大量数据的解决方案,Redis分片集群是一种将数据分布在多个节点上以提供更高性能的方法和可扩展性。数据被分成几块,每块存储在不同的节点上。
该架构有助于通过并行处理提高读写吞吐量,同时提供容错和高可用性。
例如,如果您有 25 GB 数据均匀分布在 5 个实例中,则每个实例只需存储 5 GB 数据。
这减少了每个实例的内存负担,并允许 fork 操作更快地执行,而不会阻塞主线程。
在实际业务中,处理大量数据是不可避免的,切片集群是一个很好的解决方案。
除了拆分集群之外,您还可以纵向扩展或横向扩展以容纳更多数据。
纵向扩展涉及升级单个Redis实例的配置,例如增加内存、硬盘、带宽或CPU。
水平扩展意味着增加Redis实例的数量。
对比两种方式,垂直扩展侧重于提升单个实例的性能,而水平扩展则通过增加节点来实现数据分布和负载均衡。
当处理数百万或数千万用户时,水平可扩展的Redis切片集群是理想的选择。
Redis通过哈希槽机制实现分片集群。
总共有16384个哈希槽,每个槽负责一部分数据。
节点之间的数据交换和同步是通过集群间通信协议进行的。
当客户端发送命令时,该命令将根据命令中包含的密钥的哈希值路由到正确的节点进行处理。
当节点加入或离开集群时,数据会自动重新分片和迁移,以保持数据平衡和高可用性。
手动分配哈希槽时,请确保16384个槽全部分配完毕。
否则您的 Redis 集群将无法正常运行。
客户端查找数据的过程:数据通过一致的哈希算法均匀分布在多个节点上。
当节点发生故障或添加新节点时,数据迁移量极小,并且集群可以快速扩展和恢复。
客户端直接与任何节点通信,无需了解数据分布和节点拓扑。
在Redis集群模式下,如果客户端请求无法处理的命令,节点会返回MOVED或ASK错误。
客户端解析错误消息,更新节点映射表,并将命令重新发送到正确的节点。
此错误处理是自动的,因此您不必手动编写逻辑。
通过示例可以看到负载均衡下的数据迁移过程。
客户端在发出请求时,可能会遇到部分数据迁移完成,客户端收到ASK错误消息的情况。
客户端通过ASKING命令获取数据后,必须采取额外的步骤来发送实际的操作命令。
哈希槽机制和集群间通信可以实现数据分片、自动迁移、确保高可用性和负载平衡。
客户端自动处理集群间通信和数据路由,无需任何额外逻辑。
本文由 mdnice multiplatform 发表。
再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式
在Redis世界中,有三种集群模式可供开发者选择:主从模式、哨兵模式、集群模式。每种模式都有自己的适用场景和特点。
最初的主从模型是通过主节点写入和从节点读取来创建的,虽然很基本,但在错误恢复方面效率较低。
一旦主节点宕机,需要人工干预进行切换。
Sentinel模式在此基础上进行了优化,它通过哨兵集群对主从节点进行监控,实现故障自动恢复,提高系统的稳定性和可用性。
但Sentinel模式受限于单节点性能,不适合大规模处理。
RedisCluster是在版本3之后引入的。
采用去中心化的多主多从架构,保证数据的高可用性和可扩展性。
部署Redis时,需要注意配置和节点设置,例如主从节点配置、哨兵配置、集群模式下的节点分配等。
测试阶段使用客户端项目流程和Springboot来验证数据同步和读写分离是否正确。
Sentinel模式和Cluster模式都提供了高可用性和自动故障转移,但它们都有局限性,例如通过Internet扩展Sentinel比较复杂,而Cluster模式对节点配置有更高的要求。
选择何种模式取决于具体的业务需求和性能指标。
总的来说,了解并熟练使用这三种模式可以更好地提高Redis集群的性能和稳定性,适应不同规模和复杂程度的应用场景。
高性能高并发网站架构,教你搭建Redis5缓存集群
1. Redis集群介绍 Redis确实是一项伟大的技术,它是一个以ANSIC形式编写的NoSQL数据库,它尊重BSD协议,它支持网络并且可以是内存。它提供了既定且持久的日志类型、键值数据库和多种语言的 API。
Redis最大的特点就是将所有数据保存在内存中,因此读写速度表现非常好。
Redis是基于内存的、高性能的,在一定程度上可以有效处理实时网络流量,比如产品抢购等任务。
当网站高并发负载,需要从大数据中查询符合条件的信息并需要快速响应时,后端连接MySQL数据库并执行SQL查询。
读写操作都比较慢,这次引入了Redis,将缓存数据存储在mysql的Redis中,下次性能会有所提升,当然奇数次也可以存储数据,支持继续以实时的形式存在于内存中并记录到硬盘上。
断电、机器故障等情况不会消失,Redis可以将快照从硬盘恢复到内存中。
Redis已经发布了稳定版本5.0,放弃了Ruby集群方式,采用了C语言编写的redis-cli方式,大大降低了集群搭建的复杂度。
Redis-Cluster集群采用去中心化的结构。
为了保证数据的高可用性,主节点关联一个或多个从节点,从节点从主节点拉取数据备份。
主节点关闭,选举其中一个从节点作为主节点,从而防止集群挂掉。
重新集群投票:容错性,投票过程涉及集群中所有master的参与。
下面考虑。
集群中至少要有奇数个节点,所以至少有3个节点,每个节点至少有一个备份节点,所以下面使用6个节点(第一个节点和备份节点由Redis决定) - 簇簇)。
三主三从模式使用六个节点分布在一台机器上。
在实际应用中,最好使用多台机器,例如Redis创建集群时将6个节点分布在3台机器上。
2、独立redis模式下,下载redis5.0源码,wgethttps://download.redis.io/releases/redis-5.0.0.tar.gztarxzfredis-5.0.0.tar.gzcdredis-解压并编译。
5.0.0makeredis前端启动要改为后台启动。
f 启动文件 daemonizeno->daemonizeyesvimredis.conf redis/www/server/redis/src/redis-server/www/server/redis/redis.conf 确保redis正在运行 psaux|grepre dis 现在已在独立redis中完成模式。
3.redis集群模式: 1.创建6个Redis配置文件 cd/usr/local/mkdirredis_cluster //集群目录 cdredis_clustermkdir700070017002700370047005 //代表6个节点 70007端口 00170027003700470052.config文件到每个 目录 cp/www/server/redis/redis.conf/usr/local/redis_cluster/7000/cp/www/server/redis/redis.conf/usr/local/redis_cluster/7001/cp/www/server/redis/ redis .conf/usr/local/redis_cluster/7002/cp/www/server/redis/redis.conf/usr/local/redis_cl uster/7003/cp/www/server/redis/redis.conf/usr/local/redis_cluster/7004/cp/www/server/redis/redis.conf/usr/local/redis_cluster/7005/ 3.配置文件 分别更新 vim /usr/local/redis_cluster/7000/redis.confvim/usr/local/redis_cluster/7001/redis.confvim/usr/local/redis_cluster/7002/ 。
redis.confvim /usr/local/redis_cluster/7003/redis.confvim/usr/local/redis_cluster/7004/redis.confvim/usr/local/redis_cluster/7005/re dis.conf如下 port7000#port cluster-enabledyes#启用集群模式 cluster-config-filenodes_7000.conf# 第一次自动配置集群配置文件 cluster-node-timeout5000#超时5秒以上 pendonlyyes#开启aof日志记录时,为每个写操作记录一条日志 daemonizeyes#以后台保护模式运行 pidfile /var/run/redis_7000.pid//不需要。
编写如下 # 如果设置密码,则需要一个master和一个slave 同时设置以下两个参数: masterauth "jijiji" # 连接master时,需要密码pass "jiji" # self密码集群配置文件、端口、pidfile 匹配号 4。
启动节点 cd/www/server/。
redis/src/ ./redis-server/usr/local/redis_cluster/7000/redis.conf ./redis-server/usr/local/redis_cluster/7001/redis.conf ./redis-server/usr/local/redis_cluster /7002/redis.conf./redis-server/usr/local/redis_cluste 参见r/7003/redis.conf。
/redis-server/usr/local/redis_cluster/7004/redis.conf。
/redis-server/usr/local/redis_cluster/7005/redis.conf redis 运行 psaux|grepre dis5 start cluster / www/服务器 /redis/src/redis-cli--clustercreate127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0。
0.1:7003127.0.0.1:7004127.0.0.1:7005--cluster-replicas1 这里使用create命令是因为我们要创建一个新的集群。
选项 --cluster-replicas1 意味着我们希望创建的每个主服务器都有一个从服务器。
输入是至此Reids5集群就完成了。
6. 要检查 Reids5 集群状态,您可以运行 redis-cli --clustercheckhost:port 以获取集群状态槽列表。
redis-cli--clusterinfo127.0.0.1:70007 停止Reids5集群 (1) 由于Redis可以正确处理SIGTERM信号,因此可以按顺序同时杀死并启动多个集群。
kill-9PIDPIDPID (2) .redis5提供了关闭集群的工具: /www/server/redis/utils/create-cluster/create-cluster 端口PROT设置为6999,NODES设置为6。
并且该设备生成7000-7005六个节点用于操作。
升级完成后,执行以下命令关闭集群:/www/server/redis/utils/create-cluster/create-clusterstop,然后重新启动集群:/www/server/redis/utils/create-cluster/create-clusterstart 8、帮助信息执行redis-cli--clusterhelp,查看更多帮助信息redis-cli--clusterhelp季海波