Redis哨兵模式(一主二从三哨兵)

2023-05-16

目录

    • 一、redis环境:
    • 二、哨兵介绍:
    • 三、安装redis:
    • 四、使用Redis主从复制的作用:
    • 五、配置redis一主二从:
      • redis启动前的准备工作:
    • 六、配置redis三哨兵:

一、redis环境:

环境:redis6.2.6
linux虚拟机一台,contos7;

二、哨兵介绍:

1.一主二从三哨兵理论图:
在这里插入图片描述

一主两从三哨兵集群,当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。

2.哨兵的主要功能:
1.集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
2.消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
3.故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
4.配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。

PS:根据推举机制,集群中哨兵数量最好为奇数(3、5…)

3.哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。

  • 故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。
  • 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。

4.哨兵的核心知识:

  • 哨兵至少需要 3 个实例,来保证自己的健壮性。
  • 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性
  • 对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。

三、安装redis:

此处省略redis的安装。

四、使用Redis主从复制的作用:

主从复制,是指将一台Redis主节点服务器的数据,复制到其他的Redis从节点服务器。

主节点称为(master/leader),从节点称为(slave/follower);

1,数据冗余:主从复制实现了数据的热备份,这也是持久化实现的另一种方式。

2,故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3,读写分离:master服务主要用来写,slave服务主要用来读数据。可以提高服务器的负载能力,可以根据需求的变化,添加从节点的数量。

4,负载均衡:同时配合读写分离,由主节点提供写服务,从节点提供读服务,分担服务器的负载。在写少读多的情况下,通过多个从节点分担读负载,能够大大提高Redis服务的并发量和负载。

5,高可用的基石,主从复制是哨兵和集群模式能够实施的基础。

五、配置redis一主二从:

在正常的生产中我们是准备多台服务器,比如三台,每台都在各自的linux系统中安装redis。

但是此处为了演示方便,我使用一台电脑安装虚拟机,在虚拟机上安装三份redis服务,来模拟一主二从的效果。

第一步:修改原redis.conf配置文件:

redis.conf配置文件采用默认的混合持久化,也可以采用单独的RDB持久化,因为主从复制的本质是RDB方式,所以要有RDB方式参与即可。

原redis.conf配置文件需要修改的几个地方:

1.先在网络部分注释掉单机连接那一行,即注释掉bind 127.0.0.1 
2.同样我们要将后台运行打开:daemonize no,设置为yes。
3.将 保护模式关闭:protected-mode yes 改为:protected-mode no 


4.打开RDB持久化配置:
#RDB持久化策略 默认三种方式,[900秒内有1次修改],
#[300秒内有10次修改],[60秒内有10000次修改]即触发RDB持久化,
#我们可以手动修改该参数或新增策略
save 900 1
save 300 10
save 60 10000 
#RDB文件名
dbfilename dump.rdb
#RDB文件存储路径
dir ./
策略配置:
#在seconds秒内有changes次数据修改就触发RDB持久化


5.开启AOF持久化配置
appendonly yes
#AOF文件名
appendfilename "appendonly.aof"
#AOF文件存储路径 与RDB是同一个参数,共用一个文件路径
dir ./  #即bin目录下
#AOF策略,一般都是选择第一种[always:每个命令都记录],
#[everysec:每秒记录一次],[no:看机器的心情高兴了就记录,linux一般半个小时同步一次]
#appendfsync always
appendfsync everysec
# appendfsync no
#aof文件大小比起上次重写时的大小,增长100%(配置可以大于100%)时,触发重写。
#[假如上次重写后大小为10MB,当AOF文件达到20MB时也会再次触发重写,以此类推
auto-aof-rewrite-percentage 100 
#aof文件大小超过64MB*2时,触发重写,
#为何要乘以2,因为auto-aof-rewrite-percentage 100 是翻倍即100%,
#达到翻倍时才重写
auto-aof-rewrite-min-size 64mb 

6.打开混合持久化:
#6.aof-use-rdb-preamble yes # 检查混合持久化是否打开,redis5.0后默认开启

第二步:将修改后的redis.conf配置文件复制出来三份:

