【2023】Redis哨兵模式集群

news2024/11/27 0:26:42

目录

  • 🎶 哨兵模式
  • 🎶 搭建哨兵模式集群
    • 🎶 搭建一主二从复制集群
    • 🎶 创建哨兵节点
  • 🎶 哨兵节点的其他配置
  • 🎶 哨兵模式下故障自动恢复效果
  • 🎶 通过日志查看故障恢复过程

🎶 哨兵模式

一般来说,哨兵机制会和主从复制模式整合使用,在基于哨兵的模式里会在一台或多台服务器上引入哨兵进程,这些节点也叫哨兵节点。

哨兵节点一般不存储数据,它的作用是监控主从模式里的主服务器节点。当哨兵节点监控的主服务器发生故障时,哨兵节点会主导“故障自动恢复”的流程,具体来讲就是会在该主服务器下属的从服务器里选出一个新的主服务器,并完成相应的数据和配置更改等动作。

也就是说,如果采用这种模式,可以让故障自动修复,从而提升系统的可用性。

优点:

  • 故障自动恢复,提升系统可用性

架构图:

在这里插入图片描述

🎶 搭建哨兵模式集群

🎶 搭建一主二从复制集群

  • 创建一个master节点
docker run -itd --name redis-master -p 6379:6379 redis:6.0
  • 创建slave1从节点
docker run -itd --name redis-slave1 -p 6380:6380 redis:6.0
  • 查看master节点IP
[root@localhost ~]# docker inspect redis-master | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
  • 进入到slave1容器,配置该容器为从节点
[root@localhost ~]# docker exec -it redis-slave1 /bin/bash
root@2621cce29bc3:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2 6379
OK
  • 创建slave2从节点
docker run -itd --name redis-slave2 -p 6381:6381 redis:6.0 
  • 进入到slave2容器,配置该容器为从节点
[root@localhost ~]# docker exec -it redis-slave2 /bin/bash
root@4f5f4d986465:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2 6379
OK
  • 进入到master节点容器,查看当前集群状态
[root@localhost ~]# docker exec -it redis-master /bin/bash
root@2213b1077230:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=420,lag=0
slave1:ip=172.17.0.4,port=6379,state=online,offset=420,lag=0
  • 当前状态为健康

🎶 创建哨兵节点

  • /data/redis/redisConf
    目录里创建sentinel1.conf配置文件
port 16379
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel1.log"

以上配置含义:

  • 第一行指定了哨兵工作端口为16379
  • 第二行指定了监控对象,172.17.0.2和6379分别是master节点的IP和端口,3表示需要有3台哨兵节点认可才能认定失败
  • 日志位置
  • 日志名
    ——————
  • 创建第一个哨兵节点
docker run -itd --name redis-sentinel1 -v /data/redis/redisConf/:/redisConfig:rw -p 16379:16379 redis:6.0 redis-sentinel /redisConfig/sentinel1.conf
  • 进入到该容器查看状态
[root@localhost ~]# docker exec -it redis-sentinel1 /bin/bash
root@4387bd97f99c:/data# redis-cli -h 127.0.0.1 -p 16379
127.0.0.1:16379> 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=master,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=1

可以看出状态为ok,slaves节点为2,表示正常

  • /data/redis/redisConf
    目录里创建sentinel2.conf配置文件
port 16380
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel2.log"
  • 创建第二个哨兵节点
 docker run -itd --name redis-sentinel2 -v /data/redis/redisConf/:/redisConfig:rw -p 16380:16380 redis:6.0 redis-sentinel /redisConfig/sentinel2.conf
  • 使用上面的方式创建第三个哨兵节点
port 16381
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel3.log"
docker run -itd --name redis-sentinel3 -v /data/redis/redisConf/:/redisConfig:rw -p 16381:16381 redis:6.0 redis-sentinel /redisConfig/sentinel3.conf
  • 进入到哨兵3节点,查看状态
[root@localhost redisConf]# docker exec -it redis-sentinel3 /bin/bash
root@d0e57ea6ddfc:/data# redis-cli -h 127.0.0.1 -p 16381
127.0.0.1:16381> 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=master,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=3

从上面信息可以看出,状态为ok,从节点为2,哨兵节点为3,集群状态正常,至此完成了哨兵集群模式的搭建

docker启动容器数:

[root@localhost redisConf]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED             STATUS             PORTS                                                     NAMES
d0e57ea6ddfc   redis:6.0   "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes       6379/tcp, 0.0.0.0:16381->16381/tcp, :::16381->16381/tcp   redis-sentinel3
754320f11984   redis:6.0   "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes       6379/tcp, 0.0.0.0:16380->16380/tcp, :::16380->16380/tcp   redis-sentinel2
4387bd97f99c   redis:6.0   "docker-entrypoint.s…"   53 minutes ago      Up 46 minutes      6379/tcp, 0.0.0.0:16379->16379/tcp, :::16379->16379/tcp   redis-sentinel1
4f5f4d986465   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   6379/tcp, 0.0.0.0:6381->6381/tcp, :::6381->6381/tcp       redis-slave2
2621cce29bc3   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp       redis-slave1
2213b1077230   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                 redis-master

