redis 配置主从复制,哨兵模式案例

news2025/3/12 23:48:39

哨兵(Sentinel)模式

1 . 什么是哨兵模式?

反客为主的自动版,能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个
作为master,其他的slave会自动转向同步新的master,实现故障自动转义

2 . 原理

  1. sentinel会按照指定的频率给master发送ping请求,看看master是否还活着,若master在指定时间内未
    正常响应sentinel发送的ping请求,sentinel则认为master挂掉了,但是这种情况存在误判的可能,比
    如:可能master并没有挂,只是sentinel和master之间的网络不通导致,导致ping失败。

  2. 为了避免误判,通常会启动多个sentinel,一般是奇数个,比如3个,那么可以指定当有多个sentinel都
    觉得master挂掉了,此时才断定master真的挂掉了,通常这个值设置为sentinel的一半,比如sentinel
    的数量是3个,那么这个量就可以设置为2个

  3. 当多个sentinel经过判定,断定master确实挂掉了,接下来sentinel会进行故障转移:会从slave中投票
    选出一个服务器,将其升级为新的主服务器, 并让失效主服务器的其他从服务器slaveof指向新的主服务 器;
    当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以 使用新主服务器代替失效服务器。

操作流程

1. 案例 - 配置1主2从3个哨兵

下面我们来实现1主2从3个sentinel的配置,当从的挂掉之后,要求最少有2个sentinel认为主的挂掉了,才进行故障转移。

为了方便,我们在一台机器上进行模拟,我的机器ip是:192.168.200.129,通过端口来区分6个不同的
节点(1个master、2个slave、3个sentinel),节点配置信息如下

在这里插入图片描述

2 . 创建案例工作目录:sentinel

执行下面命令创建 /opt/sentinel 目录,本次所有操作,均在 sentinel 目录进行。

# 方便演示,停止所有的redis
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9
mkdir /opt/sentinel
cd /opt/sentinel/

3 . 将redis.conf复制到sentinel目录

redis.conf 是redis默认配置文件

cp /opt/redis-6.2.1/redis.conf /opt/sentinel/

4 . 创建master的配置文件:redis-6379.conf

在/opt/sentinel目录创建 redis-6379.conf 文件,内容如下,注意 192.168.200.129 是这个测试机器
的ip,大家需要替换为自己的

include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile "./6379.log"

5 . 创建slave1的配置文件:redis-6380.conf

在/opt/sentinel目录创建 redis-6380.conf 文件,内容如下,和上面master的类似,只是将6379换成6380了

include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile "./6380.log"

6 .创建slave2的配置文件:redis-6381.conf

在/opt/sentinel目录创建 redis-6381.conf 文件,内容如下**

include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile "./6381.log"

7 . 启动master、slave1、slave2

redis-server /opt/sentinel/redis-6379.conf
redis-server /opt/sentinel/redis-6380.conf
redis-server /opt/sentinel/redis-6381.conf

8 . 配置slave1为master的从库

(1)执行下面命令,连接slave1

redis-cli -h 192.168.200.129 -p 6380

(2)执行下面命令,指定slave1的作为master的从机

slaveof 192.168.200.129 6379

(3)如下,使用 info replication 查看下slave1的主从信息
在这里插入图片描述

9 . 配置slave2为master的从库

(1)执行下面命令,连接slave2

redis-cli -h 192.168.200.129 -p 6381

(2)执行下面命令,指定slave2的作为master的从机

slaveof 192.168.200.129 6379

(3)如下,使用 info replication 查看下slave2的主从信息
在这里插入图片描述

10 . 验证主从复制是否正常

10.1 运行下面命令,连接master
redis-cli -h 192.168.200.129 -p 6379
10.2 运行下面命令,查看master主从信息
info replication
slave2 信息

在这里插入图片描述

10.3 在master中执行下面命令,写入数据
flushdb
set name jack
10.4 如下,查看slave1中name的值
192.168.200.129:6381> get name
"jack"  

数据一致,说明同步正常

11 .创建sentinel1的配置文件:sentinel-26379.conf

在/opt/sentinel目录创建 sentinel-26379.conf 文件,内容如下

# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26379.log"
# pid文件
pidfile /var/run/sentinel_26379.pid
# 是否后台运行
daemonize yes
# 端口
port 26379
# 监控主服务器master的名字:mymaster,IP192.168.200.129,port:6379,最后的数字2表示当
Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping
不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理
解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456

12 . 创建sentinel2的配置文件:sentinel-26380.conf

在/opt/sentinel目录创建 sentinel-26380.conf 文件,内容如下

# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26380.log"
# pid文件
pidfile /var/run/sentinel_26380.pid
# 是否后台运行
daemonize yes
# 端口
port 26380
# 监控主服务器master的名字:mymaster,IP192.168.200.129,port:6379,最后的数字2表示当
Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping
不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理
解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456

13 . 创建sentinel3的配置文件:sentinel-26381.conf

在/opt/sentinel目录创建 sentinel-26381.conf 文件,内容如下

# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26381.log"
# pid文件
pidfile /var/run/sentinel_26381.pid
# 是否后台运行
daemonize yes
# 端口
port 26381
# 监控主服务器master的名字:mymaster,IP192.168.200.129,port:6379,最后的数字2表示当
Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping
不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理
解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456

14 . 分别查看3个sentinel的信息

14.1 分别对3个sentinel执行下面命令,查看每个sentinel的信息
redis-cli -p sentinel的端口
info sentinel
14.2 sentinel1 的信息如下,其他2个sentinel的信息这里就不列了,大家自己去看一下

在这里插入图片描述

15 . 验证故障自动转移是否成功

step1:在master中执行下面命令,停止master
192.168.200.129:6379> shutdown

step2:等待2分钟,等待完成故障转移
step2:等待2分钟,等待完成故障转移

sentinel中我们配置 down-after-milliseconds 的值是60秒,表示判断主机下线时间是60秒,所以我们
等2分钟,让系统先自动完成故障转移。

step3:查看slave1的主从信息,如下

使用 info replication 命令查看主从信息
在这里插入图片描述

step4:查看slave2的主从信息,如下

slave2变成master了,且slave2变成slave1的从库了,完成了故障转移。
在这里插入图片描述

step5:下面验证下slave1和slave2是否同步

在slave2中执行下面命令

192.168.200.129:6381> set address china
OK

在slave1中执行下面命令,查询一下address的值,效果如下,说明slave2和slave1同步正

16 . 恢复旧的master自动俯首称臣

当旧的master恢复之后,会自动挂在新的master下面,咱们来验证下是不是这样的。