1.进入redis默认的安装路径:cd /usr/local/bin
ll #查看文件夹内容
cp redis.conf redis_bk.conf #尽量备份一个配置文件,防止修改错了,可以重新用
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf

第三步:分别修改三个配置文件:

vim redis6379.conf
修改的内容:
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb

vim redis6380.conf
修改的内容:
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb

vim redis6381.conf
修改的内容:
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb

redis启动前的准备工作:

查看虚拟机防火墙是否关闭,需要关闭防火墙
1:查看防火状态

systemctl status firewalld

service iptables status

2:暂时关闭防火墙

systemctl stop firewalld

service iptables stop

3:永久关闭防火墙

systemctl disable firewalld

chkconfig iptables off

关闭后再查看防火墙状态

三:开放指定端口6379:

开放指定端口的方式一:
在linux中执行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
redis默认端口号6379是不允许进行远程连接的,所以在防火墙中设置6379开启远程服务;

开放指定端口的方式二:
先开启防火墙才能开放指定端口的:systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent

第四步:启动三台redis服务器,并查看是否启动成功:

redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
ps -ef | grep redis

第五步:配置从库不配置主库 :
先连接上redis客户端:

redis-cli -p 6380

然后将6380机器配置成从机:

slaveof 主机ip 主机端口号
#slaveof 127.0.0.1 6379
info replication
在这里插入图片描述

然后将6381机器配置成从机:

redis-cli -p 6381
#slaveof 主机ip 主机端口号
slaveof 127.0.0.1 6379
info replication
在这里插入图片描述

在主机查看从机信息:发现配置成功。

redis-cli -p 6379
info replication
在这里插入图片描述

六、配置redis三哨兵:

将官方自带的sentinel.conf(此文件在redis的源码目录下,即解压路径下)复制到/usr/local/bin:

在这里插入图片描述

然后复制出来三份:

在这里插入图片描述

修改的内容如下:

vim sentinel0.conf
文件修改内容如下:
protected-mode no
daemonize yes
port 26379 #sentinel 端口
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2

然后分别修改sentinel1.conf信息如下:
protected-mode no
daemonize yes
port 26380 # sentinel 端口,因为我们在一台虚拟机上,所以端口要不一样
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #这里的mymaster 两个副本的要一样,mymaster同一个主机名

然后分别修改sentinel2.conf信息如下:
protected-mode no
daemonize yes
port 26381 # sentinel 端口,因为我们在一台虚拟机上,所以端口要不一样
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #这里的mymaster 两个副本的要一样

配置文件详解
哨兵的配置主要就是修改sentinel.conf配置文件中的参数,在Redis安装目录即可看到此配置文件,各参数详解如下:

# 哨兵sentinel实例运行的端口,默认26379  
port 26379
# 哨兵sentinel的工作目录
dir ./
# 是否开启保护模式,默认开启。
protected-mode:no
# 是否设置为后台启动。
daemonize:yes

# 哨兵sentinel的日志文件
logfile:./sentinel.log

# 哨兵sentinel监控的redis主节点的 
## ip:主机ip地址
## port:哨兵端口号
## master-name:可以自己命名的主节点名字
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 
#客观上认为主节点失联了  
# sentinel monitor <master-name> <ip> <redis-port> <quorum>  
sentinel monitor mymaster 127.0.0.1 6379 2

# 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass <master-name> <password>  
sentinel auth-pass mymaster 123456  

# 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,
#默认30秒  
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000  

# 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。
#这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着
#越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,
#处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1  

# 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确
#的master那里同步数据时结束。  
## 3. 当想要取消一个正在进行的failover时所需要的时间。
## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,
#即使过了这个超时,slaves依然会被正确配置为指向master,
但是就不按parallel-syncs所配置的规则来同步数据了
# sentinel failover-timeout <master-name> <milliseconds>  
sentinel failover-timeout mymaster 180000

# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),
#将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,
#脚本将会被一个SIGKILL信号终止,之后重新执行。
# 对于脚本的运行结果有以下规则:  
## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。
## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。  
## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
# sentinel notification-script <master-name> <script-path>  
sentinel notification-script mymaster /var/redis/notify.sh

# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

最后是先启动三个服务,然后起送三个哨兵,然后客户端;
启动哨兵:

redis-sentinel sentinel0.conf
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf

启动后查看sentinel信息:redis-cli -p sentinel的端口号

redis-cli -p 26379
info sentinel

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis哨兵模式(一主二从三哨兵) 的相关文章

  • CUDA与cuDNN

    1 什么是CUDA CUDA ComputeUnified Device Architecture xff0c 是显卡厂商NVIDIA推出的运算平台 CUDA是一种由NVIDIA推出的通用并行计算架构 xff0c 该架构使GPU能够解决复杂
  • JAVAFX 简易项目构建从0到1全流程

    1 安装JDK 2 安装SceneBuilder 可集成到eclipse等IDE中 3 在IDE中新建Java Project项目 并按设计的架构设计建立代码架构 例如 xff1a 4 新建要搭建的界面fxml文件 xff0c 用Scene
  • Pandas DataFrame

    http pandas pydata org pandas docs stable api html dataframe 构造函数 方法描述DataFrame data index columns dtype copy 构造数据框 属性和数
  • Android Settings定制

    android frameworks base packages SettingsLib 7 0重构Settings后多出来的部分 android frameworks base packages SettingsProvider sett
  • GNOME图形界面的基本操作

    成功登录进入CentOS系统之后 xff0c 我们首先看到的桌面就是GNOME图形界面 xff0c 下面来看一下相关的基本操作 个性化设置 1 xff0c 设置屏幕分辨率 进入菜单 2 xff0c 更换桌面背景 进入下面菜单 选择一张背景图
  • 连接服务器VNC

    1 xff0c 启动vnc vncserver 2 xff0c 提示输入密码 3 xff0c Would you like to enter a view only password y n 选择n 4 xff0c 会生成一个端口号 5 更
  • Android基础知识(七):Activity互调之间的生命周期变化与onNewIntent()触发机制

    Android基础知识 xff08 七 xff09 xff1a Activity互调之间的生命周期变化与onNewIntent 触发机制 一 Activity切换的生命周期 前面Android基础知识 xff08 五 xff09 xff1a
  • 二叉树节点和度的关系及特点

    写在前边的话 xff1a 你的支持是我写作的动力 xff0c 有帮助到你的话麻烦点赞 加收藏 呦 感激不尽 xff01 如有错误也请留言指正 目录 一 完全二叉树 节点总数的特点 二 二叉树 度的特点 1 n0与n2的关系 2 节点总数和度
  • 平衡二叉树的最大深度和最少节点数

    写在前边的话 xff1a 你的支持是我写作的动力 xff0c 有帮助到你的话麻烦点赞加收藏呦 感激不尽 xff01 如有错误也请留言指正 考研数据结构练习 xff0c 欢迎订阅我的专辑 考研数据结构题型分类讲解练习 目录 一 知识点 二 例
  • dataturks解析

    34 34 34 根据大json写小json 34 34 34 with open 39 pay json 39 as f datas 61 f readlines for data in datas data 61 data strip
  • STM32串口之环形队列接收数据

    原文链接 xff1a STM32串口之环形队列接收数据 码代码的应该学数据结构都学过队列 环形队列是队列的一种特殊形式 xff0c 应用挺广泛的 因为有太多文章关于这方面的内容 xff0c 理论知识可以看别人的 xff0c 下面写得挺好的
  • Linux使用ssh远程登陆

    什么是SSH xff1f 简单说 xff0c SSH是一种网络协议 xff0c 用于计算机之间的加密登录 如果一个用户从本地计算机 xff0c 使用SSH协议登录另一台远程计算机 xff0c 我们就可以认为 xff0c 这种登录是安全的 x
  • 使用Vscode 编译 开发 调试 STM32单片机 VScode+openocd+STM32CubeMX+GDB

    Vscode 编译 开发 调试 STM32单片机 为什么记录这篇文章环境准备软件及工具下载软件安装 VScode功能搭建使用STM32CubeMX生成带有makefile的工程配置VScode工程 使用vscode 开发 xff0c 编译
  • 出错信息“module or group tools is not avaliable”

    出错信息 module or group tools is not avaliable 使用yum安装软件时 xff0c 有时会出现这个问题 xff0c 可能是需要安装的软件来自第三方 解决办法 yum install epel relea
  • ubuntu 自动登录/图形界面启动流程

    ubuntu 自动登录 图形界面启动流程 启动流程配置greeter和desktop自动登录配置自动登录后进入的desktop总结 这两天在Jetson nano 上想做一个跳过用户界面直接自动登录到桌面的功能 本来很简单的在System
  • Ubuntu update-alternatives 安装/管理多版本 Python3及PIP3

    Ubuntu update alternatives 安装 管理多版本 Python3及PIP3 前言安装python安装对应版本pipupdate alternatives 切换python3 环境 前言 在ubuntu系统上 xff0c
  • 实用的Visual Studio Code插件

    1 vscode color highlight 颜色代码高亮插件 xff08 sublime text也有 xff09 2 vscode Open in Browser 右键在浏览器打开 xff08 sublime text也有 xff0
  • LWIP 双IP实现

    LwIP是Light Weight 轻型 IP协议 xff0c 有无操作系统的支持都可以运行 LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用 xff0c 它只需十几KB的RAM和40K左右的ROM就可以运行 xff
  • Seata解析-seata部署启动初体验

    本文基于seata 1 3 0版本 seata是由阿里巴巴开源的分布式事务框架 xff0c 用于在分布式环境中保持事务一致性 它提供了四种事务模式 xff1a AT TCC SAGA 和 XA 事务模式 xff0c 默认是AT模式 Seat
  • 功能案例----java实现语音播报功能

    功能案例 java实现语音播报功能 根据自己最近的写的项目 xff0c 总结整理了关于java语音播报功能的方法 xff0c 可分为两种形式 一种是通过自己写出一个语音播报方法的工具类 xff0c 然后从前端获取文本数据 xff0c 最后跳

