Redis Sentinel combat - automatic fault repair

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();
                }
            }
        }
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325026833&siteId=291194637