Overall configuration
say again master-7000 slave-7001 slave-7002 sentinel sentinel-26379 sentinel-26380 sentinel-26381
1. Redis configuration
master-7000 conf configuration
port 7000
daemonize yes
pidfile /Users/liujinjie/app/redis-4.0.7/pid/redis-7000.pid
logfile "7000.log"
dir "/Users/liujinjie/app/redis-4.0.7/data"
slave-7001 conf configuration
port 7001
daemonize yes
pidfile /Users/liujinjie/app/redis-4.0.7/pid/redis-7001.pid
logfile "7001.log"
dir "/Users/liujinjie/app/redis-4.0.7/data"
slaveof 127.0.0.1 7000
slave-7002 conf configuration
port 7002
daemonize yes
pidfile /Users/liujinjie/app/redis-4.0.7/pid/redis-7002.pid
logfile "7002.log"
dir "/Users/liujinjie/app/redis-4.0.7/data"
slaveof 127.0.0.1 7000
2. Sentinel configuration
(1) sentinel-26379 configuration
port 26379
daemonize yes
dir /Users/liujinjie/app/redis-4.0.7/data
logfile "sentinel-26379.log"
# 主节点127.0.0.1 7000;2 是两个sentinel认为有问题就有问题
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
(2) sentinel-26380 configuration
port 26380
daemonize yes
dir /Users/liujinjie/app/redis-4.0.7/data
logfile "sentinel-26380.log"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
(3) sentinel-26381 configuration
port 26381
daemonize yes
dir /Users/liujinjie/app/redis-4.0.7/data
logfile "sentinel-26381.log"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
3. Start redis
redis-server conf/redis-7000.conf
redis-server .conf/redis-7001.conf
redis-server conf/redis-7002.conf
Check the startup
status./redis-cli -p 7000 ping
redis-cli -p 7000 info replication
# Remove #commented lines and blank lines
cat sentinel.conf | grep -v "#" | grep -v "^$"
#Replace 7000 in redis-7000.conf with 7001 and write to the file redis-7001.conf
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
#Append slaveof 127.0.0.1 7000 to the file redis-7001.conf
echo "slaveof 127.0.0.1 7000" >> redis-7001.conf
#Query the process number starting with redis-server port number 26, then kill
ps -ef grep redis-server | grep 26 | awk '{print $2}' | xargs kill
4. Start sentinel
redis-sentinel redis-sentinel-26379.conf
redis-server conf/redis-sentinel-26379.conf --sentinel
redis-server conf/redis-sentinel-26379.conf --sentinel --protected-mode no
redis-server conf/redis-sentinel-26380.conf --sentinel --protected-mode no
redis-server conf/redis-sentinel-26381.conf --sentinel --protected-mode no
redis-cli -p 26379
127.0.0.1:26379> info
127.0.0.1:26379> info sentinel
5、java
(1) Import dependencies
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
(2) java client code
package com.moon.demo.redis.sentinel.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class RedisSentinelFailoverTest {
private static Logger logger = LoggerFactory.getLogger(RedisSentinelFailoverTest.class);
public static void main(String[] args) {
String masterName = "mymaster";
Set<String> sentinel = new HashSet<String>();
sentinel.add("127.0.0.1:26379");
sentinel.add("127.0.0.1:26380");
sentinel.add("127.0.0.1:26381");
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinel);
while (true) {
Jedis jedis = null;
try {
jedis = jedisSentinelPool.getResource();
int index = new Random().nextInt(100000);
String key = "k-" + index;
String value = "v-" + index;
jedis.set(key, value);
logger.info("{} value is {}", key, jedis.get(key));
TimeUnit.MILLISECONDS.sleep(1000);
} catch (Exception e) {
logger.error("", e);
} finally {
if (jedis != null) {
jedis.close();
}
}
}
}
}