Redis一主二从三哨兵模式

news2025/1/9 1:51:59

文章目录

  • Redis一主二从三哨兵模式
    • 环境配置
    • 实践
      • 配置主从
      • 配置哨兵模式
    • 测试
      • 主从复制测试
      • 模拟master宕机
      • 恢复master

Redis一主二从三哨兵模式

当你使用Redis作为主从复制的架构,并且希望在出现主节点故障时自动进行故障转移时,适用于一主而从三哨兵模式。这种架构可以提高系统的可用性和容错性。
哨兵模式的主要组件包括

主服务器(Master):负责处理写操作和响应客户端的读写请求。

从服务器(Slave):复制主服务器的数据,负责读操作,并在主服务器发生故障时接管主服务器的角色。

哨兵节点(Sentinel):监控主服务器和从服务器的状态,进行故障检测,并在主服务器发生故障时自动进行故障转移和故障恢复
在一主而从三哨兵模式中,有一个主节点和多个从节点,同时还有三个哨兵节点来监控主节点的健康状态。当主节点出现故障时,哨兵节点会自动选举一个从节点作为新的主节点,并将其他从节点切换到新的主节点上,这个过程是自动的,不需要手动干预

如图

image-20230720165608782

环境配置

主机系统IP地址安装包
Master节点Centos7.9.2009192.168.200.10redis-7.0.9.tar.gz
Slave1节点Centos7.9.2009192.168.200.20redis-7.0.9.tar.gz
Slave2节点Centos7.9.2009192.168.200.30redis-7.0.9.tar.gz

达成的目的:在三个节点自行安装 Redis 服务并启动,配置 Redis 的访问需要密码,密码设置为123456。然后将这三个 Redis 节点配置为 Redis 的一主二从三哨兵架构,即一个 Redis 主节点,两个从节点,三个节点均为哨兵节点

实践

配置主从

(1)修改主机名(所有节点均操作)

[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# 
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# bash
[root@slave1 ~]# 
[root@localhost ~]# hostnamectl set-hostname slave2
[root@localhost ~]# bash
[root@slave2 ~]# 

(2)安装redis(所有节点均执行)

# 安装工具包和编译依赖
yum install -y gcc wget net-tools vim  tree
# 下载软件包
wget  https://download.redis.io/releases/redis-7.0.9.tar.gz
# 解压
tar -zxf redis-7.0.9.tar.gz  -C /opt/
# 编译安装
cd /opt/redis-7.0.9/ && make && make install
# 搜索一下redis-server在哪,一般都在/usr/local/bin/ 下面
find / -name redis-server
# 复制一下所需要的配置文件到工作目录
cd /usr/local/bin/ && cp  -rf /opt/redis-7.0.9/redis.conf ./

(3)修改配置文件redis.conf(所有节点均修改)

vim redis.conf
# 修改如下信息
bind 0.0.0.0   
protected-mode no
daemonize yes  
replicaof 192.168.200.10 6379
requirepass 123456 
masterauth 123456
# replicaof 选项Master节点不配置,从节点配置

(4)启动redis服务并放行端口(所有节点均修改)

redis-server redis.conf      # 启动redis
netstat -tlnp |grep redis    # 查看是否开放了6379端口
firewall-cmd --add-port=6379/tcp --permanent && firewall-cmd --reload   # 防火墙放行6379

(5)登录redis测试

[root@master bin]# redis-cli -h 192.168.200.10 -p 6379 -a 123456   # 连接master节点
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.200.10:6379> ping
PONG
192.168.200.10:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.200.20,port=6379,state=online,offset=70,lag=1
slave1:ip=192.168.200.30,port=6379,state=online,offset=70,lag=1
master_failover_state:no-failover
master_replid:c486a9c578d65459edb9d496220ac11d1f7d790e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70

配置哨兵模式

(1)先退出redis环境

127.0.0.1:6379> quit

(2)配置哨兵模式

[root@master bin]# vim sentinel.conf 
# 添加如下内容
daemonize yes
sentinel monitor master 192.168.200.10 6379 2
sentinel auth-pass master 123456
logfile "/var/log/sentinel.log"

# 再将配置的内容远程传输到20 30主机上
[root@master bin]# scp sentinel.conf 192.168.200.20:/usr/local/bin/sentinel.conf
[root@master bin]# scp sentinel.conf 192.168.200.30:/usr/local/bin/sentinel.conf

(3)开启哨兵模式并放行默认端口26379

redis-sentinel sentinel.conf      # 启动哨兵模式
netstat -tlnp |grep 26379   # 开放默认端口26379
firewall-cmd  --add-port=26379/tcp --permanent && firewall-cmd --reload  # 防火墙开放端口

(4)查看是否配置成功

[root@master bin]#  redis-cli  -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=192.168.200.10:6379,slaves=2,sentinels=3
# 发现有3个哨兵节点就OK了!

测试

主从复制测试

# master写
[root@master bin]# redis-cli -h 192.168.200.10 -p 6379 -a 123456
192.168.200.10:6379> ping
PONG
192.168.200.10:6379> MSET name csq age 18 sex man
OK
# slave1读
[root@slave1 bin]# redis-cli -h 192.168.200.20 -p 6379 -a 123456
192.168.200.20:6379> ping
PONG
192.168.200.20:6379> MGET name age sex
1) "csq"
2) "18"
3) "man"
# slave2读
[root@slave2 bin]# redis-cli -h 192.168.200.30 -p 6379 -a 123456
192.168.200.30:6379> ping
PONG
192.168.200.30:6379> MGET name age sex
1) "csq"
2) "18"
3) "man"

