当前位置: 首页 > news >正文

Redis进阶(四):哨兵

        为了解决主节点故障,需要人工操作切换主从的情况;因此需要一种方法可以自动化的切换:哨兵的引入大大改变这种情况。

哨兵的基本概念

自动切换主从节点

        哨兵架构

1、当一个哨兵节点发现主节点挂了的时候,还需要其他节点也去检测一下这个主节点到底是不是真的挂了(防止误判)。

2、发现是真的挂了之后,哨兵 节点推举一个leader之后,选一个slave作为新的主节点

3、挑选新的主节点之后,哨兵节点自动的将从节点slave no one 脱离主节点的控制,并且控制其他的从节点归附到这个新的主节点身上。

4、哨兵节点会自动通知客户端,告知新的主节点是谁,并且后续客户端进行写操作就是针对新的主节点了。 

 因此  redis 哨兵核心功能 : 1.监控  2.自动的故障转移  3.通知

搭建哨兵

        准备工作(基于docker)

docker可以认为是一个轻量级的虚拟机:隔离环境,不吃硬件资源

docker-compose:管理一组docker容器

镜像:docker中的镜像和容器类似于 可执行程序 和 进程 的关系

镜像(Mirroring)是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

容器 (Container) 泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品。

在云原生技术中,容器就是将软件(镜像)打包成标准化单元,以用于开发、交付和部署。

  • 容器可以是镜像的一个实例
  • 镜像是文件,容器是进程
  • 镜像为静态,而容器可能为动态

镜像准备好之后,拉取的镜像里面包含了一个精简的Linux操作系统,并且上面安装了redis,基于镜像创建容器跑起来即可。

搭建redis哨兵环境

创建数据节点

修改配置文件:

version: '3.7'
services:master:image: 'redis:5.0.9' //基于哪个镜像container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports: - 6379:6379 //端口映射slave1:image: 'redis:5.0.9'container_name: redis-slave1restart: alwayscommand: redis-server --appendonly yes --slaveof redis-master 6379ports:- 6380:6379slave2:image: 'redis:5.0.9'container_name: redis-slave2restart: alwayscommand: redis-server --appendonly yes --slaveof redis-master 6379ports:- 6381:6379

redis -cli -p进行验证

创建哨兵节点

version: '3.7'
services:sentinel1:image: 'redis:5.0.9'container_name: redis-sentinel-1restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel1.conf:/etc/redis/sentinel.confports:- 26379:26379sentinel2:image: 'redis:5.0.9'container_name: redis-sentinel-2restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel2.conf:/etc/redis/sentinel.confports:- 26380:26379sentinel3:image: 'redis:5.0.9'container_name: redis-sentinel-3restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel3.conf:/etc/redis/sentinel.confports:- 26381:26379
networks:default:external:name: redis-data_default 

创建sentinel1.conf  sentinel2.conf  sentinel3.conf 三份⽂件的内容是完全相同的.
都放到 /root/redis-sentinel/ ⽬录中.

bind 0.0.0.0
port 26379
sentinel monitor redis-master redis-master 6379 2
sentinel down-after-milliseconds redis-master 1000

启动哨兵节点:

docker-compose up -d

但要注意的是,docker-compose启动多个容器:处于同一个局域网中,可以使这个容器相互访问,当时哨兵节点配置文件中的sentinel monitor注明的是另一个局域网(三个redis-server节点是一个局域网),并不能访问,

docker network ls

列出当前docker中的局域网

修改配置文件即可达成修改局域网:

networks:default:external:name: redis-data_default 

name的获取从 列出当前docker中的局域网(docker network ls) 获取到

查看日志

docker-compose logs

重新选举

手动干掉主节点后观察日志:

确定主节点挂了之后,就需要选拔新的主节点

redis-master重启之后
docker start redis-master

Redis主节点如果宕机,会把其中的⼀个从节点,提拔成主节点.

当之前的Redis主节点重启之后,这个主节点被加⼊到哨兵的监控中,但是只会被作为从节点使⽤.

主从切换的具体流程 

1.主观下线

哨兵节点通过心跳包判定redis服务器是否正常工作,如果没有心跳包了,说明redis节点挂了,但是此时不能排除网络波动影响,只能单方面认为该节点挂了

2.客观下线

多个哨兵认为主节点挂了:认为挂了的哨兵节点数目达到法定票数,哨兵们就认为该主节点客观下线

3.要让多个哨兵节点选举一个leader,由这个leader负责选一个从节点作为新的主节点。

示例:

此时一号哨兵成为leader

每个哨兵只有一票,当哨兵1发现当前主节点客观下线之后,就立即给自己投一票,并且告诉了2,3哨兵节点,(当他们没有投票的时候,收到投票请求就会投出去)如果总的票数超过了哨兵总数的一半,选举完成(哨兵总数常设为奇数)

 4.此时leader选举完毕,leader需要挑选一个从节点作为主节点:

a.优先级:每个redis数据节点都会在配置文件中,有一个优先级设置,slave-priority,优先级高的节点会win

b.offset 优先级相同比较offset,offset:从节点从主节点同步数据的进度,挑选offset大的节点作为主节点

c.run id 每个redis节点启动的时候随机生成的一串数字:此时选谁都行,随机挑一个。看run id 更小

5.新的主节点选好之后,leader会控制这个节点执行slave no one,成为master。并且控制其他节点执行slave of,让这些其他节点 “认主” 。

http://www.lryc.cn/news/414620.html

相关文章:

  • 蓝屏事件:网络安全的启示
  • 技术方案评审原则
  • 117页PPT埃森哲-物流行业信息化整体规划方案
  • 百度网盘不下载怎么直接打印文件?
  • 设置了 robots.txt 禁止爬虫抓取,为什么还是能被百度搜索出来
  • DedeCMS-V5.7.82-UTF8织梦管理系统漏洞
  • 【Python】字符串练习题及代码示例
  • fluent动网格profile udf 注意事项
  • 【doghead】mac构建 2: player 端 clion构建
  • 论网络流(最大流篇)--新手入门超详解--包教包会
  • 环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)
  • 使用 OpenSearch 的 K-NN 向量搜索来增强搜索功能
  • Less-2(闭合)
  • mysql介绍
  • 【ROS学习】ROS中 use_sim_time 参数的含义与作用
  • python-查找元素3(赛氪OJ)
  • 苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战
  • pytest之fixture
  • Rancher
  • Wordpress建站问题记录
  • JavaFx中通过线程池运行或者停止多个周期性任务
  • 使用RabbitMQ实现异步支付状态通知
  • [最短路dijkstra],启动!!!
  • Java企业微信服务商代开发获取AccessToken示例
  • How does age change how you learn?(2)年龄如何影响学习能力?(二)
  • 可验证随机函数 vrf 概述
  • 鸿蒙双向绑定组件:TextArea、TextInput、Search、Checkbox,文本输入组件,图案解锁组件PatternLock
  • JS 算法 - 计数器
  • JavaScript基础——JavaScript运算符
  • E23.【C语言】练习:不创建第三个变量实现两个整数的交换