Redis主从复制(新)

        像一些大型的项目,为了保证系统的稳定性,会有一台Redis服务器专门作为主机(master),还会有多台服务器作为从机(slave)主机可专门用作写数据,然后根据配置和策略,自动将数据同步到从机,而从机专门用来读数据,从而实现了读写分离,也叫主从复制。

主从复制的作用有:

  • 读写分离,这样性能得到扩展。

  • 数据备份。

  • 容灾处理,恢复快速。

1.一主二仆

1.首先启动三台redis服务器:

 2.分别进入到客户端,可以通过info replication命令打印信息:

3.发现服务启动后,3台服务均默认为主机,我们要将6380和6381配置为从机,成为6379的从服务器。

4.在6380服务和6381服务上执行slaveof 127.0.0.1 6379命令即可,此时主机可以进行读写操作,而从机只能进行读操作。

注意

  • 如果主机6379挂掉,从机依然是从机,不会上位为主机,没有主机只是没有写操作。等到主机重启后,一切恢复如初。

  • 从机挂掉重启后又会成为一台"空"主机,就需要重新设置slaveof 127.0.0.1 6379

主机的数据是怎么同步到从机的?

一阶段——>如果现有一个从机突然连接到主机上时:

  • slaveof命令成功后证明从机连接成功,从机会向master主机发送一个同步命令。

  • master接收到同步命令之后,主机会自动触发进行数据持久化操作,同时将所有接收到的用于修改数据集命令缓存起来,持久化后主机将磁盘中的rdb文件发送到各从服务器,从服务器拿到rdb文件后本地磁盘保存并读取加载数据,此操作也称为全量复制

二阶段——>平常主机上的数据怎么同步到从机上:

  • 主机持续将新的所有收集到的修改命令自动依次传给从机,完成同步,此操作也称为增量复制

2.薪火相传

        上面的一主二仆主机需要挨个传送数据给从机,这样主机压力有点大,能不能使从机之间进行数据的传输呢?

        上一个slave1其实也可以是下一个slave2的Master,slave1同样可以接收其他slave的连接和同步请求,那么该slave1作为了链条中下一个的"master"(实际还是6379的从机),可以有效减轻6379master的传输压力,去中心化降低风险。

        用salveof ip port命令进行操作。风险就是这个salve1宕机了,后面连接的salve1的从机就没法同步备份了。如果6379主机master挂了,那么从机还是从机,只是无法写数据了。

3.反客为主

        反客为主就是当6379master主机宕机后,可以有一个从机slave可以升级为master主机,其它后面的slave不用做任何修改。需要手动用 slaveof no one 将从机变为主机。但是缺点是我们要手动设置,可以采用哨兵模式来自动完成。

4.哨兵机制

 

        Redis的哨兵机制是一套独立的模式,哨兵可看作是一个独立的进程,用来监视主机,我们需要单独启动,该进程发送命令,等待主机的响应,达到监控主机Redis服务的作用。

        如果在规定的时间内,接收不到主机的响应,那就说明主机挂掉了,则会通过一套选举机制,从众多的从机当中选取一台当作Redis服务的主机,原主机的直系小弟从机配置会自动变换,变为选举的主机的从机。就算挂掉的主机重新上线,还是会成为刚被选举的主机的从机。

4.1从机之间是怎么推选的?

1.选择配置文件中优先级靠前的,值越小,优先级越高,默认为100。

2.选择和原主机数据同步最全的从机。

3.选择runid最小的从机,启动时,会自动生成一个40位的runid。

5.主从复制的问题

        由于所有的写操作都是先在主机上操作,然后同步更新到从机上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216972.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arp报文及使用go实现

一、ARP协议报文格式及ARP表 ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备…

2023 年 认证杯 小美赛 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 cs数模团队在认证杯 小美赛前为大家提供了许多资料的内容呀&am…

小程序姓名:ssm+vue基本微信小程序的个人健康管理系统

项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了小程序的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数…

Spark SQL 时间格式处理

初始化Spark Sql package pbcp_2023.clear_dataimport org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions.{current_date, current_timestamp}object twe_2 {def main(args: Array[String]): Unit { //新建SparkC…

升级python后sudo apt-get update报错

sudo apt-get update 报错: sh: /usr/lib/cnf-update-db: /usr/bin/python3.7.5: bad interpreter: No such file or directory Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success if /usr/bin/test -w /var/lib/c…

Flash Attention:高效注意力机制的突破与应用

注意力机制彻底改变了自然语言处理和深度学习领域。它们允许模型在执行机器翻译、语言生成等任务时专注于输入数据的相关部分。 在这篇博客[1]中,我们将深入研究被称为“Flash Attention”的注意力机制的突破性进展。我们将探讨它是什么、它是如何工作的&#xff0c…

VMware虚拟机安装华为OpenEuler欧拉系统

首先去欧拉官方网站下载openEuler的安装镜像: openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 我下载的是最新的23.03长期维护版本,架构选择x86_64。 创建新虚拟机:选择典型配置,点击下一步:选择下载的镜像文…

Google hacking语法

Google hacking语法 文章目录 Google hacking语法site:inurl:intitle:filetypecacheintext注意 site: 搜索子域 跟域名site:www.baidu.com 定位 跟语言 site: jp inurl: 用于在特定url链接中搜索网站信息 inurl:login intitle: 使用intitle:指令返回页面标题中包含关键…

【Redis基础】Redis安装及管理详细教程

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! 1,UBuntu安装Redis 1,使用su命令切换到root用户 su2,使用se…

Leetcode—58.最后一个单词的长度【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—58.最后一个单词的长度 实现代码 int lengthOfLastWord(char* s) {int len strlen(s);int left 0, right 0;if(len 1) {return 1;}while(right < len) {if(right 1 < len) {if(s[right] && s[righ…

Visual Studio 中文注释乱码解决方案

在公司多人开发项目中经常遇到拉到最新代码&#xff0c;发现中文注释都是乱码&#xff0c;很是emjoy..... 这是由于编码格式不匹配造成的&#xff0c;如果你的注释是 UTF-8 编码&#xff0c;而文件编码是 GBK 或者其他编码&#xff0c;那么就会出现乱码现象。一般的解决办法是…

5.1 Windows驱动开发:判断驱动加载状态

在驱动开发中我们有时需要得到驱动自身是否被加载成功的状态&#xff0c;这个功能看似没啥用实际上在某些特殊场景中还是需要的&#xff0c;如下代码实现了判断当前驱动是否加载成功&#xff0c;如果加载成功, 则输出该驱动的详细路径信息。 该功能实现的核心函数是NtQuerySys…