redis 哨兵模式的创建

1. 下载redis3.2.12版本。https://codeload.github.com/antirez/redis/zip/3.2.12

2.  解压后放到/usr/local/src/目录下面。

3.  拷贝三份 cp -R redis-3.2.13 redis1,cp -R redis-3.2.13 redis2,cp -R redis-3.2.13 redis3

4.  进入redis1目录

5.  make & make install

6. 配置redis配置文件。

redis.conf配置如下:

daemonize yes #在后台运行,

masterauth "myredis"

requirepass "myredis"

其他的保持默认。

7. cd src目录 启动redis  ./redis-server ../redis.conf

8. ps -ef | grep redis 查看redis 进程。

9. 配置从服务器配置文件

port 6380
daemonize yes
slaveof 127.0.0.1 6379

启动服务。

10. 配置从服务配置文件

port 6381
daemonize yes
slaveof 127.0.0.1 6379

启动服务

11. Redis sentinel配置

# 配置文件信息
// Sentinel节点的端口
port 26379

sentinel auth-pass mymaster myredis

// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor mymaster 127.0.0.1 6379 2

//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000

//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
//原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1

//故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000

12. 启动哨兵

./redis-sentinel ../sentinel.conf --sentinel

13. 同样的配置其他的从服务器的哨兵并启动

14. springboot配置

redis:
sentinel:
master: mymaster
nodes: 10.118.239.78:26379,10.118.239.78:26380,10.118.239.78:26381
password: myredis

15.  redis配置文件设置

@Value("#{'${spring.redis.sentinel.nodes}'.split(',')}")
private List<String> nodes; @Bean
@ConfigurationProperties(prefix = "spring.redis")
public JedisPoolConfig getRedisConfig() {
JedisPoolConfig config = new JedisPoolConfig();
return config;
} @Bean
public RedisSentinelConfiguration sentinelConfiguration() {
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
//配置matser的名称
redisSentinelConfiguration.master("mymaster");
redisSentinelConfiguration.setPassword(RedisPassword.of(password));
//配置redis的哨兵sentinel
Set<RedisNode> redisNodeSet = new HashSet<>();
nodes.forEach(x -> {
redisNodeSet.add(new RedisNode(x.split(":")[0], Integer.parseInt(x.split(":")[1])));
});
redisSentinelConfiguration.setSentinels(redisNodeSet);
return redisSentinelConfiguration;
}

16. 启动项目测试。

05-23 11:29