🎶 哨兵节点的其他配置

  • 判断下线时间的阙值
sentinel down-after-milliseconds master 60000

表示60秒内哨兵节点没有收到master服务器的正确响应则认为该服务器已下线

  • 故障恢复时效
sentinel failover-timeout master 180000

进行故障恢复时,如果180秒内还没有完成主从服务器的切换动作,就会认定本次恢复动作失败

🎶 哨兵模式下故障自动恢复效果

  • 模拟redis-master节点故障,关闭该节点
docker stop redis-master
  • 进入到哨兵1节点容器,查看当前集群状态
[root@localhost redisConf]# docker exec -it redis-sentinel1 /bin/bash
root@4387bd97f99c:/data# redis-cli -h 127.0.0.1 -p 16379
127.0.0.1:16379> 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=master,status=ok,address=172.17.0.4:6379,slaves=2,sentinels=3

此时集群状态正常,但是master ip已经变成172.17.0.4

  • 进入到172.17.0.4代表的redis-slave2容器内查看状态
[root@localhost redisConf]# docker exec -it redis-slave2 /bin/bash
root@4f5f4d986465:/data# redis-cli                     
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=454283,lag=1

此时redis-slave2节点已经变更为master节点

🎶 通过日志查看故障恢复过程

进入到哨兵节点内部查看日志cat /sentinel1.log

注意: 当redis-master节点重新启动后,会自动加入集群,但是会以slave身份运行。

此部分内容到此为止,内从总结自基于docker的redis入门与实战

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

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

相关文章

华为OD机试真题 Java 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…

Zinx框架学习 - 多路由实现

Zinx - V0.6 多路由实现 之前在已经给Zinx配置了路由模式&#xff0c;但是之前的Zinx只能绑定一个路由的处理业务方法显然这是无法满足基本的服务器需求&#xff0c;需要给Zinx添加多路由的方案查看之前的Server定义&#xff0c;路由Router只有一个&#xff0c;当我们想要再添…

七个很好的 Python 工具,让你的生活更轻松

有一句谚语“你不必重新发明轮子”。工具就是最好的例子。它可以帮助您以简单的方式实现复杂且耗时的功能。在我看来&#xff0c;为了提高生产力和效率&#xff0c;我们需要使用一些可用的最佳工具。在这里&#xff0c;我整理了 7 个工具&#xff0c;可以帮助您完成开发之旅。 …

【网络】TCP通讯(三次握手、四次挥手;滑动窗口;TCP状态转换;端口复用;TCP心跳检测机制)

前言&#xff1a;建议看着图片&#xff0c;根据文字描述走一遍TCP通讯过程&#xff0c;加深理解。 目录 TCP通信时序&#xff1a; 1&#xff09;建立连接&#xff08;三次握手&#xff09;的过程&#xff1a; 2&#xff09;数据传输的过程&#xff1a; 3&#xff09;关闭连…

java的IP组播

文章目录 1. 简介2. 组播地址和组3. 客户端和服务器4. 路由器和路由5. 使用组播Socket6. 构造函数7. 与组播组通信8. 案例实战 1. 简介 前面介绍的Socket都是单播Socket&#xff0c;它们提供点对点的通信。单播Socket在两个明确的端点之间创建一个连接&#xff0c;有一个发送方…

LNMP平台搭建

文章目录 安装 Nginx 服务安装 MySQL 服务安装配置 PHP 解析环境 安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make创建运行用户 useradd -M -s /sbin/nologin nginx编译…

ArduPilot之H743+BMI270x2+First Normal Takeoff

ArduPilot之H743BMI270x2First Normal Takeoff 1. 源由2. 正常起飞3. 问题汇总3.1 机架构型3.2 IMU对齐3.3 接收机3.4 GPS3.5 VTX3.6 电调3.7 PID 4. 总结5. 参考资料6. 附录6.1 补充AcroTrainer视频6.2 补充Acro视频 1. 源由 鉴于目前该飞控板子在ArduPilot开源社区尚未得到官…

Photoshop 批量照片转格式

Photoshop 批量照片转格式 文章目录 Photoshop 批量照片转格式前言一、打开Photoshop软件二、打开图像处理器三、参数设置四、运行 前言 在工作和学习中&#xff0c;我们可能会遇到需要处理多张图片、更改多张图片格式的情况&#xff0c;如果一张一张的进行处理是很麻烦浪费时…

一步一步从功能测试到测试开发,我这一路的坎坷谁能懂?

