Docker安装Redis哨兵

目录

Redis哨兵

一、哨兵模式的主要概念和组件

二、哨兵模式的工作流程

三、哨兵配置流程

1、创建Redis哨兵配置文件

2、启动哨兵

3、命令解读

4、 查看哨兵是否正常启动

5、测试主机宕机

四、哨兵运行流程

五、哨兵选举算法

六、哨兵使用建议


Redis哨兵

Redis哨兵模式(Sentinel Mode)是一种用于实现高可用性和自动故障转移的Redis架构。在哨兵模式中,有一个或多个哨兵进程监控着主服务器和从服务器的状态,并在主服务器宕机时自动将其中一个从服务器升级为新的主服务器,以保障系统的可用性。

一、哨兵模式的主要概念和组件

1、主服务器(Master):主服务器是Redis集群中的核心组件,负责处理写操作和同步数据给从服务器。

2、从服务器(Slave):从服务器复制主服务器的数据,并在主服务器故障时提供读服务。从服务器可以有多个。

3、哨兵(Sentinel):哨兵是一个独立的进程,负责监控主服务器和从服务器的健康状态。每个哨兵都会定期向集群中的其他哨兵询问主服务器和从服务器的状态,并通过选举机制选择新的主服务器。

4、哨兵配置文件(sentinel.conf):哨兵使用一个专用的配置文件来指定监控的主服务器和从服务器,以及进行故障转移所需的配置信息。

二、哨兵模式的工作流程

  • 当一个哨兵发现主服务器不可用时,它会与其他哨兵进行协商并选择一个新的主服务器。
  • 选举出的新主服务器会被通知,并开始接收客户端的写操作。
  • 其他哨兵和从服务器会重新配置自己,将新的主服务器作为复制的目标。
  • 当原来的主服务器恢复时,它会变成新的从服务器,并开始复制新的主服务器的数据。

哨兵模式作用

主从监控:监控主从redis库运行是否正常

消息通知:哨兵可以将故障转移的结果发送给客户端

故障转移:如果Master异常,则会进行主从切换,将其中一个Slave作为新Maste

配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

三、哨兵配置流程

1、创建Redis哨兵配置文件

首先,创建一个用于配置Redis哨兵的配置文件sentinel.conf

sentinel.conf文件详情

#是否后台运行,如果命令里加参数 -d 就不用修改了
daemonize no#是否开启安全保护模式
protected-mode no#监听的端口
port 26379# 日志文件路径
logfile ""#pid文件路径
pidfile /var/run/redis-sentinel.pid#工作目录
dir /tmp# 用于添加对指定主服务器的监控的命令。
# master-name: 主服务器的名称,需要在整个哨兵集群中唯一。
# ip: 主服务器的IP地址或域名。redis-port: 主服务器的Redis端口。
# quorum: 哨兵投票数,即在故障转移时需要的最小投票数。
sentinel monitor <master-name> <ip> <redis-port> <quorum># 用于为指定的主服务器设置密码的命令
# master-name: 主服务器的名称。
# password: 设置的密码。
sentinel auth-pass <master-name> <password>#指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel down-after-milliseconds <master-name> <milliseconds>#表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel[parallel-syncs <master-name> <nums>#故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel failover-timeout <master-name> <milliseconds>#配置当某一事件发生时所需要执行的脚本
sentinel notification-script <master-name> <script-path> #客户端重新配置主节点参数脚本
sentinel client-reconfig-script <master-name> <script-path>

这里设置3个哨兵都配置在6379这台服务器里

26379哨兵配置文件,另外两个是一样的

protected-mode no
port 26379
pidfile /var/run/redis-sentinel26379.pid
logfile "/var/log/redis/26379.log"
dir "/data"
sentinel monitor mymaster 192.168.200.129 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
2、启动哨兵
docker run -d \
--name sentinel-26379 \
-v /usr/local/redis/sentinel/conf/sentinel26379.conf:/etc/redis/sentinel.conf \
-v /usr/local/redis/sentinel/data/26379data:/data \
-v /usr/local/redis/sentinel/log:/var/log/redis \
-p 26379:26379 \
--restart=always \
redis:7.2 redis-sentinel /etc/redis/sentinel.confdocker run -d \
--name sentinel-26380 \
-v /usr/local/redis/sentinel/conf/sentinel26380.conf:/etc/redis/sentinel.conf \
-v /usr/local/redis/sentinel/data/26380data:/data \
-v /usr/local/redis/sentinel/log:/var/log/redis \
-p 26380:26380 \
--restart=always \
redis:7.2 redis-sentinel /etc/redis/sentinel.confdocker run -d \
--name sentinel-26381 \
-v /usr/local/redis/sentinel/conf/sentinel26381.conf:/etc/redis/sentinel.conf \
-v /usr/local/redis/sentinel/data/26381data:/data \
-v /usr/local/redis/sentinel/log:/var/log/redis \
-p 26381:26381 \
--restart=always \
redis:7.2 redis-sentinel /etc/redis/sentinel.conf
3、命令解读

-d:将容器置于后台运行。

--name sentinel-26379:为容器指定一个名称,这里是 sentinel-26379

