redis-4.0.14.tar.gz
解压 tar -xzvf redis-4.0.14.tar.gz
编译
cd redis-4.0.14/
执行make
结束后,在redis-4.0.14
新建config文件夹
mkdir config
拷贝redis配置文件
cp redis.conf ../config/redis-6301.conf
cp redis.conf ../config/redis-6302.conf
cp redis.conf ../config/redis-6303.conf
配置三个redis.conf
vim redis-6301.conf
主节点
//服务器ip
#bind 192.168.18.128
protected-mode no
port 6301
daemonize yes
supervised no
pidfile "/var/run/redis_6301.pid"
dbfilename "6301dump.rdb"
masterauth "redis"
从节点添加
//主节点ip port
slaveof 192.168.18.128 6301
另外修改对应端口
启动
./redis-server ../config/redis-6301.conf
./redis-server ../config/redis-6302.conf
./redis-server ../config/redis-6303.conf
查看
./redis-cli -h 192.168.18.128 -p 6301
auth redis
info
显示主从信息
# Replication
role:master //主节点
connected_slaves:2
slave0:ip=192.168.18.128,port=6301,state=online,offset=6359422,lag=1
slave1:ip=192.168.18.128,port=6302,state=online,offset=6359279,lag=1
master_replid:82dd642ad60846cd858cfa20e86cda7c4a043881
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:6359565
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:5310990
repl_backlog_histlen:1048576
配置项
port 26301
sentinel monitor mymaster 192.168.18.128 6301 2
sentinel auth-pass mymaster redis
sentinel down-after-milliseconds mymaster 15000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 80000
bind 192.168.18.128
protected-mode no
daemonize yes //允许后台启动
向config文件夹中拷贝三个配置文件
cp sentinel.conf ../config/sentinel-6301.conf
cp sentinel.conf ../config/sentinel-6302.conf
cp sentinel.conf ../config/sentinel-6303.conf
从节点修改端口26302,26303
启动
./redis-sentinel ../config/sentinel-26301.conf
./redis-sentinel ../config/sentinel-26302.conf
./redis-sentinel ../config/sentinel-26303.conf
查看进程
ps -ef|grep redis
验证下主从同步
kill -9 13028
查看主节点变更情况
配置文件application.yml
spring:
redis:
# url: 127.0.0.1 // 单机使用
# host: localhost
# port: 6379
timeout: 3600
password: redis
sentinel:
nodes: 192.168.18.128:26301,192.168.18.128:26302,192.168.18.128:26303
master: mymaster
WebMvcConfigurer配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("#{'${spring.redis.sentinel.nodes}'.split(',')}")
private List nodes;
@Value("${spring.redis.password}")
private String redisPassword;
@Value("${spring.redis.sentinel.master}")
private String redisMaster;
@Autowired
private FastJsonHttpMessageConverter fastJsonHttpMessageConverter;
@Bean
public RestTemplateBuilder restTemplateBuilder() {
RestTemplateBuilder builder = new RestTemplateBuilder();
return builder.messageConverters(fastJsonHttpMessageConverter);
}
@Bean
public RestTemplate restTemplate() {
return restTemplateBuilder().build();
}
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory(sentinelConfiguration());
}
@Bean
public RedisSentinelConfiguration sentinelConfiguration(){
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
//配置matser的名称
redisSentinelConfiguration.master(redisMaster);
//配置redis的哨兵sentinel
Set redisNodeSet = new HashSet<>();
nodes.forEach(x->{
redisNodeSet.add(new RedisNode(x.split(":")[0],Integer.parseInt(x.split(":")[1])));
});
log.info("\nredisNodeSet -->{}",redisNodeSet);
redisSentinelConfiguration.setSentinels(redisNodeSet);
redisSentinelConfiguration.setPassword(RedisPassword.of(redisPassword));
return redisSentinelConfiguration;
}
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
}
启动,连接成功会显示具体信息
redis.clients.jedis.JedisSentinelPool : Trying to find master from available Sentinels...
redis.clients.jedis.JedisSentinelPool : Redis master running at 192.168.18.128:6303, starting Sentinel listeners...
redis.clients.jedis.JedisSentinelPool : Created JedisPool to master at 192.168.18.128:6303
连接异常情况
2019-04-04 09:55:44.961 INFO 24056 --- [ main] redis.clients.jedis.JedisSentinelPool : Trying to find master from available Sentinels...
2019-04-04 09:55:44.973 WARN 24056 --- [ main] redis.clients.jedis.JedisSentinelPool : Cannot get master address from sentinel running @ 192.168.18.1281:26302. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.UnknownHostException: 192.168.18.1281. Trying next one.
2019-04-04 09:55:44.973 WARN 24056 --- [ main] redis.clients.jedis.JedisSentinelPool : Cannot get master address from sentinel running @ 192.168.18.1281:26301. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.UnknownHostException: 192.168.18.1281. Trying next one.
2019-04-04 09:55:44.973 WARN 24056 --- [ main] redis.clients.jedis.JedisSentinelPool : Cannot get master address from sentinel running @ 192.168.18.1281:26303. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.UnknownHostException: 192.168.18.1281. Trying next one.
防火墙端口开启