Spring-Redis 集群环境搭建
前言
首先了解一下redis目录下的文件,如下图:
1.redis.conf是Redis启动时的需要用到的配置。启动Redis的过程如下:
src/redis-server redis.conf
即可成功执行。
2.sentinel.conf是Redis的哨兵配置,启动哨兵的过程如下:
src/redis-sentinel sentinel.conf
注:以上命令使用root权限执行,在图中所示的路径下(即redis根目录,实际上redis-server、redis-cli、redis-sentinel等命令在src下,保持命令和配置文件的路径都正确即可)打开终端执行命令。
一、Sentinel模式
1. Linux Sentinel搭建
1.1 配置redis.conf
redis.config中把配置划分的很清楚,每部分用下面的方式划分开,如下图示例:
第一步:找到NETWORK选项,将下图中的bind注释掉 。目的:防止远端IP无法访问。
第二步:还是NETWORK部分,找到protected-mode部分,将yes改为no。目的:防止保护模式开启造成的远端IP无法访问的问题。
第三步(可选):在 APPEND ONLY MODE下,把appendonly 设置为 yes。目的:使用redis的AOF快照方式进行持久化。
说明:redis中的其他配置,自选进行配置,配置在配置文件的各部分中都有详细的英文说明。
1.2 配置sentinel.conf
第一步:将protected-mode设置为no,如下图。目的:防止保护模式开启造成的远端IP无法获得sentinel的问题。
第二步:配置监控的对象。找到sentinel monitor ...部分,如下图。设置被监控的主库IP, 端口号,主库挂掉时,哨兵同意进行恢复的数量。其中“mymaster”为自定义的主库名,redis默认定义为mymaster。如果想改成别的名字,记得在配置中把其他使用了mymsater的位置一并修改。
1.3 配置从库的redis.config
在1.1的基础上,只需要在REPLICATION部分,找到下图位置,设置要跟随的主库的IP地址和端口即可。
注意:这里要写主库的实际IP地址,不要写127.0.0.1这个本地测试地址。在后续的java使用中,会出现问题:redis数据存储在了java程序运行位置的机器上。具体原因:没有深究。
2.Spring 和 Redis Sentinel整合
这里的过程参考了,感谢原作者的付出 http://blog.****.net/qq_34021712/article/details/75949706
项目demo放在了GitHub上,地址:https://github.com/BigOrange1994/SpringBootLearn.git
大致过程说明:
2.1 配置spring-redis.xml
第一步:配置JedisConnectionFactory,用于建立连接
第二步:配置JedisPoolConfig,以后从这个池子里拿连接
第三步:配置RedisSentinelConfiguration,用于设置sentinel相关
第四步:配置RedisTemplate,Spring提供的高抽象级别的、具有更高交互性的redis操作模板
2.2 由于项目使用了Spring Boot而不是 http://blog.****.net/qq_34021712/article/details/75949706这篇教程中说的Spring
MVC ,所以使用了如下类增加Spring Boot对xml的支持。(也可以使用Spring Boot中相关的注解代替xml,由于我本身刚深入学习,暂时没去寻找相关注解和类)
2.3 使用RedisTemplate完成RedisUtil工具类。
2.4 项目结构。
2.5 运行结果
如果在启动时,看到如下的配置,说明你的配置都没有问题了,可以用自定义的RedisUtil中的方法测试。
运行结果:
二、Cluster模式
1. Linux Redis Cluster搭建
Cluster模式至少需要“三主三从”(即:三个主库三个从库),方可搭建集群。开启6个redis实例即可。每个实例只需要配置redis即可。不需要指定谁是主库谁是从库。在之后的步骤里,会进行说明。
1.1 配置redis.conf
在第一部分Sentinel模式的1.1的基础上,只需要在REDIS CLUSTER部分,找到下图位置,设置集群模式为yes即可。
1.2 设置redis的端口号(可选, 如果6个redis实例的IP相同,则需要配置不同的端口号)
在NETWORK部分,找到下图位置,设置端口号即可。
1.3 借助redis.trib.rb完成集群初始化
在linux 终端下,使用下图红框命令,安装辅助工具。
安装完成后,使用命令:
src/redis-trib.rb create --replicas 1 192.168.92.128:6379 192.168.92.131:6379 192.168.92.132:6379 192.168.92.132:6380 192.168.92.132:6381 192.168.92.132:6382
replicas 后面的 1 代表分配每个主库多少个从库。这就回答了,为什么不需要像sentinel那样指定哪个从库跟随哪个主库。因为已经自动配置好了。
执行后会询问你一个问题:Can I set the above configuration? (type 'yes' to accept): 此时,输入yes即可。集群就搭建好了。如下图:
期间遇到的错误有:
问题1:
问题2:
以上问题,将redis目录下的如下图所示的三个文件删除即可。重新执行上述集群搭建命令。
问题3:
原因:redis实例数少于6
1.4 使用Redis客户端查看集群
发现,集群中只有索引为0的数据库了。完美。
2.Spring 和 Redis Cluster整合
这里的过程参考了,感谢原作者的付出 http://www.sojson.com/blog/203.html
项目demo也放在了GitHub上,地址也是:https://github.com/BigOrange1994/SpringBootLearn.git
大致过程说明:
2.1 配置spring-redis-cluster.xml
第一步:配置JedisConnectionFactory,用于建立连接
第二步:配置JedisPoolConfig,以后从这个池子里拿连接
第三步:RedisClusterConfiguration,用于配置redis cluster集群相关
第四步:配置RedisTemplate,Spring提供的高抽象级别的、具有更高交互性的redis操作模板
2.2 项目结构
2.3 测试和结论
测试代码:
测试结果: