百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis哨兵模式实践(redis哨兵模式缺点)

mhr18 2025-03-20 16:37 45 浏览 0 评论

本次环境为Centos7.6,redis-7.0.4

1:主备模式:即主节点的数据自动同步到从节点,但当主节点挂了,从节点需要手动设置为主节点,比较麻烦。

2:哨兵模式:当主节点挂了,自动投票产生主节点,要求从节点个数大于3且为基数。

3:集群模式:集群模式数据会分散到各个主节点,主要用于解决大数据问题。根据hash值自动计算数据应该放哪个主机的主节点。集群模式解决的是大数据问题,不是高可用。

当前个人生产环境主要解决的是高可用,因为当前的数据量还不足以需要使用到集群来分散处理。所以本次实践主要是主备+哨兵。以下信息纯属个人理解,各位自行甄别

概述


主从节点和sentinel哨兵节点并不是一一对应的。他们是配套合作关系,本文案例是三个从节点和三个sentinel节点,实际也可以一个从节点三个sentinel节点。具体描述看上方紫色块。可以说主从节点的作用在于读写分离、数据备份、水平扩展。而哨兵则用于自动故障转移、监控管理。

那么为什么不建议从节点和sentinel节点一一对应呢?

1、资源浪费:每个从节点都运行一个Sentinel节点会导致资源浪费。Sentinel节点需要占用一定的系统资源(如CPU、内存和网络带宽),如果每个从节点都运行一个Sentinel节点,会显著增加系统的资源消耗。

2、单点故障:如果每个从节点都运行一个Sentinel节点,那么每个Sentinel节点都可能成为单点故障。这会降低系统的整体可用性,而不是提高它。

3、管理复杂性:每个从节点都运行一个Sentinel节点会增加管理的复杂性。需要维护更多的Sentinel配置文件,并且需要确保每个Sentinel节点都正确配置和运行。

4、共识机制:Sentinel节点通过共识机制(Quorum)来决定主节点的状态和进行故障转移。如果每个从节点都运行一个Sentinel节点,共识机制的实现会变得更加复杂,并且可能会导致不一致的决策。

最佳实践是配置至少三个独立的Sentinel节点,这些节点应该分布在不同的物理机器上,以避免单点故障。这些Sentinel节点会监控整个Redis集群的状态,并在主节点故障时进行故障转移。

1. 准备环境

1.确保你有至少三台服务器(或虚拟机),每台服务器上安装了Redis和Redis Sentinel。哨兵模式需要至少三个哨兵实例来确保系统的健壮性。

2. 配置Redis主从复制

在主节点和从节点上配置Redis的主从复制。以下是基本步骤:

2.主节点配置

编辑主节点的Redis配置文件(通常是redis.conf),确保以下配置项正确设置:

bind 0.0.0.0  # 允许所有IP地址连接,根据需要调整
port 6379    # Redis监听的端口
requirepass dddd #记得改密码

启动主节点

redis-server /path/to/redis.conf
#redis也可以改为自动启

cd /etc/rc.d/init.d/
vi redis

################以下为内容,自行修改 路径#####################

#!/bin/bash
#chkconfig: 2345 10 90  
#description: Start and Stop redis   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/data/redis-7.0.4/src/redis-server   #对应你自己的配置地址
REDIS_CLI=/data/redis-7.0.4/src/redis-cli   #对应你自己的配置地址
PIDFILE=/var/run/redis.pid
CONF="/data/redis-7.0.4/redis.conf"  #对应你自己的配置地址
AUTH="你自己的redis密码"
case "$1" in
     start)
             if [ -f $PIDFILE ]
             then
                     echo "$PIDFILE exists, process is already running or crashed."  
             else
                     echo "Starting Redis server..."  
                     $EXEC $CONF
             fi
             if [ "$?"="0" ]
             then
                     echo "Redis is running..."  
             fi
             ;;
     stop)
             if [ ! -f $PIDFILE ]
             then
                     echo "$PIDFILE exists, process is not running."  
             else
                     PID=$(cat $PIDFILE)
                     echo "Stopping..."  
                    $REDIS_CLI -p $REDISPORT  SHUTDOWN
                     sleep 2
                    while [ -x $PIDFILE ]   
                    do
                             echo "Waiting for Redis to shutdown..."  
                            sleep 1
                     done
                     echo "Redis stopped"  
             fi
             ;;
     restart|force-reload)
             ${0} stop
             ${0} start
             ;;
     *)
            echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
             exit 1