模拟master宕机

192.168.200.10:6379> SHUTDOWN
(0.83s)
not connected> quit

哨兵日志查询

Sentinel节点通过向Redis实例发送PING命令来监测实例的存活状态。

如果主服务器或从服务器无法响应哨兵节点的PING命令,哨兵节点会将该实例标记为主观下线

当哨兵节点检测到主服务器下线后,它会请求其他哨兵节点对该下线主服务器进行确认。一旦大部分哨兵节点都确认主服务器已下线,该主服务器就会被标记为客观下线

哨兵节点会从当前可用的从服务器中选出一个成为新的主服务器,并将其他从服务器切换为新的主服务器的从服务器。

image-20230721232049987

登录192.168.200.20redis查看 是否变为了master

192.168.200.20:6379> info replication
# Replication
role:master   # 之前的slave1 变为了master
connected_slaves:1
slave0:ip=192.168.200.30,port=6379,state=online,offset=243852,lag=1  # 从节点
master_failover_state:no-failover
master_replid:1fcb24a95055f3bb705997e3f4cbe9dc231d5fb7
master_replid2:c486a9c578d65459edb9d496220ac11d1f7d790e
master_repl_offset:243993
second_repl_offset:74074
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:243993

登录192.168.200.30redis 查看是否变为了slave

192.168.200.30:6379> INFO replication
# Replication
role:slave                      # 从节点
master_host:192.168.200.20      # IP
master_port:6379                # 端口
master_link_status:up           # 从节点能连接到主节点
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:263732
slave_repl_offset:263732
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:1fcb24a95055f3bb705997e3f4cbe9dc231d5fb7
master_replid2:c486a9c578d65459edb9d496220ac11d1f7d790e
master_repl_offset:263732
second_repl_offset:74074
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:263732

恢复master

[root@master bin]# redis-server redis.conf   # 启动redis
[root@master bin]# redis-cli -h 192.168.200.10 -p 6379 -a 123456
192.168.200.10:6379> ping
PONG
192.168.200.10:6379> INFO replication
# Replication
role:slave                  # 变为了从节点
master_host:192.168.200.20  # IP
master_port:6379            # 端口
master_link_status:up       # 从节点和主节点连接状态
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:301513
slave_repl_offset:301513
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:1fcb24a95055f3bb705997e3f4cbe9dc231d5fb7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:301513
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:299080
repl_backlog_histlen:2434

测试旧master是否可写

# 很显然是不可写的
192.168.200.10:6379> set a b
(error) READONLY You can't write against a read only replica.

再次查看master 192.168.200.20 主从信息

192.168.200.20:6379> INFO replication
# Replication
role:master
connected_slaves:2  # 成功添加进去了
slave0:ip=192.168.200.30,port=6379,state=online,offset=352750,lag=1
slave1:ip=192.168.200.10,port=6379,state=online,offset=352609,lag=1
master_failover_state:no-failover
master_replid:1fcb24a95055f3bb705997e3f4cbe9dc231d5fb7
master_replid2:c486a9c578d65459edb9d496220ac11d1f7d790e
master_repl_offset:352750
second_repl_offset:74074
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:352750

测试结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android 面试题目之handler消息机制

