Redis高可用Sentinel哨兵模式环境搭建

Sentinel哨兵

redis在主从复制:主节点挂掉后不会自动恢复一个主节点,需要手工干预切换一个从库到主库。
服务暂且不可用、手工修改一大堆配置也可能出错、可用性低。

Sentinel哨兵高可用解决方案,通过监控主从服务器,主库挂了会自动根据从节点的反馈选举进行从库到主库的切换,在也不用担心晚上睡觉的时候线上处理问题了。
复制代码

下面的环境搭建实在win的wsl中进行的

测试配置如下

image.png

image.png

redis.conf配置文件修改

主节点

无需配置
复制代码

从节点

#主节点密码
masterauth 123654
#主节点地址
slaveof 127.0.0.1 6379
复制代码

sentinel哨兵(注意需要单独安装)

安装

需要作为插件需要安装
sudo apt install redis-sentinel
复制代码

配置

port 26379
# 1标识需要从节点反馈的数量评估主节点是否挂掉了
Sentinel monitor mymaster 127.0.0.1 6379 1
#以守护进程模式启动
daemonize yes
#10秒ping不通主节点的信息,主观认为master宕机
sentinel down-after-milliseconds mymaster 10000
#故障转移后重新主从复制,1表示串行,>1并行
sentinel parallel-syncs mymaster 1
#故障转移开始,三分钟内没有完成,则认为转移失败
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster 123654
复制代码

效果

用的可视化工具 Another Redis Desktop Manager 为redis可视化工具

正常节点

image.png

通过在哨兵的服务器执行命令后,主从节点都可以看到的
复制代码

干掉主节点

info replication
6381变为主节点了
复制代码

image.png

image.png

配置文件也发生了变化

image.png

springboot2中的一些变化

需要改一些配置项

#-----------------redis--------------------------
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
#spring.redis.database=0
# Redis服务器地址
#spring.redis.host=127.0.0.1
# Redis服务器连接端口
#spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123654
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8 
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=10000

#------------哨兵配置添加,上面的端口地址不需要了-----------------------------
spring.redis.sentinel.master=mymaster
#这里应该有多个地址的
spring.redis.sentinel.nodes=127.0.0.1:26379
spring.redis.password=123654
#-----------------redis end------------------------
复制代码

代码是不用动的

@Configuration
public class RedisConfig {
	@Bean
	public RedisTemplate<String, Object> redisTemplateString(RedisConnectionFactory redisConnectionFactory) {
		// 配置redisTemplate
		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
		redisTemplate.setConnectionFactory(redisConnectionFactory);
		RedisSerializer stringSerializer = new StringRedisSerializer();
		redisTemplate.setKeySerializer(stringSerializer); // key序列化
		redisTemplate.setValueSerializer(stringSerializer); // value序列化
		redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化
		redisTemplate.setHashValueSerializer(stringSerializer); // Hash value序列化
		redisTemplate.afterPropertiesSet();
		redisTemplate.setEnableTransactionSupport(true);
		return redisTemplate;
	}
}
复制代码

Guess you like

Origin juejin.im/post/7040358307915104292