esac
########################################
chmod +x redis
chkconfig --add redis
chkconfig redis on
systemctl enable redis
systemctl start/stop/restart/status redis

3.从节点配置

编辑从节点的Redis配置文件(通常是redis.conf),添加以下配置项:

slaveof <主节点ip> <主节点端口>
masterauth 主节点的密码

例如,如果主节点的IP地址是192.168.1.100,端口是6379,则配置如下:

slaveof 192.168.1.100 6379
masterauth 主节点redis密码

启动从节点:

redis-server /path/to/redis.conf
# or
systemctl start redis

4. 配置Redis Sentinel

在每台部署了哨兵的服务器上,编辑哨兵配置文件(通常是sentinel.conf),添加以下配置项

sentinel monitor mymaster <主节点ip> <主节点端口> <法定人数>
sentinel auth-pass mymaster 主节点的redis密码
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

例如:

sentinel monitor mymaster 192.168.1.100 6379 2
sentinel auth-pass mymaster 主节点的redis密码
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

mymaster:主节点的名称。
192.168.1.100 6379:主节点的地址和端口。
2:法定人数,即在决定主节点是否不可用时,需要至少2个哨兵同意。

5.启动Redis Sentinel

在每台部署了哨兵的服务器上启动哨兵实例

redis-sentinel /path/to/sentinel.conf
# or
systemctl start redis-sentinel

也可以配置哨兵加入系统自动启动

cd /etc/init.d/
vi redis-sentinel
内容在下面
chmod +x redis-sentinel
chkconfig --add redis-sentinel
chkconfig redis-sentinel on
systemctl enable redis-sentinel
#使用systemctl来启动他
systemctl start/stop/restart redis-sentinel

redis-sentinel内容

#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis Sentinel

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/data/redis-7.0.4/src/redis-sentinel
CONFIG=/data/redis-7.0.4/sentinel.conf
NAME=redis-sentinel

case "$1" in
    start)
        echo "Starting $NAME..."
        $DAEMON $CONFIG
        ;;
    stop)
        echo "Stopping $NAME..."
        $DAEMON $CONFIG stop
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
exit 0

6.验证哨兵配置是否正确

连接到任意一个哨兵实例,使用以下命令检查哨兵状态:

redis-cli -h <哨兵ip> -p 26379

然后在Redis CLI中执行:

SENTINEL get-master-addr-by-name mymaster

这将返回当前主节点的地址和端口。

redis-cli -h ip -p 26379 
auth redis密码
info sentinel

上面会打印哨兵状态,下面是一个模拟输出,正常是slaves=3 sentinels=3 。如果你的salves=2需要进一步排查问题。

# 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=192.168.1.100:6379,slaves=2,sentinels=3

你可以使用

SENTINEL slaves mymaster

查看具体的从节点信息,没出现在里面的那台,肯定就是哪里有问题,要么配置不生效,要么配置不对,要么网络不通等等,如果都核实过了没问题,就把服务杀掉,重启一下。

7.springboot修改配置

在Spring Boot的配置文件(例如application.properties或application.yml)中,添加Redis Sentinel的相关配置。

使用application.properties

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.1.100:26379,192.168.1.101:26379,192.168.1.102:26379
spring.redis.password=myredispassword

使用application.yml

spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.1.100:26379
        - 192.168.1.101:26379
        - 192.168.1.102:26379
    password: myredispassword


感兴趣可以关注一下,谢谢。

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: