参考源

https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0

版本

本文章基于 Redis 6.2.6


概述

主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器

前者称为主节点(master / leader),后者称为从节点(slave / follower)。

数据的复制是单向的,只能由主节点到从节点。

Master 以写为主,Slave 以读为主。

一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

默认情况下,每台 Redis 服务器都是主节点。

作用

数据冗余

主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复

当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。这也是一种服务的冗余。

负载均衡

在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载。

尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量。

高可用

主从复制是哨兵和集群能够实施的基础,因此说主从复制是 Redis 高可用的基础。

一般来说,要将 Redis 运用于工程项目中,只使用一台 Redis 是万万不能的,原因如下:

  • 结构上:单个 Redis 服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大。

  • 容量上:单个 Redis 服务器内存容量有限,一般来说,单台 Redis 最大使用内存不应该超过 20G。

应用

电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是多读少写。

对于这种场景,我们可以使用如下这种架构:

环境配置

命令方式

指定主库(配从库不配主库)

slaveof 主库IP 主库端口

这种方式每次与主库断开后,都需要重新连接,非常不方便,不推荐。

配置文件方式

拷贝多个 redis.conf 文件

标准的配置是一主三从,受限于内存大小,这里演示一主二从,所以拷贝 3 份配置文件演示。

[root@sail redis]# cp redis.conf redis6379.conf
[root@sail redis]# cp redis.conf redis6380.conf
[root@sail redis]# cp redis.conf redis6381.conf

修改配置文件

修改 redis6379.conf

daemonize yes
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb

修改 redis6380.conf

daemonize yes
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dbfilename dump6380.rdb

修改 redis6381.conf

daemonize yes
pidfile /var/run/redis_6381.pid
logfile "6381.log"
dbfilename dump6381.rdb

一主二从

启动服务

[root@sail redis]# redis-server redis6379.conf
[root@sail redis]# redis-server redis6380.conf
[root@sail redis]# redis-server redis6381.conf

查看启动的服务

[root@sail redis]# ps -ef|grep redis
root 8066 6267 0 21:40 pts/3 00:00:00 redis-cli -p 6380
root 8388 1 0 21:46 ? 00:00:00 redis-server 127.0.0.1:6380
root 8397 1 0 21:46 ? 00:00:00 redis-server 127.0.0.1:6381
root 8417 6213 0 21:47 pts/0 00:00:00 grep --color=auto redis
root 11953 1 0 Mar15 ? 02:02:44 ./bin/redis-server *:6379

查看主从复制信息

info replication

默认三个都是 master,都是主机。

配置为一个 master 两个 slave

slaveof 地址 端口号

也可以通过配置文件直接指定主机,这样比较方便,也便于维护。

主机赋值,从机取值

从机是不能赋值的,这样就实现了读写分离。

主机断开

主机断开以后从机依然是从机,且正常工作。

主机恢复

主机恢复以后赋的值从机依然能够读取到,这样可以保证高可用。

从机断开

从机断开后,主机赋了新值,从机启动后无法获取到新值,原因是从机启动后又默认为主机了。

如果想启动即为从机,可以按照前面说的配置 replicaof 进行设置。

层层链路

从机也可以被其他从机当作主机,可以有效减轻主机的写压力。

6381 指定 6380 作为主机,6380 依然是从机,只是有了从机节点。

这样 6379 赋的值只需要复制到 6380,6380 再复制到 6381,这样就有效的减轻主机的写压力。

谋朝篡位

slaveof no one

主机断开后,从机如果想要当主机,可以使用 slaveof no one 进行“谋朝篡位”,从而变成主机。

但此时其他节点还是很“忠心”,依然认定之前的主机为主机,这样变成的主机是没有从机的,是个“孤家寡人”。

主机如果恢复,可以“平息叛乱”,之前的从机依旧认定它为主机。

改朝换代

前面的操作在实际场景中并不适用,因为我们希望的是主机断开后有从机作为主机,依旧实现主从复制。

所以在从机“谋朝篡位”后,还需要让剩余的从机“认主”,让他们都“归顺”于新的主机。

这样原来的主机恢复后就变成了“孤家寡人”。

以上的配置十分繁琐,任何一个环节出错都可能导致失败。

下一章节将介绍更加智能也是工作中常用的哨兵模式。

详见:https://www.cnblogs.com/codesail/p/16357624.html

