热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis学习(十一)——哨兵模式

1.概念Redis从2.8开始正式提供了Sentinel(哨兵)架构。哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令
1. 概念

Redis从2.8开始正式提供了Sentinel(哨兵)架构。

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监视运行多个Redis实例。

2. 作用
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器;
  • 当哨兵检测到master宕机,会自动将slave切换到master,然后通过发布订阅模式通知其他服务器,修改配置文件,让它们切换为主机;

3. 测试

1)创建并编辑sentinel.conf

[root@192 dong_config]# touch sentinel.conf
[root@192 dong_config]# chmod 777 sentinel.conf
[root@192 dong_config]# vi sentinel.conf
# 数字1表示主机挂了之后,让从机投票看谁接替成为主机,票数最多的,就会成为主机
sentinel monitor dongRedis 127.0.0.1 6379 1

2)启动哨兵

[root@192 bin]# redis-sentinel dong_config/sentinel.conf
1884:X 28 Mar 2022 20:55:53.228 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1884:X 28 Mar 2022 20:55:53.228 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1884, just started
1884:X 28 Mar 2022 20:55:53.228 # Configuration loaded
1884:X 28 Mar 2022 20:55:53.229 * Increased maximum number of open files to 10032 (it was originally set to 1024).
1884:X 28 Mar 2022 20:55:53.229 * monotonic clock: POSIX clock_gettime_._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 6.2.6 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379| `-._ `._ / _.-' | PID: 1884`-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 1884:X 28 Mar 2022 20:55:53.230 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1884:X 28 Mar 2022 20:55:53.247 # Sentinel ID is 466688b6ea993476c41f0c2109410430489548d8
1884:X 28 Mar 2022 20:55:53.247 # +monitor master dongRedis 127.0.0.1 6379 quorum 1
1884:X 28 Mar 2022 20:58:13.686 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 20:58:23.703 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ dongRedis 127.0.0.1 6379

3)测试主机崩溃

关闭6379主机,进行自动选举

1884:X 28 Mar 2022 21:00:01.989 # +sdown master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:01.989 # +odown master dongRedis 127.0.0.1 6379 #quorum 1/1
1884:X 28 Mar 2022 21:00:01.989 # +new-epoch 1
1884:X 28 Mar 2022 21:00:01.989 # +try-failover master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:01.998 # +vote-for-leader 466688b6ea993476c41f0c2109410430489548d8 1
1884:X 28 Mar 2022 21:00:01.998 # +elected-leader master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:01.998 # +failover-state-select-slave master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.053 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.053 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.136 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.152 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.152 # +failover-state-reconf-slaves master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:02.190 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:03.197 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:03.197 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:03.274 # +failover-end master dongRedis 127.0.0.1 6379
1884:X 28 Mar 2022 21:00:03.274 # +switch-master dongRedis 127.0.0.1 6379 127.0.0.1 6381
1884:X 28 Mar 2022 21:00:03.274 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ dongRedis 127.0.0.1 6381
1884:X 28 Mar 2022 21:00:03.274 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ dongRedis 127.0.0.1 6381

可以查看到,6381此时成为主机

127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=52885,lag=1

如果此时主机回来了,只能归并到其他主机下面当从机。

4. sentinel.conf参数说明

# 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


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
author-avatar
那一世我给不了你的温柔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有