redis 哨兵_Redis哨兵机制的原理介绍

328cac571077761a10abfe2c81fcdc5e.png

php中文网最新课程

每日17点准时技术干货分享

b65910a7ec72ae32f68c0fdd2f49b02c.png

67854cb6f037c8d889fbd0569bb72e14.gif

本篇文章给大家带来的内容是介绍Redis的哨兵机制,让大家了解哨兵机制的原理和如何实现。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

概述

Redis的复制有一个缺点,当主机 Master 宕机以后,我们需要人工解决切换,比如使用slaveof no one 。实际上主从复制并没有实现,高可用, 高可用侧重备份机器, 利用集群中系统的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务。

主从复制的问题

30590e09867450707a3c1006b3241262.png

一旦主节点宕机,写服务无法使用,就需要手动去切换,重新选取主节点,手动设置主从关系。

那么如何解决呢?如果我们有一个监控程序能够监控各个机器的状态及时作出调整,将手动的操作变成自动的。Sentinel的出现就是为了解决这个问题。

哨兵机制的原理及实现

Redis Sentinel

Redis Sentinel 是一个分布式架构,其中包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。

如果被标识的是主节点,它还会和其他 Sentinel 节点进行“协商”,当大多数 Sentinel 节点都认为主节点不可达时,它们会选举出一个 Sentinel 节点来完成自动故障转移的工作,同时会将这个变化实时通知给 Redis 应用方。

整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了 Redis 的高可用问题。

如图所示:

739f10417e9d2cb58ca5563c9a53565e.png

基本的故障转移流程

1)主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败。

46e21e0b2a82348aa7c45a68faceb37c.png

2)每个 Sentinel 节点通过定期监控发现主节点出现了故障

58509f56c1c7fc1cfe9376a96ac59e3a.png

3)多个 Sentinel 节点对主节点的故障达成一致会选举出其中一个节点作为领导者负责故障转移。

1b2fd8d08ed03f8ca9b603dcaadf0619.png

4)Sentinel 领导者节点执行了故障转移,整个过程基本是跟我们手动调整一致的,只不过是自动化完成的。

6c6f25e1ec1b4d2a43a937a298fd5d8a.png

5)故障转移后整个 Redis Sentinel 的结构,重新选举了新的主节点。

7b2925c5c3f136b27a64676d2ebf9838.png

实例

使用docker创建如下redis容器

redis-sentinel1    172.10.0.9    22530 -> 22530    sentinel

redis-sentinel2    172.10.0.10    22531 -> 6379    sentinel

redis-sentinel3    172.10.0.11    22532 -> 6379    sentinel

redis-master2    172.10.0.5    6383  -> 6379    Master

redis-slave2    172.10.0.6    6384  -> 6379    Slave

redis-slave3    172.10.0.7    6385  -> 6379    Slave

配置

Sentinel 的核心配置

sentinel monitor mymaster 127.0.0.1 7000 2

监控的主节点的名字、IP 和端口,最后一个2的意思是有几台 Sentinel 发现有问题,就会发生故障转移,例如 配置为2,代表至少有2个 Sentinel 节点认为主节点不可达,那么这个不可达的判定才是客观的。对于设置的越小,那么达到下线的条件越宽松,反之越严格。一般建议将其设置为 Sentinel 节点的一半加1。

sentinel down-after-millseconds mymaster 30000

这个是超时的时间(单位为毫秒)。打个比方,当你去 ping 一个机器的时候,多长时间后仍 ping 不通,那么就认为它是有问题。

sentinel parallel-syncs mymaster 1

当 Sentinel 节点集合对主节点故障判定达成一致时,Sentinel 领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,指出 Sentinel 属于并发还是串行。1代表每次只能复制一个,可以减轻 Master 的压力。

39a794ff3ed93353bf74f8c34f223d92.png

sentinel auth-pass

如果 Sentinel 监控的主节点配置了密码,sentinel auth-pass 配置通过添加主节点的密码,防止 Sentinel 节点对主节点无法监控。

