






mkdir s1 s2 s3

- port 27001
- sentinel announce-ip 192.168.99.100
- sentinel monitor mymaster 192.168.99.100 7001 2
- sentinel down-after-millseconds mymaster 5000
- sentinel failover-timeout mymaster 60000
- dir "/tmp/s1"
解读:
port 27001 : 是当前sentinel 实例的端口
sentinel monitor mymaster 192.168.99.100 7001 2 : 指定主节点信息
mymaster : 主节点名称,自定义,随便写
192.168.99.100 7001:主节点的ip和端口
2 :选举master时的quorum值
拷贝sentinel.conf到s2,s3目录

修改s2,s3的信息(端口和目录)

- redis-sentinel s1/sentinel.conf
- redis-sentinel s2/sentinel.conf
- redis-sentinel s3/sentinel.conf

尝试让master节点7001宕机,查看sentinel日志:
7002的日志

7003的日志

7001重启启动后的日志:

1.引入依赖-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-data-redisartifactId>
- dependency>
- spring:
- redis:
- sentinel:
- master: mymaster #执行master名称
- nodes: #指定redis-sentinel集群信息
- - 192.168.99.100:27001
- - 192.168.99.100:27002
- - 192.168.99.100:27003
在有哨兵模式,项目中不需要配置Redis的地址,因为Redis节点信息会动态改变. 连接Redis的事情都交给sentinel哨兵

- @Configuration
- public class SentinalConfig {
- @Bean
- public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){
- return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
- }
- }
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
-
-
- @Test
- void testString() {
- //写操作将交给主节点
- stringRedisTemplate.opsForValue().set("name", "李四");
- //读操作交给从节点
- String value = stringRedisTemplate.opsForValue().get("name");
- System.out.println(value);
- }