Redis主从+哨兵配置(简洁、清晰)
服务器一主二从、三哨兵
IP | 职责 |
---|---|
192.168.6.50 | Master 、Sentinel |
192.168.6.51 | Slave 、 Sentinel |
192.168.6.52 | Slave 、 Sentinel |
一、主从配置
1.1 Master配置(/etc/redis/redis.conf)
port 6379
masterauth "redis_pwd" #这里三台redis我使用了相同的密码,便于哨兵在master故障之后重新恢复时连接其他的redis
# bind 127.0.0.1 ::1 # 注释掉bind
protected-mode no
requirepass "redis_pwd"
1.2 其他两台Slave配置
port 6379
replicaof 192.168.6.50 6379
masterauth "redis_pwd"
# bind 127.0.0.1 ::1 # 注释掉bind
protected-mode no
requirepass "redis_pwd"
1.3 开启与检验
systemctl start redis # 分别在每台服务器开启redis
redis-cli
info replication # 检验master与slave角色是否正确
二、哨兵Sentinel配置
apt install redis-sentinel # 首先安装哨兵
# 三台服务器上都部署上哨兵,配置除了announce-ip都一样
port 6380 # 哨兵端口
# sentinel monitor <master-name> <ip> <redis-port> <quorum> quorum即是同意切换故障master的最小哨兵数
sentinel monitor mymaster 192.168.6.50 6379 2
sentinel auth-pass mymaster redis_pwd # 设置redis密码
sentinel announce-ip "192.168.6.51" # sentinel所在的本机ip
# 别忘了注释bind
# 启动
systemctl start redis-sentinel
三、SpringBoot配置
详细源码可见github,如果对你有帮助,希望给个star吖!
# application.yml
spring:
redis:
database: 3
password: redis_pwd
timeout: 2000
sentinel: # 哨兵配置
master: mymaster
nodes: 192.168.6.50:6380,192.168.6.51:6380,192.168.6.52:6380
lettuce:
pool:
max-idle: 20
min-idle: 10
max-active: 50
max-wait: 1000
@Configuration
@EnableCaching
public class RedisConfig {
@Value("${spring.redis.database}")
private int database;
@Value("${spring.redis.password}")
private String password;
@Value("#{'${spring.redis.sentinel.nodes}'.split(',')}")
private Set<String> sentinelCluster;
@Value("${spring.redis.sentinel.master}")
private String sentinelName;
@Value("${spring.redis.timeout}")
private long timeout;
@Value("${spring.redis.lettuce.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.lettuce.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.lettuce.pool.max-active}")
private int maxActive;
@Value("${spring.redis.lettuce.pool.max-wait}")
private long maxWait;
@Bean("connectionFactory")
public LettuceConnectionFactory getConnectionFactory() {
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(maxIdle);
genericObjectPoolConfig.setMinIdle(minIdle);
genericObjectPoolConfig.setMaxTotal(maxActive);
genericObjectPoolConfig.setMaxWaitMillis(maxWait);
genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(2000);
//哨兵模式
RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(sentinelName, sentinelCluster);
configuration.setDatabase(database);
configuration.setPassword(RedisPassword.of(password));
// 集群模式
// RedisClusterConfiguration configuration2 = new RedisClusterConfiguration();
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofMillis(timeout))
.poolConfig(genericObjectPoolConfig)
.build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration, clientConfig);
// 使用前先校验连接
factory.setValidateConnection(true);
return factory;
}
}
Comments | 0 条评论