随机推荐

  • spring mvc拦截器 需求:在controller层的方法上,使用自定义注解的方式 不拦截指定请求

    原来是在controller类上实现此需求 缺点 xff1a 只能是整个controller类下的方法全部放开拦截 xff0c 不能放开其中某个方法 xff0c 颗粒度太高 现实现在方法上增加注解 xff0c 更加细颗粒度 1 首先是自定义
  • 生产者消费者代码实现(JAVA)

    代码 import lombok extern slf4j Slf4j import java util LinkedList final class Message 单条消息 private int id private String m
  • 手误删除服务器tomcat下的bin目录,./start.sh无效

    关于LINUX权限 bash startup sh Permission denied 在执行 startup sh 或者 shutdown sh的时候 xff0c 爆出了Permission denied xff0c 其实很简单 xff0
  • C++ 进程间通信

    一 xff0c C 43 43 常用进程间通信 管道 Pipe xff1a 管道可用于具有亲缘关系进程间的通信 xff0c 允许一个进程和另一个与它有共同祖先的进程之间进行通信 命名管道 named pipe xff1a 命名管道克服了管道
  • 【Android7.1.2源码解析系列】Android ADB概览 ---system/core/adb/OVERVIEW.txt

    ADB实施笔记 I 总体概览 xff1a 安卓调试桥 ADB 被用来 xff1a 保持一条指向于所有安卓设备以及连接向或者运行于所给的开发主机的仿真机 实现多个适用于客户端 命令行用户或者像DDMS那样的帮助程序 的控制命令 比如说 34
  • 内存泄漏 定位方法

    目录 内存概念 物理内存 虚拟内存 内存泄漏 定位方法和手段 1 MemInFo MemTotal MemFree MemAvailable Cached 2 vmalloc info 3 Kmemleak 算法原理 使用方法 参考文献与链
  • 关于环形缓冲区的用法和理解

    通信中 xff0c 经常会遇到数据交互的问题 为了保证数据的高效处理和解析 xff0c 通常会有 缓冲区的说法 接下来谈谈常用的环形缓冲区的特点和使用方法 xff1a 说到环形缓冲区 xff0c 相信大家都不会陌生 xff0c 这里就不贴图
  • 电脑安装系统时提示“找不到硬盘”如何解决

    电脑安装系统的方法有很多众 xff0c 比较常见的是用PE来安装的 xff0c 当然也可以用U盘安装 安装过程中无法识别到硬盘那是很正常的事 xff0c 相信大部分用户都遇到过 xff0c 该如何解决 xff1f 不要担心 xff0c 本教
  • springMVC零配置之上下文配置

    记得刚参加工作的时候 xff0c 搭建springMVC框架还是需要手动配置web xml文件 xff0c 现在已经被渐渐淘汰了 xff0c 在项目中几乎看不到有这种配置了 xff0c 取而代之的是springMVC的零配置 xff0c 原
  • 记一次美团校招内推笔试经历

    2019年4月23日星期二晚上七点 这天刚好项目上生产我负责留守做远程技术支持 留下的还有个重要的原因就是今晚我有一个美团的笔试 七点笔试准时开始 信心满满打开网页地址 美团用的是赛码网来做的笔试题库 xff0c 再次之前收到了邀请码输入进
  • Android 使用 Kotlin 重写 Gradle 文件(Kotlin Gradle DSL)

    概述 众所周知 xff0c 我们在 Android Studio 是使用 Gradle 来编译的 xff0c Gradle 是一种基于 Groovy 语言的构建工具 xff0c 我们平时看到的 build gradle 中的语法结构其实就是
  • Can't open /dev/sda3 exclusively. Mounted filesystem?解决办法

    报错 root 64 hadoop101 moduels pvcreate dev sda3 Can t open dev sda3 exclusively Mounted filesystem 处理方法 umount home ext 上
  • Execution failed for task ‘:app:checkDebugDuplicateClasses‘.崩溃了崩溃了

    FAILURE Build completed with 2 failures 1 Task failed with an exception What went wrong Execution failed for task 39 app
  • @RunWith报错/SpringJUnit4ClassRunner报错或无法使用

    项目场景 xff1a 问题描述 xff1a 64 RunWith SpringJUnit4ClassRunner class 报错 第一步 xff1a 首先确保你的pom下有这两个依赖的jar包坐标 注意junit版本要4 12或者以上 我
  • java集合的扩容机制

    目录 ArrayList 和Vector扩容机制总结 xff1a LinkedList没有扩容机制 xff1a HashSet和HashMap扩容机制总结 xff1a Hashtable扩容机制 xff1a 小结 xff1a HashTab
  • virtualbox 开机启动虚拟机方案(无CMD窗口)

    通过bat与vbs组合使用 xff0c 让virtualbox在开机自启动时没有cmd窗口 xff0c 核心是start b指令与ws Run 34 E virtualbox virtualbox boot bat 34 0命令 1 进入
  • idea使用教程

    目录 一 创建Java工程二 设置显示常见的视图三 常用配置 xff08 重点 xff09 四 IDEA常用快捷键五 创建Java Web Project或Module六 IDEA配置本地 Tomcat七 IDEA关联数据库 xff1a 一
  • Mybatis的增删改查和resultMap的使用

    目录 MyBatis的增删改查jdbcType的使用和作用 xff1a 获取自增主键的值 xff1a 自增主键的作用和使用方法 xff1a MyBatis的接口方法的参数如何与映射文件进行关联 xff1a 1 单个参数 xff1a 2 多个
  • Maven的安装与配置(详细版)

    目录 一 安装本地Maven xff08 1 xff09 下载Maven xff1a xff08 2 xff09 解压Maven xff1a xff08 3 xff09 配置Maven环境变量到Path中 xff1a xff08 4 xff
  • Redis哨兵模式(一主二从三哨兵)

    目录 一 redis环境 xff1a 二 哨兵介绍 xff1a 三 安装redis 四 使用Redis主从复制的作用 xff1a 五 配置redis一主二从 xff1a redis启动前的准备工作 xff1a 六 配置redis三哨兵 xf