-v /usr/local/redis/sentinel/conf/sentinel26379.conf:/etc/redis/sentinel.conf:将宿主机上的 Redis Sentinel 配置文件 sentinel26379.conf 挂载到容器内的 /etc/redis/sentinel.conf 路径上,以供容器读取配置信息。

-v /usr/local/redis/sentinel/data/26379data:/data:将宿主机上的 Redis Sentinel 数据目录 26379data 挂载到容器内的 /data 路径上,以便容器可以读写数据。

-v /usr/local/redis/sentinel/log:/var/log/redis:将宿主机上的 Redis Sentinel 日志目录 log 挂载到容器内的 /var/log/redis 路径上,以便容器可以将日志写入此目录。

-p 26379:26379:将宿主机的 26379 端口映射到容器的 26379 端口,以便可以从外部访问 Redis Sentinel。

--restart=always:在容器意外停止时自动重启容器。

redis:7.2:使用 Redis 7.2 镜像作为容器的基础镜像。

redis-sentinel /etc/redis/sentinel.conf:指定容器启动时运行的命令,这里是启动 Redis Sentinel 进程并使用 /etc/redis/sentinel.conf 配置文件。

 分别创建配置文件目录开启容器

 

 先启动redis容器,再启动哨兵

4、 查看哨兵是否正常启动
docker exec -it sentinel-26379 bashredis-cli -p 26379info Sentinel

进入6379主库,正常运行,并有3680和6381两个从库

5、测试主机宕机
docker stop redis6379

查看6380还是从机

查看6381变成了主机

从新启动redis6379,他将变成6381的从机

四、哨兵运行流程

1、哨兵正常运行

2、SDown主观下线

SDOWN(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件。

sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度。

3、ODown客观下线

ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕掉

4、选举出领导者哨兵(兵王)

当主节点被判断客观下线以后,各个哨兵节点会进行协商先选举出一个领导者哨兵节点(兵王)并

由该领导者节点也即被选举出的兵王进行failover(故障迁移)

兵王算法:监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法。Raft算法的基本思路是先到先得:即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。

5、由兵王开始推动故障切换流程并选出一个新master

五、哨兵选举算法

选举新的master:

1、redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高)。

2、复制偏移位置offset最大的从节点。

3、最小Run ID的从节点字典顺序,ASCII码。

从机拜新主机:

1、执行slaveof no one命令让选出来的从节点成为新的主节点,并通过slaveof命令让其他节点成为其从节点。

2、Sentinel leader会对选举出的新master执行slaveof no one操作,将其提升为master点。

3、Sentinel leader向其它slave发送命令,让剩余的slave成为新的master节点的slave

旧主机拜新主机:

1、将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线后,它会成为新master的从节点。

2、Sentinel leader会让原来的master降级为slave并恢复正常工作。

六、哨兵使用建议

1、哨兵节点的数量应为多个,哨兵本身应该集群,保证高可用。

2、哨兵节点的数量应该是奇数。

3、各个哨兵节点的配置应一致。

4、如果哨兵节点部署在Docker等容器里面,尤其要注意端口的正确映射。

5、哨兵集群+主从复制,并不能保证数据零丢失。

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

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

相关文章

josef约瑟 时间继电器 DS-23/C AC220V 10S柜内板前接线

系列型号&#xff1a; DS-21时间继电器 &#xff1b;DS-22时间继电器&#xff1b; DS-23时间继电器&#xff1b;DS-24时间继电器&#xff1b; DS-21C时间继电器&#xff1b;DS-22C时间继电器&#xff1b; DS-23C时间继电器&#xff1b; DS-25时间继电器&#xff1b;DS-26…

python/c++ Leetcode题解——746. 使用最小花费爬楼梯

目录 方法一&#xff1a;动态规划 复杂度分析 方法一&#xff1a;动态规划 假设数组 cost 的长度为 n&#xff0c;则 n 个阶梯分别对应下标 0 到 n−1&#xff0c;楼层顶部对应下标 n&#xff0c;问题等价于计算达到下标 n 的最小花费。可以通过动态规划求解。 创建长度为 n…

孩子都能学会的FPGA:第三十三课——用FPGA实现一个通用的SPI主机接收模块

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

如何从 iPhone 上恢复已删除的照片教程分享

您是否错误地删除了 iPhone 上的错误照片&#xff1f;或者您可能已将手机恢复出厂设置&#xff0c;但现在所有照片都消失了&#xff1f;如果您现在遇到这样的情况&#xff0c;我们可以为您提供解决方案。 在本文中&#xff0c;我们将向您展示七种数据恢复方法&#xff0c;可以…

论文解读 | NeurIPS2023:「解释一切」图像概念解释器

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 讲者简介 孙奥&#xff1a; 香港科技大学软件安全实验室在读博士&#xff0c;研究兴趣为可解释性人工智能和可信机器学习&#xff0c;主要是从Post-hoc&#xff0c;逻辑和概念的角度分析神经网络的机理 Title 「…

服务器安全的威胁和防范

