当前位置:网站首页>20_Redis_哨兵模式
20_Redis_哨兵模式
2022-07-02 12:00:00 【听*雨声】
哨兵模式:主机宕机后自动选举老大的模式
概念
主从切换技术的方法是∶当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel (哨兵)架构来解决这个问题。
谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
哨兵模式的两个作用:
- 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
- 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover[故障转移]操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。
测试:
我们目前的状态是一主二从!
哨兵配置:
1、配置哨兵配置文件sentinel.conf
sentinel monitor xsyredis 127.0.0.1 6379 1
2.启动哨兵
redis-sentinel xsy_config/sentinel.conf
3.测试:关闭主机6379。如果Master节点断开了,这个时候就会从从机中随机选择一个服务器!(这里面有一个投票算法!)
4.若此时重启6379,当哨兵扫描到6379回来了就会把6379归并到新的主机(6381)下当作从机,这就是哨兵模式的规则
优点
- 1、哨兵集群,基于主从复制模式,所有的主从配置优点,它全有
- 2、主从可以切换,故障可以转移,系统的可用性就会更好
- 3、哨兵模式就是主从模式的升级,手动到自动,更加健壮!
缺点
- 1、Redis 不好啊在线扩容的,集群容量一旦到达上限,在线扩容就十分麻烦!
- 2、实现哨兵模式的配置其实是很麻烦的,里面有很多选择!
哨兵模式的全部配置
#Example sentinel.conf
#哨兵sentinel实例运行的端口 默认26379 // 如果有哨兵集群,我们还需要写多个配置文件配置每个哨兵端口
port 26379
#哨兵sentinel的工作目录
dir /tmp
#哨兵sentinel监控的redis主节点的 ip port
#master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
#quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
#sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
#当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
#设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
#sentinel auth-pass
sentinel auth-pass mymaster MySUPER–secret-0123passw0rd
#指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
#sentinel down-after-milliseconds
sentinel down-after-milliseconds mymaster 30000
#这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长,
但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
#sentinel parallel-syncs
sentinel parallel-syncs mymaster 1
#故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
#默认三分钟
#sentinel failover-timeout
sentinel failover-timeout mymaster 180000
#SCRIPTS EXECUTION
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,
一个是事件的类型,
一个是事件的描述。
如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
#sentinel notification-script
sentinel notification-script mymaster /var/redis/notify.sh
#客户端重新配置主节点参数脚本
#当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
#以下参数将会在调用脚本时传给脚本:
#
#目前总是“failover”,
#是“leader”或者“observer”中的一个。
#参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
#这个脚本应该是通用的,能被多次调用,不是针对性的。
#sentinel client-reconfig-script
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
边栏推荐
- 使用mathtype编辑公式,复制粘贴时设置成仅包含mathjax语法的公式
- 【C语音】详解指针进阶和注意点(2)
- Li Chuang EDA learning notes 15: draw border or import border (DXF file)
- buuctf-pwn write-ups (7)
- Wechat applet uses towxml to display formula
- C thread transfer parameters
- Tmall product details interface (APP, H5 end)
- LeetCode 2310. 个位数字为 K 的整数之和
- AtCoder Beginner Contest 254
- Principles, language, compilation, interpretation
猜你喜欢
Kibana basic operation
Ad20 cannot select the solution of component packaging in PCB editor
Add vector formula in rich text editor (MathType for TinyMCE, visual addition)
Fundamentals of software testing
Simple verification code generator for 51 single chip microcomputer experiment
C语言习题---(数组)
【C语音】详解指针进阶和注意点(2)
Introduction to C language -- array
[c voice] explain the advanced pointer and points for attention (2)
Full of knowledge points, how to use JMeter to generate encrypted data and write it to the database? Don't collect it quickly
随机推荐
Record an interview
LeetCode_字符串_简单_412.Fizz Buzz
c语言入门--数组
HUSTPC2022
TiDB 集群最小部署的拓扑架构
. Net core logging system
About text selection in web pages and counting the length of selected text
Introduction to mathjax (web display of mathematical formulas, vector)
C language exercises - (array)
[Space & single cellomics] phase 1: single cell binding space transcriptome research PDAC tumor microenvironment
Bit by bit of OpenCV calling USB camera
C# 线程传参
08_ 串
[QNX hypervisor 2.2 user manual]6.3 communication between guest and external
原则、语言、编译、解释
CodeCraft-22 and Codeforces Round #795 (Div. 2)D,E
数据分析常见的英文缩写(一)
Slashgear shares 2021 life changing technology products, which are somewhat unexpected
【题解】Educational Codeforces Round 82
[development environment] install the visual studio community 2013 development environment (download the installation package of visual studio community 2013 with update 5 version)