Redis集群搭建+SpringBoot整合

06-01 1640阅读

一、环境准备

1. ununtu服务器(任意linux都行)

Redis集群搭建+SpringBoot整合

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}

Redis集群搭建+SpringBoot整合

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

Redis集群搭建+SpringBoot整合

三、集群启动、关联

1. 依次启动redis-server

redis-server redis/6379/redis.conf

2. 查看redis-server状态

ps -ef | grep redis

Redis集群搭建+SpringBoot整合

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

Redis集群搭建+SpringBoot整合

// Gossip协议监听端口是否存在
netstat -lnpt | grep redis

Redis集群搭建+SpringBoot整合

5. 设置主从

// 查看节点信息
cluster nodes

Redis集群搭建+SpringBoot整合

// 登录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

Redis集群搭建+SpringBoot整合

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

Redis集群搭建+SpringBoot整合

节点状态检查

cluster info

Redis集群搭建+SpringBoot整合

节点重定向

登录其中一个redis-cli内部,并开始数据存储时,数据经过hash计算可能重定向到另一台redis-server中

Redis集群搭建+SpringBoot整合

通过 -c 参数实现集群自动同步

Redis集群搭建+SpringBoot整合

7. 主从切换

模拟其中一个主节点失效,从节点自动成为主节点

redis-cli -p 6380  -a 123456 shutdown

检查节点信息

cluster nodes

Redis集群搭建+SpringBoot整合

重启6380

redis-server redis/6380/redis.conf

Redis集群搭建+SpringBoot整合

四、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,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码