sentinel failover-timeout mymaster 180000

表示故障转移的时间。

技巧

1)Sentinel 节点不应该部署在一台物理“机器”上。

这里特意强调物理机是因为一台物理机做成了若干虚拟机或者现今比较流行的容器,它们虽然有不同的 IP 地址,但实际上它们都是同一台物理机,同一台物理机意味着如果这台机器有什么硬件故障,所有的虚拟机都会受到影响;

为了实现 Sentinel 节点集合真正的高可用,请勿将 Sentinel 节点部署在同一台物理机器上。

2)部署至少三个且奇数个的 Sentinel 节点。

3个以上是通过增加 Sentinel 节点的个数提高对于故障判定的准确性,因为领导者选举需要至少一半加1个节点,奇数个节点可以在满足该条件的基础上节省一个节点。

403bcb57b9333bfe496bc655419fb581.gif

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

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

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

相关文章

linux 编写完程序吗,linux下编写C++程序

注:本文写的内容全部在ubuntu12.04下完成。要在linux下写C程序,要懂的一点编译的知识。下面介绍一下。源代码->预处理器(负责将代码补充)->汇编程序(生成汇编语言)-> 目标程序(生成二进制文件)->链接器(链接文件)->可执行程序(生成执行程…

BoooLee pyretoolkit -- 一个基于python re模块的在线正则表达式测试工具

为了学习python re模块正则表达式,寻找了一些正则表达式工具,除了komodo捆绑的rx toolkit外,其他的测试工具都是基于.net或其他引擎的,语法上多少有点出入。 干错自己写一个,用了2天时间,python re googl…

随机生成从大到小排序python_随机快速排序(使用Python描述)

title代码复制自随机快速排序的实现-夜雨最萌.和快速排序一样呀😂随机快速排序与快速排序的思路一样,差异就是取主元之前,随机快速排序多了一个步骤:而随机快速排序是随机取得一个元素,但是又会与最后一个元素交换位置.取得主元的下标位置实际上还是最后一个下标.快…

linux守护进程fifo,linux守护进程配置文件

syslogd 是一种守护进程,它负责记录(写到磁盘)从其它程序发送到系统的消息。这个服务尤其常被某些守护进程所使用,这些守护进程不会有另外的方法来发出可能有问题存在的信号或向用户发送消息。1.文件格式/etc/syslog.conf是syslog守护程序的配置文件.sys…

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS(通用配置)3.4.2 SCHEDULING&#xff0…

Asp.net页面事件引发后台程序处理原理【转】

以前在ASP中,不存在事件处理,传统的处理方法是通过隐藏文本框来提交不同的参数进行区别用户的不同动作,或则用不同的URL查询字符串来区别。ASP.NET中出现了事件处理,让开发人员区分用户动作方便并简单了许多。 实际上,…

常用linux双机软件,双机热备软件_Windows与Linux双机热备软件有哪些

Windows与Linux双机热备软件有哪些众所周知,双机热备可以提供服务器高可用性,但linux操作系统部署双机热备开源软件即可,而Windows操作系统的需要付费的Rose。1、Rose HA通过Rose HA系统把两台服务器与磁盘阵列系统相连,操作系统、…

python datatime 平均值_python求数据的时间平均

#!/usr/bin/python# encoding: utf-8import refrom itertools import imap, ifilter# 定义正则表达式patt re.compile(r"""(?P\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}) # 日期时间\s*,\s* # 分隔符号(?P\d) # 数值""", re.I|re.…

加密和解密类

&#xfeff;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.IO;usingSystem.Web;namespaceThewolfs.Framework.Text{ ///<summary>///加密类 ///</summary>publicclassTwE…

linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...

作业一&#xff1a;1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖)cat /etc/passwd /etc/group > /1.txt2)将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件/2.txt(追加)cat /etc/passwd /etc/shadow >> /2.txt3)将/1.txt、/2.…

python处理中文字符串_处理python字符串中的中文字符

# -*- coding:utf-8 -*-import sys,ostxta open(a.txt,r)str for line in txta:str line.strip().decode(utf-8)txta.close()for word in str:print word.encode(utf-8)直接输出&#xff0c;是会乱码的&#xff0c;得先解码&#xff0c;再编码。参考网址&#xff1a;http://…

继承之接口知识点和思考练习

知识点 接口是一种数据结构&#xff0c;它包含了一组函数型方法&#xff0c;通过这组数据结构&#xff0c;用户代码可以调用组件的功能。 访问修饰符 interface 接口名 { 接口体 } 接口声明时&#xff0c;注意一下几个方面&#xff1a; 1&#xff09;访问修饰符只能是new…

sqlserver大数据表操作慢_架构师必看!操作日志系统搭建秘技

​在Java开发中&#xff0c;我们经常会遇到一个棘手的问题&#xff1a;记录用户的操作行为。某些操作是相对简单的&#xff0c;我们可以逐条记录。但是某些操作行为却很难记录&#xff0c;例如编辑操作。在某一次操作中&#xff0c;用户可能编辑了对象A的几个属性&#xff0c;而…

linux 卸载sphinx,sphinx管理脚本,实现sphinx启动、关闭、重启、生成索引功能 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...

最新sphin问题比较多&#xff0c;生成主索引后无法连接上sphinx的&#xff0c;需要重启searchd进程&#xff0c;为了方便管理sphinx&#xff0c;参考网上资料&#xff1a;http://blog.csdn.net/yagas/article/details/6718532 修改一个适合自己的sphinx管理脚本。[codesyntax…

面试题(C++09:Autodesk)

网上收集的Autodesk面试题&#xff1a;1. 在类的普通成员函数中调用虚函数&#xff0c;情况是怎么样的&#xff1f; 具体来说&#xff0c;问题如下&#xff1a; 在类的普通成员函数fun1中调用了本类中的虚函数vfun2。 如果在外部有该类的对象指针pobj&#xff0c…

sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...

MySQL代表了开源数据库的快速发展&#xff0c;从2004年前后的Wiki、WordPress等轻量级Web 2.0应用起步&#xff0c;到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库&#xff0c;再到2012年开始阿里云RDS for MySQL为成千上万家客户提供可靠的关系数据库服务&#xff0c…

linux制作成后台服务,把dotnetcore 控制台app设置成linux后台服务

1&#xff0c;新建service文件vimvim /etc/systemd/system/dotnetTest.serviceip内容[Unit]Descriptiondotnet consoleit[Service]ioWorkingDirectory/home/useeinfo/publishconsoleExecStart/usr/bin/dotnet /home/useeinfo/publish/ConsoleApp3.dlltestRestartalwaysserviceS…

linux中汇编语言指令li,汇编语言IMUL指令:有符号数乘法

IMUL(有符号数乘法)指令执行有符号整数乘法。与 MUL 指令不同&#xff0c;IMUL 会保留乘 积的符号&#xff0c;实现的方法是&#xff0c;将乘积低半部分的最高位符号扩展到高半部分。x86 指令集支持三种格式的 IMUL 指令&#xff1a;单操作数、双操作数和三操作数。单操作数格式…

递归下降语法分析器的构建_一文了解函数式查询优化器Spark SQL Catalyst

大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;暴走大数据点击右侧关注&#xff0c;暴走大数据&#xff01;记录一下个人对sparkSql的catalyst这个函数式的可扩展的查询优化器的理解&#xff0c;目录如下&#xff1a;0. Overview1. Catalyst工…

面试英语自我介绍的常用词汇

面试英语自我介绍的常用词汇 面试英语自我介绍的常用词汇 Words & Expressions&范文 精华汇总贴 想 找一份满意的工作吗&#xff1f;面试中面对外国老板连珠炮似的提问&#xff0c;有没有觉得心慌意乱、无所适从&#xff1f;求职过程中面试尤为重要&#xff0c;回答问题…