读者提问&#xff1a; 测试开发工程师到底是测试&#xff0c;还是开发 &#xff1f; 鱼鱼回答&#xff1a; 既是测试&#xff0c;也是开发。 首先&#xff0c;测试开发是测试工程师&#xff0c;他们是服务于业务测试同学的&#xff0c;目标是解决业务测试工程师的具体问题。…

基于flask的web应用开发——接受post请求

目录 0. 前言1. 了解post方法2. 在flask中实现3. 具体讲解 0. 前言 操作系统&#xff1a;Windows10 家庭版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Python解释器版本&#xff1a;Python3.8 第三方库&#xff1a;flask 1. 了解post方法 POST是HTTP协议定义的一种请…

尚硅谷JUC极速版笔记

尚硅谷JUC极速版笔记 1、JUC概述1.1 进程和线程1.2 线程的状态&#xff08;6个&#xff09;1.3 wait和sleep1.4 并发与并行1.5 管程&#xff08;锁&#xff09;1.6 用户线程和守护线程 2、Lock接口2.1 复习synchronized&#xff08;java内置同步锁&#xff09;2.2 什么是Lock接…

03使用IDEA快速开发一个WEB应用的具体流程

使用集成开发环境实现web开发 集成开发工具很多&#xff0c;其中目前使用比较多的是IntelliJ IDEA和Eclipse IntelliJ IDEA(居多): JetBrain公司开发的收费软件, IDEA在提示功能方面要强于Eclipse使用起来更加智能更好用Eclipse(较少):Eclipse是IBM团队开发的, Eclipse寓意是…

ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!

欢迎来到我们的 ChatGPT 镜像网站汇总博客&#xff01;在这个令人激动的人工智能时代&#xff0c;ChatGPT 作为一款顶尖的语言模型&#xff0c;已经引起了全球范围内的热议。但是&#xff0c;您是否曾经为了找到最佳的 ChatGPT 使用体验而苦苦搜寻&#xff1f;别担心&#xff0…

电商业务逻辑总结

一、后台模块:商品管理 1. 基本概念 ① spu: 标准化产品单元 不是一件具体的商品 eg iphone14 ② sku: 库存量单元 指的就是一件具体的商品 eg iphone14 128G 蓝色 ③ 销售属性 出现了商品详情页右侧的商品属性信息 ④ 平台属性 出现了商品详情页下…

vue 实现微信扫码登录的方法

一、准备工作&#xff1a; 1.微信公众号&#xff0c;扫码登录 2.域名&#xff0c;也就是域名解析&#xff08;public_domain&#xff09; 3.微信登录验证 4.配置微信扫码登录页面的代码&#xff0c;有了上面的准备工作&#xff0c;下面就可以开始编码了。 二、开发环境&#xf…

pinia的用法,一篇文章教你搞懂vuex的继任者pinia

一&#xff1a;pinia是什么&#xff1f; Pinia 是一个轻量级的、易于使用的 Vue.js 状态管理库。它是 Vuex 的一个替代方案&#xff0c;专为 Vue 3 设计&#xff0c;提供了更简单的 API 和更好的 TypeScript 支持。在你提供的代码中&#xff0c;Pinia 被用于管理应用程序的状态…

VAO、VBO、EBO简介

1.顶点缓冲对象(Vertex Buffer Objects, VBO) 顶点缓冲对象&#xff08;VBO&#xff09;的作用就是管理这个在GPU上创建的显存。使用这些缓冲对象的好处是我们可以一次性的发送一大批数据到显卡上&#xff0c;而不是每个顶点发送一次。从CPU把数据发送到显卡相对较慢&#xff…

java.security.MessageDigest的用法

java.security.MessageDigest MessageDigest的含义 message含义是:消息,信息 digest的含义是 digest 必应词典 n.摘要&#xff1b;文摘&#xff1b;概要&#xff1b;汇编 v.消化&#xff1b;领会&#xff1b;领悟&#xff1b;理解 海词 n. 摘要 vt. 消化&#xff1b;理解 vi…

进制转换(及规律)

Java变量命名规则和前端一样 约束 接口使用大驼峰 变量方法小托福 常量全大写 数值类型的 整型 byte a 1 所占空间1字节&#xff08;-128-127&#xff09; short a 1 所占空间2字节&#xff08;-32768-32767&#xff09;2^15-2^15-1 int a 1 所占空间4…

2023 华为 Datacom-HCIE 真题题库 11/12--含解析

单项选择题 1.[试题编号&#xff1a;190685] &#xff08;单选题&#xff09;通过iMasterNCE-Campus部署的虚拟化园区网络场景中&#xff0c;以下关于“添加设备”的描述中&#xff0c;错误的是哪一项&#xff1f; A、IMaster NCE-Campus支持通过设备角色添加设备 B、IMaster …