Redis主从哨兵配置

Jacky Java 2022-02-28 85

11320039-3f40b17c0412116c.webp

从配置redis.slave.conf

port 6380
bind 127.0.0.1
# 主库地址
slaveof 127.0.0.1 6379
# 主库密码
masterauth "123456"

哨兵配置sentinel.conf

# 当前Sentinel服务运行的端口
port 26379
# Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执
sentinel monitor mymaster 127.0.0.1 6379
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
sentinel auth-pass mymaster 123456
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel down-after-milliseconds mymaster 5000
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel parallel-syncs mymaster 1
# 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 15000

启动命令

# 主库
redis-server conf/redis.conf
# 从库
redis-server conf/redis.salve.conf
# 哨兵
redis-server conf/sentinel.conf

java连接

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;

public class RedisDemo {

    public static void main(String[] args) {

        try (JedisSentinelPool pool = new JedisSentinelPool("mymaster", new HashSet<String>() {
            {
                add("127.0.0.1:26377");
                add("127.0.0.1:26378");
                add("127.0.0.1:26379");
            }
        }, "123456")) {
            try (Jedis jedis = pool.getResource()) {
                System.out.println(pool.getCurrentHostMaster());
                System.out.println(jedis.get("time"));
                jedis.set("time", LocalTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME));
                System.out.println(jedis.get("time"));
            }
        }

    }
}