redis高可用解决方案(一):哨兵模式

时间:2022-07-23
本文章向大家介绍redis高可用解决方案(一):哨兵模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

redis哨兵模式

使用redis的分片可以满足redis内存的扩容,但是一旦有服务器宕机,那么整个redis都将无法使用

redis可以利用哨兵模式来实现redis的高可用

哨兵机制原理

首先配置主从结构,一台主机下面可以挂载多台从机,主机的数据同步到从机,但是从机只能读不能写

哨兵进行监听,利用心跳检测机制检查当前主机是否存货,如果超过3次没有回应则表示主机宕机

当主机宕机后,会从当前的从机中选举一个主机,其余机器都是从机,以前的主机在从新启动以后也会挂载到当前主机上

主从搭建步骤

检查是否有启动的redis

ps -ef|grep redis

关闭redis

kill -9 kid

复制分片文件夹更名为sentinel

cp shards sentinel

进入sentinel

cd sentinel

启动多台 redis

redis-server redis-6379.conf & redis-server redis-6380.conf & redsi-server redis-6381.conf

配置主从

主机:6379

从机6380,6381

连接从机

redis-server redis-6380.conf

挂载到主机

slaveof 主机ip 端口

检查挂载情况

info replication

哨兵搭建

在redis目录下有一个哨兵的配置文件复制到sentinel目录下

cp sentine.conf sentine

使用vim打开sentine.conf配置文件

vim sentine.conf

如下修改

关闭保护模式 ​ protected-mode no #去点注释 开启后台启动 ​ daemonize yes 修改哨兵监听端口 ​ sentinel monitor mymaster 127.0.0.1 6379 1

启动哨兵

redis-sentinel sentinel.conf

在springboot中集成redis哨兵

配置文件 redis.properties

redis.sentinel.masterName=mymaster
redis.sentinels=39.101.165.86:26379

redisConfig.java

@PropertySource(value = "classpath:/properties/redis.properties")
@Configuration
public class RedisConfig {
    @Value("${redis.sentinel.masterName}")
    private String masterName;
    @Value("${redis.sentinels}")
    private String sentinels;

    @Bean(name = "jedisSentinelPool")
    public JedisSentinelPool jedisSentinelPool(){
        Set<String> sentinel = new HashSet<>();
        sentinel.add(sentinels);
        JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinel);
        return pool;
    }

    @Bean
    @Scope("prototype")
    public Jedis jedis(@Qualifier("jedisSentinelPool")JedisSentinelPool pool){
        Jedis jedis = pool.getResource();
        return jedis;
    }

}