Redis 15 主从复制的更多相关文章

  1. redis实现主从复制-单机测试

    一.redis实现主从复制-单机测试1.安装redis tar -zxvf redis-2.8.4.tar.gzcd redis-2.8.4make && make install2. ...

  2. redis的主从复制配置

    redis的主从复制配置 一.     原理 Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架 ...

  3. Redis总结(三)Redis 的主从复制

    接着上一篇,前面两篇我总结了<Redis总结(一)Redis安装>和<Redis总结(二)C#中如何使用redis> 所以这一篇,会讲讲Redis 的主从复制以及C#中如何调用 ...

  4. 实现Redis的主从复制配置

    实现Redis的主从复制配置比较简单,而且容易明白. 下图是要配置的主从复制结构图: 1.说明 Redis主从复制中一个主服务可以有多个从服务,一个从服务可以有多个从服务. 配置比较简单,只需要更改r ...

  5. redis的主从复制部署和使用

    reids一种key-value的缓存数据库目前非常流行的被使用在很多场景,比如在数据库读写遇到瓶颈时缓存且读写分离会大大提升这块的性能,下面我就说说redis的主从复制 首先需要启动多个redis实 ...

  6. 8. redis的主从复制和sentinal

    一. redis主从复制(读写分离) redis的主从复制分为两类节点:1个master和多个slave,master进行读写操作,slav进行只读操作 启动步骤: 主节点照常启动,slave节点启动 ...

  7. Redis基础学习(五)—Redis的主从复制

    一.概述     Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中.让从服务 ...

  8. Redis配置主从复制

    Redis配置主从复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作环境介绍 1>.操作系统环境 [root@node101.yinzhengjie.org.cn ...

  9. Redis的主从复制(十一)

    1>什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后(在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载)会将硬盘上持久化的数据恢复 ...

随机推荐

  1. Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态

    背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...

  2. 《Mybatis 手撸专栏》第10章:使用策略模式,调用参数处理器

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你这代码写的,咋这么轴呢! 说到轴,让我想起初中上学时老师说的话:"你那脑 ...

  3. CabloyJS究竟是一款什么样的框架

    CabloyJS是什么样的框架 CabloyJS 是一款自带工作流引擎的 Node.js 全栈框架,一款面向开发者的低代码开发平台,更是一款兼具低代码的开箱即用和专业代码的灵活定制的 PAAS 平台 ...

  4. Mac Book安装Windows发烫的问题

    Mac Book安装Windows后,电脑发烫,风扇一直高速旋转.针对此问题百度搜索了一下, 大多数人说更改电源选项,由"平衡"模式改为"节能"模式,亲身体验了 ...

  5. camunda如何调用HTTP REST(Service Task)服务节点

    ​ Camunda中的Service Task(服务任务)用于调用服务.在Camunda中,可以通过调用本地Java代码.外部工作项.web服务形式实现的逻辑来完成的. 本文重点描述如何使用web服务 ...

  6. PHP时间轴函数

    PHP时间轴函数可以更好的去进行用户体验.让用户动态的知道最近是什么时候,而不是死板的datatime去转换成固定的时间. 后续版本会考虑添加这个功能,代码先贴出来. function tranTim ...

  7. .Net Core 企业微信更新模版卡片消息

    1.搭建回调服务器 可参考:https://www.cnblogs.com/zspwf/p/16381643.html进行搭建 2.编写代码 2.1接口定义 应用可以发送模板卡片消息,发送之后可再通过 ...

  8. BUUCTF-LSB

    LSB 看到这个题目应该是LSB隐写,StegSolve打开,在红绿蓝0号上发现图片信息 然后在Analyse选择data extract Save bin保存图片即可 得到的是个二维码,解码即可.

  9. 用python做个计算器不是轻轻松松吗~

    计算器 Kivy是一个免费的开源Python库,可以快速轻松地开发高度交互的跨平台应用程序. 这里我将使用Python中的Kivy包来构建一个计算器GUI.(https://jq.qq.com/?_w ...

  10. 【cartogarpher_ros】三: 发布和订阅雷达scan信息

    上一节介绍和测试了cartographer的官方demo. 本节会编写ros系统中,最常用的激光雷达LaserScan传感数据的订阅和发布,方便在cartographer中加入自己的数据进行建图与定位 ...