redis 主从复制薪火相传 哨兵sentinel配置以及底层原理

本文主要是介绍redis 主从复制薪火相传 哨兵sentinel配置以及底层原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

薪火相传

我们知道redis的主从复制还有一个常见的架构  ---薪火相传

使用这种结构可以有效减轻master节点的复制数据同步压力

注意这里的6380节点仍然是slave节点

可以理解为一个中间节点,仍然是不可以写只可以读取的

我们只需要使用

slaveof ip port 

这里可能访问节点的时候出现问题,这是在节点变化期间

多次尝试即可

当然我们还可以让其自立门户

slaveof no one

直接当老大

前言

复制的原理和流程

这里复制首先由slave来进行同步

1.首次连接是使用的全量复制

salve本身的数据也会被直接覆盖   主从复制的时候会触发rdb 将rdb发送给从库完成复制的初始化

2.后面就是保持持续通信

每隔10s发送一个心跳包

3.进入平稳,增量复制

后续slave增量同步master的信息

4.从机下线 断点续传

这时候是有一个offset

master会检查backlog的偏移量

会将对应复制的偏移量传送给从机,类似与断点续传

前面我们说到了redis的主从复制

我们知道这里主机可以读写

从机只能读取

如果主机宕机,从机则会无限时间的等待

这样当然是我们不想看到的

所以这里引入了哨兵集群

主要负责监控master节点是否宕机

负责选举出新的master节点

配置哨兵

由于博主的机器原因

这里是在6379节点开启了三个哨兵集群

因为机器内存不够,但是鼓励各位小伙伴使用六台虚拟机来完成任务

首先我们配置master分支的conf文件

这里我们需要和上一篇一样配置对应的访问master节点的密码

架构如下

我们需要配置三个sentinel的配置文件

bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir "/myredis"
sentinel monitor mymaster 192.168.111.169 6379 2
sentinel auth-pass mymaster 111111

对应配置即可

注意最后两行的含义

需要配置master的名称 ip 端口 法定票数

这里的法定票数就是多少个哨兵认为master挂了就真的挂了

这里有两个概念

主观下线:一个节点在默认超时时间内(30s)没有感受到master的存在

客观下线:超过法定票数的哨兵都这样认为master挂了

然后使用这样的方式可以成功启动哨兵集群

使用ps -ef来查看对应的哨兵服务是否成功启动

后面我们可以尝试手动断开原来的master节点

我们会发现redis会自动选举新的master节点

对应如何选举的咱们下面慢慢说 

注:原来的master节点即使回归之后,也只能当小弟了,不会出现对应的master冲突

两个小错误

可能刚刚断开连接还没完全恢复,是正常的异常警告

不影响后续的操作

注意这里重新选举之后新的sentinel文件也会进行对应的配置 

对应的redis配置文件也会进行对应的动态更新

对应的从节点会将对应的主节点进行对应的配置

也会进行对应的增量更新

那么选举节点的原理是什么样的呢?

选举兵王

首先我们使用有三个哨兵节点的

三个哨兵节点首先会使用raft算法进行选举一个哨兵之王(leader)

然后由哨兵节点去进行操作对应的redis节点

raft算法

本质上还是一个先到先得的原则

假设现在是abc三个节点

a向bc发生对应的申请

同理b也是发送申请

c也是同理

a先接受到谁的申请就把自己的票投送给谁

投票最多的则作为兵王

选举master

这里我们所有的master的对应的操作是由兵王来操作的

我们按照三个评判标准来进行评价

这三个评判标准的优先级和文章顺序一样

1.根据权限大小

在redis配置文件设置的权限大小

默认是100 可以手动配置

2.偏移量

我们知道每个节点的网络情况不同

slave节点可能复制的量不同

复制量大的优先

3.根据runid

runid根据字典序  小的优先

选举出来之后由leader哨兵来进行对应的先让选出来的slave进行一个

slaveof no one 

在对其他的slave节点进行对应的

slaveof ip port操作

让其他节点成为自己的小弟

注意这里的源master节点也被加在小弟列表中了

这篇关于redis 主从复制薪火相传 哨兵sentinel配置以及底层原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012013

相关文章

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

mysql5.7.15winx64配置全过程

《mysql5.7.15winx64配置全过程》文章详细介绍了MySQL5.7.15免安装版的配置步骤,包括解压安装包、设置环境变量、修改配置文件、初始化数据目录、安装服务、启动数据库、登录及密码修改... 目录前言一、首先下载安装包二、安android装步骤1.第一步解压文件2.配置环境变量3.复制my-

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red