Redis集群搭建+SpringBoot整合
一、环境准备
1. ununtu服务器(任意linux都行)
2. 镜像源更改
// 备份原镜像 sudo cp /etc/apt/sources.list /etc/apt/sources.list.back // 编辑镜像文件 vim /etc/apt/sources.list // 替换数据源 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
3. 下载redis
apt update apt install redis
二、redis配置文件更改
1. 创建路径
随意创建,用于保存集群节点配置信息等
// 自定义路径 mkdir -p /usr/cluster/redis // 三主三从,所以需要创建6个文件夹,以端口命名 mkdir {6379,7380,6381,6382,6383,6384}
2. 更改配置文件:6份
# 守护进行模式启动 daemonize yes # 设置数据库数量,默认数据库为0 databases 16 # 绑定地址,需要修改 bind 0.0.0.0 # 绑定端口,需要修改 port 6379 # pid文件存储位置,文件名需要修改 pidfile /usr/cluster/redis/6379/redis_6379.pid # log文件存储位置,文件名需要修改 logfile /usr/cluster/redis/6379/redis_6379.log # RDB快照备份文件名,文件名需要修改 dbfilename redis_6379.rdb # 本地数据库存储目录,需要修改 dir /usr/cluster/redis/6379 # 集群相关配置 # 是否以集群模式启动 cluster-enabled yes # 集群节点回应最长时间,超过该时间被认为下线 cluster-node-timeout 15000 # 生成的集群节点配置文件名,文件名需要修改 cluster-config-file nodes_6379.conf # redis密码 masterauth 123456 requirepass 123456 # 超时时间 timeout 7200
三、集群启动、关联
1. 依次启动redis-server
redis-server redis/6379/redis.conf
2. 查看redis-server状态
ps -ef | grep redis
3. 关联6个节点
// 关联6个节点 192.168.1.34为服务器ip,根据实际情况配置 redis-cli -h 192.168.1.34 -p 6379 -a 123456 cluster meet 192.168.1.34 6381 cluster meet 192.168.1.34 6382 cluster meet 192.168.1.34 6383 cluster meet 192.168.1.34 6384 cluster meet 192.168.1.34 6385
4. 检查各节点之间关系
cluster nodes
// Gossip协议监听端口是否存在 netstat -lnpt | grep redis
5. 设置主从
// 查看节点信息 cluster nodes
// 登录6379节点 redis-cli -p 6379 -a 123456 // 将6379节点与6380节点关联, cluster replicate 2764a05b5281e234ce724f7b92630ede7426b7ad // 退出 exit
// 登录6381节点 redis-cli -p 6381 -a 123456 // 将6381节点与6382节点关联, cluster replicate ae17298833c8882aaf2068db76be18e643c1bb8e // 退出 exit
// 登录6383节点 redis-cli -p 6383 -a 123456 // 将6383节点与6384节点关联, cluster replicate c9400356532f012d58332abf103d97ba6c9b47d1 // 退出 exit
检查节点信息
cluster nodes
6. 槽位分配
槽位号从0开始,到16383结束,共16384个槽位,只需要给主节点分配
三主三从,每个节点槽位数为:0 - 5461、5461 - 10922、10922 - 16383
redis-cli -p 6380 -a 123456 cluster addslots {0..5461} redis-cli -p 6381 -a 123456 cluster addslots {5462..10922} redis-cli -p 6383 -a 123456 cluster addslots {10923..16383}
检查节点信息
cluster nodes
节点状态检查
cluster info
节点重定向
登录其中一个redis-cli内部,并开始数据存储时,数据经过hash计算可能重定向到另一台redis-server中
通过 -c 参数实现集群自动同步
7. 主从切换
模拟其中一个主节点失效,从节点自动成为主节点
redis-cli -p 6380 -a 123456 shutdown
检查节点信息
cluster nodes
重启6380
redis-server redis/6380/redis.conf
四、SpringBoot整合
1. yml配置
spring: # redis-cluster配置 data: redis: host: 192.168.1.34 database: 0 password: 123456 time-out: 1000 # 集群节点 cluster: nodes: 192.168.1.34:6379,192.168.1.34:6380,192.168.1.34:6381,192.168.1.34:6382,192.168.1.34:6383,192.168.1.34:6384 # 重定向最大次数 max-redirects: 3 lettuce: cluster: refresh: # 集群拓扑自适应刷新 adaptive: true # 集群拓扑刷新周期 毫秒 period: 3000 pool: # 最大链接数量 max-active: 8 # 最大阻塞时间 负数没有限制 max-wait: -1 # 最大空闲链接 max-idle: 8 # 最小空闲链接 min-idle: 0
2. 添加config
@Log4j2 @Configuration public class MyRedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); template.setKeySerializer(getKeySerializer()); template.setValueSerializer(getValueSerializer()); template.setHashKeySerializer(getKeySerializer()); template.setHashValueSerializer(getValueSerializer()); log.info("redisTemplate定义完成"); return template; } // key 采用String序列化 private RedisSerializer getKeySerializer() { return new StringRedisSerializer(); } // value 采用Json序列化 private RedisSerializer getValueSerializer() { return new GenericJackson2JsonRedisSerializer(); } }
3. 验证
@RestController public class RedisClusterController { @Resource private RedisTemplate redisTemplate; @GetMapping("/setRedisData") public void setRedisData(@RequestParam String key, @RequestParam Object val) { redisTemplate.opsForValue().set(key, val); } @GetMapping("/getRedisData") public String getRedisData(@RequestParam String key) { Object o = redisTemplate.opsForValue().get(key); return key + "->" + o; } }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。