由于服务器发挥着至关重要的作用&#xff0c;因此存储在服务器上的机密数据和信息非常具有价值。做好服务器安全至关重要。 常见的服务器安全隐患包括&#xff1a; 1.恶意的攻击&#xff1a;遭受CC攻击和DDoS攻击&#xff0c;导致游戏或是网站打不开&#xff0c;严重影响业务…

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise…

华为面试题,连续出了三年!

写在前面 据说&#xff0c;这是一道被华为 2021、2022 和 2023 都出过的题目 &#x1f923; 华为是「卷」的发明者&#xff0c;但不是「内卷」发明者&#xff0c;毕竟只有华为是实打实的给加班费。 这么卷的公司&#xff0c;怎么也不更新一下题库。 难道没人做出来就不用考虑换…

2023-12-17 AIGC-AnimateDiff详细安装和使用教程

AnimateDiff专用模型下载 AnimateDiff有其自身专门的运动模型mm_sd_v15_v2.ckpt 和 专属的镜头运动lora,需要放置在对应的位置。 stablediffusion位置: 运动模型放在stable-diffusion-webui\extensions\sd-webui-animatediff\model里面 运动lora放在stable-diffusion-web…

Quartus 18.1软件及支持包安装教程

安装前最好关闭电脑的杀毒软件和防火墙 安装包可以到Quartus官网下载需要的版本&#xff0c;注意选择操作系统 Quartus官网&#xff1a;FPGA 设计软件 - 英特尔 Quartus Prime (intel.cn) 下载解压后以管理员的身份运行 QuartusSetup-18.1.0.625.exe文件&#xff0c;版本不同…

中国剩余定理CRT

文章目录 作用证明AcWing 204. 表达整数的奇怪方式CODE 作用 用于求模数两两互质的线性同余方程组&#xff0c;若不互质则不存在解。 《孙子算经》中有这样一个问题&#xff1a;“今有物不知其数&#xff0c;三三数之剩二&#xff0c;五五数之剩三&#xff0c;七七数之剩二&am…

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

【Java】SpringBoot中实现Redis Stream队列

SpringBoot实现Redis Stream队列 前言 简单实现一下在SpringBoot中操作Redis Stream队列的方式&#xff0c;监听队列中的消息进行消费。 jdk&#xff1a;1.8 springboot-version&#xff1a;2.6.3 redis&#xff1a;5.0.1&#xff08;5版本以上才有Stream队列&#xff09;…

C++实现简单的猜数字小游戏

猜数字 小游戏介绍&#xff1a;猜数字游戏是令游戏机随机产生一个100以内的正整数&#xff0c;用户输入一个数对其进行猜测&#xff0c;需要你编写程序自动对其与随机产生的被猜数进行比较&#xff0c;并提示大了&#xff0c;还是小了&#xff0c;相等表示猜到了。如果猜到&…

网络(九)三层路由、DHCP以及VRRP协议介绍

目录 一、三层路由 1. 定义 2. 交换原理 3. 操作演示 3.1 图示 3.2 LSW1新建vlan10、20、30&#xff0c;分别对应123接口均为access类型&#xff0c;接口4为trunkl类型&#xff0c;允许所有vlan通过 3.3 LSW2新建vlan10、20、30&#xff0c;配置接口1为trunk类型&…

报数游戏C语言

分析:掌握数字移动的规律&#xff0c;以及判断&#xff0c;我们可以用一个二维数组来记录每一个人说的数字&#xff0c;就像第一张图片一样&#xff0c;西安向右边移动&#xff0c;再向左下移动&#xff0c;再向左边移动&#xff0c;在向右边移动&#xff0c;在可以用一个数组来…

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现&#xff1a; 线程池隔离 信号量隔离&#xff08;Sentinel默认采用&#xff09; 如图&#xff1a; 线程池隔离&#xff1a;给每个服务调用业务分配一个线程池&#xff0c;利用线程池本身实现隔离效果 信号量隔离&#xff1a…

数据分析(一)(附带实例和源码)

一、主要目的&#xff1a; 主要利用Python包&#xff0c;如Numpy、Pandas和Scipy等常用分析工具并结合常用的统计量来进行数据的描述&#xff0c;把数据的特征和内在结构展现出来。熟悉在Python开发环境中支持数据分析的可用模块以及其中的方法&#xff0c;基于一定的样例数据…

前端视角看 Docker : 基础命令全面指南

引言 Docker是一种开源的容器化平台&#xff0c;它允许开发者将应用程序和其依赖打包在一个轻量级的、可移植的容器中。这使得应用程序在不同的环境中部署变得简单且高效。本文将介绍Docker的一些基础命令和概念&#xff0c;帮助初学者快速上手。 1. Docker简介 Docker使用…

pl_vio线特征·part II

pl_vio线特征part II 0.引言4.线段残差对位姿的导数4.1.直线的观测模型和误差4.2.误差雅克比推导4.3.误差雅可比求导简洁版(不含imu坐标系转换)4.4.相关代码 0.引言 pl_vio线特征part I 现在CSDN有字数限制了&#xff0c;被迫拆分为两篇文章。 4.线段残差对位姿的导数 这一小…