《Redis开发与运维》笔记-哨兵安装与部署

本文详细介绍Redis哨兵集群的部署过程,包括主从节点配置、哨兵节点配置及Java客户端连接验证。通过实例演示了如何搭建高可用的Redis集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署拓扑结构

哨兵部署拓扑结构
Redis Sentinel物理结构:

角色ipport别名
master127.0.0.16380主节点或者6380节点
slave-1127.0.0.16381slave-1或者6381节点
slave-2127.0.0.16382slave-2或者6382节点
sentinel-1127.0.0.126380sentinel-1或者26380节点
sentinel-2127.0.0.126381sentinel-2或者26381节点
sentinel-3127.0.0.126382sentinel-3或者26382节点

部署Redis数据节点

  1. 主节点配置
//redis-6380.conf
port 6380  //配置端口
daemonize yes //配置后台启动
logfile "6380.log" //配置日志文件
dbfilename "dump-6380.rdb" //配置rdb文件名称
dir "/root/redis-3.2.11/data" //配置数据存储目录

启动主节点

redis-server redis-6380.conf
  1. 从节点配置
  • 6381节点
//redis-6381.conf
port 6381  //配置端口
daemonize yes //配置后台启动
logfile "6381.log" //配置日志文件
dbfilename "dump-6381.rdb" //配置rdb文件名称
dir "/root/redis-3.2.11/data" //配置数据存储目录
slaveof 127.0.0.1 6380 //配置主节点复制地址
masterauth password //配置主节点密码 如果有密码的话
  • 6382节点
//redis-6382.conf
port 6382  //配置端口
daemonize yes //配置后台启动
logfile "6382.log" //配置日志文件
dbfilename "dump-6382.rdb" //配置rdb文件名称
dir "/root/redis-3.2.11/data" //配置数据存储目录
slaveof 127.0.0.1 6380 //配置主节点复制地址
masterauth password //配置主节点密码 如果有密码的话

启动节点

redis-server redis-6381.conf
redis-server redis-6382.conf

主从节点启动完成后,可以通过命令查看状态
主节点视角:

[root@izwz9ja3exxb7by25st5gbz redis-3.2.11]# cd /usr/local/bin/
[root@izwz9ja3exxb7by25st5gbz bin]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:master //节点角色为主节点
connected_slaves:2 //当前从节点数量
//从节点列表
slave0:ip=127.0.0.1,port=6382,state=online,offset=16456486,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=16456486,lag=1
master_repl_offset:16456909
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15408334
repl_backlog_histlen:1048576
127.0.0.1:6380>

从节点视角:

[root@izwz9ja3exxb7by25st5gbz bin]# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1 //主节点地址信息
master_port:6380
master_link_status:up //链接状态  up代表成功
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:16484022
slave_priority:100
slave_read_only:1 //从节点只读 
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6381>

如果主从节点采用的公网地址访问 ,将127.0.0.1替换为公网地址即可。

部署Sentinel节点

3个sentinel节点配置其实都一样,只需要配置不同的端口就行。

//sentinel-26380.conf
protected-mode no //关闭保护模式 公网访问的话一定要关闭
port 26380
dir /root/redis-3.2.11/data
//配置监控主节点的地址信息 并命名为mymaster  2代表判断主节点失败至少需要2个Sentinel节点同意
//如果主从节点采用的公网地址访问 ,将127.0.0.1替换为公网地址即可。
sentinel monitor mymaster 127.0.0.1 6380 2 
sentinel auth-pass mymaster password //配置监控主节点的密码 如果有的话
sentinel down-after-milliseconds mymaster 30000 //判断节点是否失败的重要依据 超过设定时间,则代表节点不可达
sentinel parallel-syncs mymaster 1 //故障转移过程中 每次允许同时多少个从节点进行复制,限制向新节点发起复制操作的从节点个数。
sentinel failover-timeout mymaster 180000 //故障转移超时时间

启动节点

//方式一
redis-sentinel sentinel-6382.conf &
//方式二
redis-server sentinel-6382.conf --sentinel &

查看配置状态:

redis-cli -p 26380
127.0.0.1:26380> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
127.0.0.1:26380> 

如果主从节点采用的公网地址访问 ,将127.0.0.1替换为公网地址即可。

Java客户端连接

引入依赖包

//引入jedis客户端  maven方式 对应redis版本

 <dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>3.2.0</version>
 </dependency>

新建测试类

package top.layne.redis;

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

import java.util.HashSet;
import java.util.Set;

/**
 * @author Layne
 * @date 2021/3/24
 */
public class RedisSentinel {

    public static void main(String[] args) {
        Set<String> sentinelSet = new HashSet<String>();
       //添加sentinel节点地址信息 公网地址访问 替换掉127.0.0.1就行
        sentinelSet.add("127.0.0.1:26380");
        sentinelSet.add("127.0.0.1:26381");
        sentinelSet.add("127.0.0.1:26382");
        JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinelSet);
        Jedis jedis = jedisSentinelPool.getResource();
        String value = jedis.get("layne");
        System.out.println("value:" + value);
        System.out.println("client:" + jedis.info());
        jedis.set("layne","sentinel" );
        jedis.close();
        jedisSentinelPool.destroy();
    }
}

验证测试

可以通过直接kill 掉redis主节点进程 或者通过shutdown执行关闭,客户端不受影响,依然能响应数据信息。通过redis-cli 去连接从节点查看 info replication命令会发现有新的主节点生成,重新启动旧的主节点,会发现会被修改为从节点,去复制新的主节点信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Layne_lei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值