redis 主从复制和哨兵模式(二)
Redis 主从复制
为了分担单机 redis 的数据服务压力,需要进行读写分离,所以搭建 redis 的主从结构,主节点负责写,从节点负责读,主节点定期把数据同步到从节点。
配置主从
# 配置文件中增加一行以哪个 redis 为主
slaveof ip port
# 主节点的密码
masterauth h123
# 从节点只读,默认配置
slave-read-only yes
# 关闭 TCP_NODELAY ,无论多大的包都直接发送,默认即可
repl-disable-tcp-nodelay no
# 主节点默认每 10 秒向从节点发送心跳包,默认即可
repl-ping-slave-period 10
主从拓扑结构
slaveof 只是说明本机是哪台的从节点,所以很灵活的实现可种主从结构
- 一主一从:用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响
- 一主多从:用于读场景比较多的场合,但这样会造成主节点需要同步较多的从节点,影响主节点的带宽。
- 树状主从:主节点推送更少的从节点,由从节点来递归推送
可以使用 info 命令查询当前 redis 的从节点个数和位置,需要自己依次遍历查询才能得到完整的拓扑结构
数据同步
redis 2.8版本以上使用psync
命令完成同步,过程分全量复制与部分复制
- 全量复制:一般用于初次复制场景(第一次建立SLAVE后全量)
- 部分复制:网络出现问题,从节点再次连接主节点时,主节点补发缺少的数据,每次数据增量同步
故障修复
当主节点出现故障时,已经不能对外提供写服务 ,但从节点可以提供读服务
可以将其中一台从节点转变成主节点,需要人工处理,无法实现高可用
处理流程
- 修改一台从节点为主节点,在节点执行
slaveof no one
- 让其它从节点以现在的主节点为主节点,redis-cli 执行
slaveof ip port
Redis 哨兵机制(Sentinel)
哨兵机制主要是为了解决主从复制不能自动切换 master 的问题,当主节点故障时,由 sentinel 自动完成故障发现和修复,并通知应用方,实现高可用
配置哨兵节点配置文件,并启动三个哨兵
# 后台启动
daemonize yes
# 监控主节点
sentinel monitor mymaster 127.0.0.1 6379 1
# 启动哨兵
./redis-sentinel conf/sentinel.conf
哨兵的监控任务
- 每 10 秒会向主节点和从节点发送
info
命令获取最新拓扑图 - 每个哨兵节点会每隔 2 秒向 redis 数据节点的指定主题(_sentinel_:hello)上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息;同时每个哨兵节点自己也会订阅这个主题,用来了解其它节点的判断,其实就是通过 publish/subscribe 来完成的。
- 每隔 1 秒每个哨兵会向主节点,从节点及其余哨兵节点发送一次 ping 命令做心跳检查,用来判断节点是否正常。
判断主节点是否异常
主观下线(sdown):ping 命令如果在配置的 down-after-milliseconds
之后没有收到有效回复,那么就认为该数据节点主观下线。
客观下线:超过选举个数哨兵认为异常
当有哨兵节点判断主节点异常时,此时该哨兵节点会通过指令sentinel is-masterdown-by-addr
寻求其它哨兵节点对主节点的判断,当超过quorum(选举)个数的哨兵节点回答下线,则认为该主节点客观下线
哨兵领导者的选举
当主节点客观下线时,需要选举出一个哨兵节点做为哨兵领导者,以完成后续选出新的主节点的工作。
这个选举的大体思路是:
- 每个哨兵节点通过向其他哨兵节点发送
sentinel is-master-down-by addr
命令来申请成为哨兵领导者。 - 而每个哨兵节点在收到一个
sentinel is-master-down-by addr
命令时,只允许给第一个节点投票,其他节点的该命令都会被拒绝。 - 如果一个哨兵节点收到了半数以上的同意票,则成为哨兵领导者。
- 如果前面三步在一定时间内都没有选出一个哨兵领导者,将重新开始下一次选举。
可以看到,这个选举领导者的流程很像 Raft 中选举 Leader 的流程。
如何选择谁成为主节点
在剩下的从节点中,按照以下顺序来选择新的主节点:
- 过滤掉“不健康”的数据节点:比如主观下线、断线的从节点、五秒内没有回复过哨兵节点 Ping 命令的节点、与主节点失联的从节点。
- 选择 Slave-Priority(从节点优先级)最高的从节点,如果存在则返回,不存在则继续后面的流程。
- 选择复制偏移量最大的从节点,这意味着这个从节点上面的数据最完整,如果存在则返回,不存在则继续后面的流程。
- 到了这里,所有剩余从节点的状态都是一样的,选择 runid 最小的从节点。
提升从节点为主节点
最后就是把从节点转移成主节点,并让其它从节点以它为主节点,和手动处理是一样的流程,只是发起命令人变成了哨兵
- 修改它为主节点,在节点执行
slaveof no one
- 让其它从节点以现在的主节点为主节点,执行
slaveof ip port
- 哨兵节点集合会将原来的主节点更新为从节点,当其恢复之后命令它去复制新的主节点的数据。
一点小推广
创作不易,希望可以支持下我的开源软件,及我的小工具,欢迎来 gitee 点星,fork ,提 bug 。
Excel 通用导入导出,支持 Excel 公式
博客地址:https://blog.csdn.net/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi
使用模板代码 ,从数据库生成代码 ,及一些项目中经常可以用到的小工具
博客地址:https://blog.csdn.net/sanri1993/article/details/98664034
gitee:https://gitee.com/sanri/sanri-tools-maven
redis 主从复制和哨兵模式(二)的更多相关文章
- Redis——(主从复制、哨兵模式、集群)的部署及搭建
Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...
- Linux基于Docker的Redis主从复制、哨兵模式搭建
本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...
- Redis主从复制、哨兵模式
1.部署主从 环境:主IP:10.0.0.15,端口6379;从IP:10.0.0.16,端口6379. 原理:基于RDB持久化的功能来实现主从复制的功能. a.linux-redis1(10.0.0 ...
- redis学习三,Redis主从复制和哨兵模式
Redis主从复制 java架构师项目实战,高并发集群分布式,大数据高可用,视频教程 1.Master可以拥有多个slave 2.多个slave可以连接同一个Master外,还可以连接到其他的slav ...
- Redis主从复制配置+哨兵模式
架构设计: master:s0 slave:s1.s2 主机映射信息如下: 192.168.32.100 s0 192.168.32.101 s1 192.168.32.102 s2 1.安装Redi ...
- Redis主从复制之哨兵模式(sentinel)
介绍:反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库 调整结构:6379带着80.81 自定义的/myredis目录下新建sentinel.conf文件,名字绝不 ...
- redis的主从复制和哨兵模式
Redis主从复制是什么? 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 Redis主从复制 ...
- redis主从复制和哨兵机制
redis主从复制和哨兵机制 技术标签: redis 1.redis主从复制(master/slave模式) 主数据库可以进行读写操作,当写操作导致数据发生变化时会自动将数据同步给从数据库.而一般情况 ...
- redis: 主从复制和哨兵模式(十三)
redis 主从复制 最低要求是一主二从(一个主机和两个从机) 主机才能写 从机只能读 只要从机连接到主机 数据就会全量复制到从机 环境配置(同一台机器) 1:配置文件 redis.conf配置如下: ...
随机推荐
- SpringBoot:高并发下浏览量入库设计
一.背景 文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里. 1.1 这么做,有几个问题: 在GET请求的业务逻辑里进行 ...
- 随笔编号-11 阿里云CentOS7系列二 -- 安装Tomcat7的方法
前面讲到了JDK在CentOS7 环境下的安装步骤.这次来分享安装Tomcat7的安装步骤: Tomcat7 安装包: 链接: http://pan.baidu.com/s/1geKwASN 密码: ...
- 体验SpringCloud Gateway
Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringCloud Gateway应用,快速体验网关服务 ...
- GO.数据库接口
Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱动. 目前NOSQL已经成为Web开发的一个潮流,很多应用采用了NOSQL作为数据 ...
- ST算法 Sliding Window algorithm template
ST算法(Sliding Window):A easy way to slove the substring problems algorithm template to slove substrin ...
- 使用python发生邮箱
1.在使用邮箱登陆需要在邮箱内开启SMTP服务 2.注意在代码中登陆程序使用的密码为第三方授权登陆码,QQ邮箱为系统提供的授权码 网易邮箱为自己设置的授权码 QQ邮箱模拟 import smtplib ...
- POJ - 3660 Cow Contest 传递闭包floyed算法
Cow Contest POJ - 3660 :http://poj.org/problem?id=3660 参考:https://www.cnblogs.com/kuangbin/p/31408 ...
- uiautomator2 实现App九宫格解锁
App九宫格解锁 之前在testerhome社区看见codeskyblue大佬写过一种方法,但是这种办法存在一个弊端,那就是多个点的坐标是写死的,也就是说要是换了部手机,九宫格解锁就行不通了,于是就想 ...
- 不权威的国产CPU发展历程
最近进行了一些国产化相关工作 趁着周末有时间,自己整理一下这段时间的学习内容. 毕竟不是处理器和芯片的业内人士,里面多有纰漏,请谅解. 希望可以作为入门学习的简单知识. 1.0 远古时代 unix 世 ...
- webapi 参数传递详解
原因 经常有朋友遇到webapi参数传递问题,自己也碰到过一些坑,在此记录下正确的姿势,简单参数传递相信没有人会有问题,容易出现问题的是对象参数和表单参数. 1.WebApi5.2.3有FromBod ...