step1:执行下面命令,启动旧的master
redis-server /opt/sentinel/redis-6379.conf
step2:执行下面命令,连接旧的master
redis-cli -h 192.168.200.129 -p 6379```
step3:执行下面命令,查看其主从信息
info replication

效果如下,确实和期望的一致。
在这里插入图片描述

17 . 更多Sentinel介绍

关于sentinel更多信息,见:http://itsoku.com/article/247

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

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

相关文章

(自适应手机端)生活家具产品网站模板下载-带三级子菜单栏目

(自适应手机端)生活家具产品网站模板下载 PbootCMS内核开发的网站模板,该模板适用于生活家具产品网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应手机端,同一个后台,数据即时…

JavaWeb——IDEA操作:Project最终新建module

在project中创建新的module: 创建一个新的module很容易,但是它可能连接不上Tomcat,因此需要修改一些配置: 将以下地址修改为新module的地址

ElasticSearch(ES)8.1及Kibana在docker环境下如何安装

ES基本信息介绍 Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,最初由Elastic公司创建。它属于Elastic Stack(ELK Stack)的核心组件之一,用于实时地存储、检索和分析大量数据。 以下是Elastics…

八大排序算法(C语言版)之插入排序

八大排序详解 目录:一、排序的概念1.1 排序的概念1.2 排序的应用 二、直接插入排序三、希尔排序四、排序算法复杂度及稳定性分析 目录: 八大排序算法: #mermaid-svg-7qCaGEYz0Jyj9dYw {font-family:"trebuchet ms",verdana,arial,…

Win安装protobuf和IDEA使用protobuf插件

一、Win安装protobuf 1、下载编译器 protobuf下载地址:https://github.com/protocolbuffers/protobuf/releases 选择自己需要的版本下载,这里下载的是 protoc-3.19.1-win64.zip,下载之后进行解压即可。 2、配置环境变量 path 系统变量中添加…

用IntelliJ远程打断点调试

前提当然是本地和远程部署的代码一样。 记录下步骤: 1,用token登录kuboard,找到目标容器的IP: 2, 用上一步找到的IP等信息创建Remote JVM Debug: 3,打断点,wkb说要把断点此属性改为线程。我试了下似乎…

menuconfig 图形化配置原理说明二

一. 简介 之前一篇文章中,我们已经知道: scripts/kconfig/mconf 会调用 uboot 根目录下的 Kconfig 文件开始 构建图形化配置界面。 接下来简单学习一下 Kconfig 的语法。因为后面学习 Linux 驱动开发 时,可能会涉及到修改 Kconfig…

VNC图形化远程连接Ubuntu服务器

我的Ubuntu版本22.04.3,带有gnome图形桌面。配置过程参考了几篇博客,大致流程如下。因为是配置完之后才整理的流程,可能有疏漏。 Ubuntu服务器上的配置 1.先在服务器上下载vnc server(任何一种版本均可) vncserver有…

最近面试遇到的高频面试题

大家好,我是 jonssonyan 互联网寒冬?金九银十真的不存在了么?虽说现在行情是差了一些,面试机会少了一些,但是大部分公司还是或多或少的招人,春招秋招都在进行。有人离职就有人入职。所以如果你还没约到面试…

【vue会员管理系统】篇三之自定义Axios、初试后台接口、跨域问题

一、自定义封装Axios异步对象和添加拦截器 因为本项目很多组件需要通过Axios发送一步请求,所以封装Axios对象,自己封装的Axios在后续可以使用axios中提供的拦截器。 1.在src文件夹下创建utils文件夹,再在utils文件夹下创建request.js文件 2.…

Rabbitmq----分布式场景下的应用

服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一…

安美数字酒店宽带运营系统 server_ping.php 远程命令执行漏洞

数字于2006年正式推出了中国酒店智慧客房投资运营的相关业务和商业模式,凭借雄厚的研发实力、超前的技术优势、高效整合的精英团队以及深厚的行业积淀,快速地占领了酒店行业智能化服务市场;同时依托自主创新的InnFor Anymode核心技术,创建了全高清酒店客房互动信息服务运营平台…

写新闻稿的基本步骤有哪些?纯干货!

新闻稿作为企业和品牌传递信息的重要载体,不仅要求准确、客观,还应该要具备吸引人的特质。本文伯乐网络传媒将为您详细解析写新闻稿的基本步骤,帮助您轻松撰写出高质量、具有深度的新闻稿。 一、选定热门话题:寻找具有吸引力的爆点…

openwrt下游设备在校园网(DLUT-LingShui)中使用ipv6网络

背景:校园网最多支持6台设备的无感认证,需要使用路由器(本人使用openwrt系统)为更多的设备提供网络,但校园网分配的ipv6地址子网为/128,不能为路由器下的设备分配全球ipv6地址,因此需要使用nat6转发下游设备的局域网ip…

[FSCTF 2023] web题解

文章目录 源码&#xff01;启动!webshell是啥捏细狗2.0ez_php1Hello,youEZ_eval 源码&#xff01;启动! 打开题目&#xff0c;发现右键被禁了 直接ctrlu查看源码得到flag webshell是啥捏 源码 <?php highlight_file(__FILE__); $&#x1f600;"a"; $&#x…

[UDS] --- UDS概述

UDS&#xff08;Unified Diagnostic Services&#xff0c;统一的诊断服务&#xff09;诊断协议是在汽车电子ECU环境下的一种诊断通信协议&#xff0c;在ISO 14229中规定。它是从ISO 14230-3&#xff08;KWP2000&#xff09;和ISO 15765-3协议衍生出来的。“统一”这个词意味着它…

web - Tomcat服务器

文章目录 目录 文章目录 前言 一 . CS和BS的异同 二 . 什么是Tomcat 二 . Tomcat安装 四 . Tomcat目录结构 bin目录: 用于存放二进制的可执行文件 config目录 server.xml&#xff1a;配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是&#xff1a;8080 lib目录 log…

Qwt QwtPlotGrid网格类详解

1.概述 QwtPlotGrid类是Qwt绘图库中用于绘制网格的类。网格是图表中用于显示坐标轴刻度之间的辅助线的一种视觉元素。使用QwtPlotGrid类可以方便地添加水平和垂直网格线到绘图区域上。 以下是类继承关系图&#xff1a; 2.常用接口 分别启用或禁用x和y轴上的网格线。 enable…

优化改进YOLOv5算法:加入ODConv+ConvNeXt提升小目标检测能力——(超详细)

为了提升无人机视角下目标检测效果,基于YOLOv5算法,在YOLOv5主干中实现了Omnidimensional Convolution(ODConv),以在不增加网络宽度和深度的情况下提高精度,还在YOLOv5骨干网中用ConvNeXt块替换了原始的C3块,以加快检测速度。 1 Omni-dimensional dynamic convolution …

Docker 容器服务的注册、发现及Docker安全

目录 Docker容器服务的注册和发现 1、什么是服务注册与发现&#xff1f; 2、什么是consul consul的部署 1、环境准备 2、部署consul服务器 1&#xff09;建立 Consul 服务 2&#xff09;设置代理&#xff0c;在后台启动 consul 服务端 3&#xff09;查看集群信息 4&a…