Handler消息机制是Android里面很基础的东西,基本上属于必考题 一般会从如下几个方面来考查 实现原理,Handler/Message/MessageQueue/Looper 几个类的实现流程,Handler导致的内存泄露怎么处理主线程的Looper是什么时候创建的;如果…

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component(组件存储&…

C语言学习笔记 Ubuntu系统下部署gcc编译工具-01

在22.04版本 ubuntu系统下: 1.进行apt工具包更新 sudo apt-get update 2.安装gcc工具 sudo apt-get install -y gcc 3.创建一下文件,并编译它输出相应的内容 touch hello.c 4.使用gcc编译c源程序并运行 格式:gcc 源文件名 -o 生成的执行文…

AcWing 1210. 连号区间数

输入样例1: 4 3 2 4 1输出样例1: 7输入样例2: 5 3 4 2 5 1输出样例2: 9样例解释 第一个用例中,有 77 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3…

记一次vscode配置CMake编译task的坑

事情经过是这样的,博主在一个项目中需要使用交叉编译链进行项目编译,但是在CMake中有一个自定义的编译选项,在vscode中配置task任务后,编译发现终端报静态库.a文件格式错误,如下图所示: 但是如果在CMakeLis…

python与深度学习(七):CNN和fashion_mnist

目录 1. 说明2. fashion_mnist实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. fashion_mnist的CNN模型可视化结果图4. 完整代码 1. 说明 本篇文章是C…

Install the Chinese input method on Linux

Open terminal and input: sudo -i apt install fcitx fcitx-googlepinyinWait for it to finish. Search fcitx: "设置"-->"输入法": Finally, we get the following result: Ctrl Space:Switch the input method. The test …

Redis追本溯源(三)内核:线程模型、网络IO模型、过期策略与淘汰机制、持久化

文章目录 一、Redis线程模型演化1.Redis4.0之前2.Redis4.0之后单线程、多线程对比3.redis 6.0之后 二、Redis的网络IO模型1.基于事件驱动的Reactor模型2.什么是事件驱动,事件驱动的Reactor模型和Java中的AIO有什么区别3.异步非阻塞底层实现原理 三、Redis过期策略1.…

印刷和数字设计的页面布局软件 QuarkXPress 2023 Crack

QuarkXPress 2023 用于印刷 和数字设计的页面布局软件,使用 QuarkXPress 释放您的创造力并最大限度地提高生产力 图形设计和桌面出版流程早就应该进行创新和颠覆,所以 QuarkXPress 就来了。自 1987 年首次亮相市场以来,成千上万的创意专业人士…

RocketMQ教程-(5)-功能特性-事务消息

事务消息为 Apache RocketMQ 中的高级特性消息,本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。 事务消息为 Apache RocketMQ 中的高级特性消息,本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。…

FFmpeg AVFilter的原理(三)- filter是如何被驱动的

1、下面是一个avfilter的graph 上图是ffmpeg中doc/examples中filtering_video.c案例的示意图。 本章节主要查看avfilter中的数据是怎么进入的,然后又是怎么出来的。 主要考察两个函数: av_buffersrc_add_frame_flags()av_buffers…

gcc编译的时候出现错误,可以用core查看错误信息

比如说我们有文件main.c,threadpool.c,threadpool.h main.c和threadpool.c都用了threadpool.h,也就是#include "threadpool.h" (1)如果我们直接使用gcc main.c -o a.out -lpthread会报如下的错 我们需要进行动态库链接 gcc -c threadpool.c -…

驱动开发 day3 (模块化驱动启动led,蜂鸣器,风扇,震动马达)

模块化驱动启动led,蜂鸣器,风扇,震动马达并加上Makefile 封装模块化驱动,可自由安装卸载驱动,便于驱动更新(附图) 1.安装模块驱动同时初始化各个设备并使能 2.该驱动会自动创建驱动节点. 3.通过c函数程序输入控制各个设备 4.卸载模块驱动 //编译驱动…

裂缝二维检测:裂缝类型判断

裂缝类型选择 裂缝类型有很多种,这里我们判断类型的目的是要搞明白是否有必要检测裂缝的长度。在本文中,需要判断的裂缝类型共有四种:横向裂缝、纵向裂缝、斜裂缝、网状裂缝。 环境搭建 上一节骨架图提取部分,我们已经安装了sk…

Linux centos安装openoffice在线预览

前言:由于项目里需要用到word、excel等文件的在线预览,所有选择了openoffice 1、下载openoffice Apache OpenOffice - Official Download 大家自行选择需要安装的版本,楼主由于之前在其他服务器安装过,选择了之前用过的版本&am…

4.Docker数据管理和容器互联

文章目录 Docker数据管理数据卷(容器与宿主机之间数据共享)数据卷容器(容器与容器之间数据共享)容器互联 Docker数据管理 数据卷(容器与宿主机之间数据共享) 数据卷是一个供容器使用的特殊目录&#xff0…

【UE5 多人联机教程】03-创建游戏

效果 步骤 打开“UMG_MainMenu”,增加创建房间按钮的点击事件 添加如下节点 其中,“FUNL Fast Create Widget”是插件自带的函数节点,内容如下: “创建会话”节点指游戏成功创建一个会话后,游戏的其他实例即可发现&am…

mysql -速成

目录 1.概述 1.3SQL的优点 1.4 SQL 语言的分类 2. 软件的安装与启动 2.1 安装 2.2 MySQL服务的启动和停止 2.3 MySQL服务的登录和退出 ​编辑 2.4 mysql常用命令 2.5 图形化用户结构Sqlyong 3.DQL 语言 3.1 基础查询 3.1.1、语法 3.1.2 特点 3.2 条件查询 3.2.1 …

数据库的聚合函数和窗口函数

1. 聚合函数 数据库的聚合函数是用于对数据集执行聚合计算的函数。它们将一组值作为输入,并生成单个聚合值作为输出。聚合函数通常与GROUP BY子句结合使用,以便在数据分组的基础上执行聚合操作。 1.1. 常用的聚合函数 COUNT():计算指定列或…

(五)springboot实战——springboot自定义事件的发布和订阅

前言 本节内容我们主要介绍一下springboot自定义事件的发布与订阅功能,一些特定应用场景下使用自定义事件发布功能,能大大降低我们代码的耦合性,使得我们应用程序的扩展更加方便。就本身而言,springboot的事件机制是通过观察者设…