前提:redis集群分片,目前redis有两类方案
- 哈希槽(hash slot),代表方案:redis cluster
- 一致性哈希,代表方案:twemproxy、codis
本篇是针对redis cluster配置实现,原理会在另一个文章在解析。By haoran-10.iteye.com
先理解几个关键词:
节点:单个redis运行时,是孤立的,一旦出现故障,最多主从复制时,数据不会丢失,但是造成了redis不可用。redis单机,一个节点。
集群:很多节点通过某种方案联系起来,一起提供redis服务,称为redis集群。单个节点出现故障时,数据会转移(不保证强一致性)到安全的备份节点,提供高可用的redis服务,缺点是不可以使用不支持处理多个 键的命令
分片:redis数据很多时,单个redis放不下,此时redis集群通过分片技术,把数据平均分配到不同的节点。
哈希槽:redis集群通过哈希槽的方式,把数据分配到不同的节点。Redis集群有16384个哈希槽,我们只是使用键的CRC16编码对16384取模来计算一个指定键所属的哈希槽。
1、redis节点关键配置
daemonize yes pidfile /mytest/redis_dev/9001/redis.pid port 9001 appendonly yes appendfsync everysec cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000
首次配置,强烈建议使用6个节点,这样更能直观的理解redis集群的配置以及优点所在。
复制成6分,9001,9002,9003,9004,9005,9006(注意改成不同的端口,不同的pid文件,nodes.conf不要理会,redis会自动创建,自动管理)
2、启动各个节点
3、使用redis-trib工具 创建集群
启动成功之后,使用redis自带的工具创建集群
注,这里要安装ruby等工具
(2)、安装ruby gem
(3)、安装gem redis
安装过程比较简单,略过。
输入"yes",继续
哈希槽已经分配到9001,9002,9003节点中。
4、使用redis-cli测试
注意:这里是使用src/redis-cli -c 命令,才能启动客户端集群操作模式
获取操作测试:
从数据中可以看到,客户端是从9002端口进入,当输入set age 27 时,是自动转存到9001节点上,
当输入get age 时,也是从9001节点获取数据
5、容错处理测试
手动把9001节点给kill 掉
此时继续操作redis集群
自动从原先的9001的从节点9004节点(9001为主节点,9004是9001的从节点)中获取数据,说明9004自动转为主节点
6、增加节点测试
创建9007节点,启动9007
并且把9007节点设为9004的从节点
src/redis-trib.rb add-node --slave 127.0.0.1:9007 127.0.0.1:9004
从输出结果中,可以看到9007做为9004的一个复制节点,也就是从节点。
7、增加一个主节点,重新分片集群
redis-trib.rb reshard 127.0.0.1:9008主要是把哈希槽重新分配
8、java 客户端
貌似只有使用sharedjedis 才可以,spring-data-redis还不支持redis新的集群特性,不知道是不是姿势不对。
package wang.conge.init; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; public class SharedRedisClient { public static void main(String[] args) { Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 9001)); JedisCluster jedis = new JedisCluster(jedisClusterNodes); jedis.set("nginx", "yes"); jedis.set("tomcat", "yes"); jedis.set("keepalived", "yes"); jedis.set("vip", "yes"); jedis.set("redis", "yes"); jedis.set("mysql", "yes"); String key = jedis.get("redis"); System.out.println(key); } }
9、小结
redis官方提供的集群方案配置太繁琐了,不过性能上也比较强悍,公司还没用到生产,拭目以待吧。
相关推荐
Redis高可用集群Redis Cluster搭建
搭建redis集群文件,内含六个redis,文件配置已经全部修改好了,1、先在服务器安装下yum install ruby 和 yum install rubygems 2、然后解压文件上传到linux服务器 3、./redis-cluster-start-all.sh 开启reids 4、...
Redis-Cluster集群模式部署
redis-cluster在centos7.4上面集群部署,详细的操作步骤。
本文详细描述了Redis Cluster 的搭建过程,每一步都详细描述,之后对一些集群常见操作命令每一个都进行了实验及效果展示,一步到位
RedisCluster集群(Spring访问Redis),初学者实例源码
redisCluster集群demo,java语言用于获取Redis集群的数据连接池并获取数据。
docker 运行redis-trib 带密码创建redis cluster集群配置,没有密码的请自己去下载一个redis-trib.rb替换
windows一键Redis-Cluster集群工具(32位Redis-v3.0.504),资源包括:ruby安装包,rubygem,32位Redis-v3.0.504,一键Redis-Cluster集群工具等,64位请自行替换相关资源包即可,相关文章见:...
最全的教程部署redis cluster方式集群,及c# 写的访问集群的源码,自己的下载分数快不够,赚2分,教程地址:http://www.cnblogs.com/uucode/p/6486395.html
Redis Cluster集群部署搭建详解附件,转自linux公社,里面有redis搭建集群的例子。供大家参考
通过配置文件实现连接单机redis或集群redis demo,实现开发时使用单机redis,线上使用集群redis
项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。
详细描述了搭建Redis集群的的步骤及注意事项,并给出详细的命令。
redis sentinel与redis cluster 集群配置
注意:由于本人配置redis.conf中的路径使用的是绝对路径,当前redis安装目录的父目录为D:\InstallDir,可以在每个配置文件中修改为自己指定的路径位置 redis638-.conf配置文件内容 #redis服务器端口号 port 6380 #...
在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...
redis-cluster集群脚本。搭建一个(master+slave) * 3,合计6个节点的集群。
RedisCluster 集群搭建文件RedisCluster 集群搭建文件RedisCluster 集群搭建文件
redis-cluster集群搭建方式,里面包含了需要的插件,搭建步骤也非常详细............................