Redis进阶:主从复制、集群搭建

news2024/11/27 18:32:10

Redis进阶

  • 1. 主从复制机制
    • 1.1 复制原理
    • 1.2 配置“一主多从”试验主从复制
      • 1)为每个Redis进程提供配置文件
      • 2)分别在不同客户端启动Redis服务
      • 3)配置服务器成为某主机的下属从机
    • 1.3 不同模式
      • 1.3.1 一主二仆
      • 1.3.2 薪火相传
      • 1.3.3 反客为主
    • 1.4 哨兵模式
      • 1.4.1 使用一主二仆模式试验哨兵模式
  • 2. 集群
    • 2.1 模拟实现集群
      • 2.1.1 节点分配策略
      • 2.1.2 slots介绍
    • 2.2 集群相关操作
    • 2.3 故障恢复

1. 主从复制机制

  • 介绍:主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制Master以写为主,Slave以读为主
    在这里插入图片描述

  • 优点:
    1)读写分离,减轻主机的压力,性能扩展;
    2)容灾快速恢复:某个从机宕机,可自动从其他的从机读取数据;

  • 缺点:复制延时,从机越多,复制延时的情况越严重;

  • 通常配置为“一主多从”模式,主机宕机带来的影响可通过搭建集群解决;

1.1 复制原理

  • 数据复制分为:1)全量复制:在从机连接主机时触发;2)增量复制:在主机有数据更新操作时触发;
    在这里插入图片描述
    情况1:从机连接主机(全量复制)
  • 从机Slave向主机Master发出数据同步请求;
  • 主机将当前内存中数据持久化到本地rdb文件中,将rdb文件发送到从机;
  • 从机保存rdb文件,随后加载该文件复制数据;

情况2:主机发生数据更新(增量复制)

  • 主机发生数据更新,主动将数据更新操作发送到从机;
  • 从机接收更新数据,完成数据同步;

1.2 配置“一主多从”试验主从复制

  • 此处在一台服务器中,通过启动不同的Redis进程模拟“1主2从”;
  • 有条件的可以使用多台主机模拟;
  • 提前创建一个实验目录放置各个进程对应的redis.conf配置文件:1)mkdir redis_demo;2)cd redis_demo
  • 不同Redis进程需要对应不同的启动端口,此处三个进程分别对应6379、6380、6381端口;
  • 配置文件公共内容通过include参数引入,由相同目录下redis.conf文件提供;
  • 主机负责写数据,从机负责读数据;

1)为每个Redis进程提供配置文件

  • 各进程对应配置文件分别为:redis6379.conf、redis6380.conf、redis6381.conf
  • 配置文件内容包括:
    拷贝多个redis.conf文件include(写绝对路径);
    开启daemonize yes;
    Pid文件名字pidfile;
    指定端口port;
    Log文件名字;
    dump.rdb名字dbfilename;
    Appendonly 关掉或者换名字;

    在这里插入图片描述

2)分别在不同客户端启动Redis服务

  • 使用不同的配置文件,通过redis-server redis***.conf启动Redis服务;
  • 使用redis-cli -p 端口号访问Redis服务;
  • 可使用info replication查看主从复制信息;

3)配置服务器成为某主机的下属从机

  • 在从机环境下使用slaveof 主机ip 主机Redis服务对应端口进行配置;

1.3 不同模式

1.3.1 一主二仆

  • 一个主机Master,两个从机Slave;
  • 从机一旦连接主机,则会从头复制主机数据;
  • 从机只负责读数据,无法写数据;
  • 主机宕机后,从机不作任何操作,原地等待主机恢复;
    在这里插入图片描述

1.3.2 薪火相传

  • 从机slave也可以作为某些下属服务器的主机master;
  • 从机只会与其从属的主机进行数据同步;
  • 优点:有效降低主机的写压力;
  • 缺点:一旦作为“主机”的从机宕机,其下属的从机都无法进行数据复制;
    在这里插入图片描述

1.3.3 反客为主

  • 当主机宕机后,与其相连的从机可变为主机;
  • 实现方式,在从机中执行slaveof no one命令即可;

1.4 哨兵模式

  • 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
    在这里插入图片描述
  • 选择策略
    优先级在redis.conf中默认:replica-priority 100,值越小优先级越高;
    偏移量是指获得原主机数据最全的;
    每个redis实例启动后都会随机生成一个40位的runid
    在这里插入图片描述

1.4.1 使用一主二仆模式试验哨兵模式

  • 提前配置好一主二仆模式,参见2.2节;
  • 在配置文件目录下新建sentinel.conf哨兵模式配置文件;
  • sentinel.conf文件中写入内容sentinel monitor 监控主机别名 主机ip Redis进程端口号 同意发生迁移的哨兵数量:该哨兵需要监控的主机ip等信息;
  • 启动哨兵:redis-sentinel sentinel.conf
  • 一旦哨兵所监控的主机发生故障,哨兵会根据投票数量在主机所下属的从机中选取一个作为新的主机;
  • 原始主机重新启动后,自动变为从机;

2. 集群

  • Redis存在的问题:
    1)Redis扩容问题;
    2)Redis分摊并发写操作;
    3)主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息;

  • 解决方案:
    1)早期方案:代理主机
    特点:客户端请求通过代理主机转发;
    在这里插入图片描述
    2)早期方案:无中心化集群
    特点:服务器之间互相连通,任何一台服务器都可以作为客户端访问入口;
    在这里插入图片描述

  • 集群介绍:
    1)Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N
    2)Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯集群也可以继续处理命令请求

  • 集群缺点:
    1)多键操作是不被支持的 ;
    2)多键的Redis事务是不被支持的;lua脚本不被支持;
    3)由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大;

2.1 模拟实现集群

搭建集群流程

  • 1)清空已有的rdb文件、aof文件;
  • 2)使用Redis服务器中6个不同的Redis进程模拟不同服务器,进程分别对应6379、6380、6381、6389、6390、6391端口,对应配置文件分别为:**redis6379.conf、redis6380.conf、redis6381.conf等;
  • 3)配置文件内容包括:
    拷贝多个redis.conf文件include(写绝对路径);
    开启daemonize yes;
    Pid文件名字pidfile;
    指定端口port;
    Log文件名字;
    dump.rdb名字dbfilename;
    Appendonly 关掉或者换名字;
    cluster-enabled yes 打开集群模式;
    cluster-config-file nodes-xxx.conf 设定节点配置文件名;
    cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换;
  • 4)启动6个Redis进程;
  • 5)将6个节点合成一个集群:进入Redis安装目录的src目录下,使用redis-cli --cluster create --cluster-replicas 1 ip:6379 ip:6380 ip:6381 ip:6389 ip:6390 ip:6391进行合体;
  • 6)采用redis-cli -c -p 任意Redis服务端口进行集群策略连接,设置数据会自动切换到相应的写主机
  • 可使用cluster nodes查看集群节点信息;

2.1.1 节点分配策略

  • 此处采用6个节点搭建无中心化主从集群;
  • 每个主机搭配一个从机;
  • Redis要求集群至少有3个主节点
  • --cluster-replicas 1指Redis要求每个主机至少需要一个从机,故6个节点被分为3组,每组由一个主节点和一个从节点构成;
  • 分配原则:1)尽量保证主节点不在同一个IP地址;2)尽量保证主节点和从节点不在同一个IP地址

2.1.2 slots介绍

  • slot是插槽的意思,Redis集群共包括16384个插槽,编号为0~16383;
  • Redis集群将所有的插槽均分到每个主节点中,即每个主节点对应的插槽对应一个编号区间,比如0~5460;
  • 数据库中的键属于某个插槽slot,集群通过CRC16(key) % 16384 来计算键key属于哪个槽;

2.2 集群相关操作

  • 在进行数据操作时,集群会先计算出键key属于哪个槽,然后通过插槽缺点数据所在主节点;
  • 写入数据时需注意,不在一个slot下的键值,是不能使用mget,mset等多键操作,如果还想使用则需要通过{}定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去;
  • 查找数据:
    1)cluster keyslot key计算key所在插槽;
    2)cluster countkeysinslot 插槽编号统计该插槽内key的数量;
    3)cluster getkeysinslot 插槽编号 期望返回的key数量返回期望数量个该槽中的键;

2.3 故障恢复

  • 主节点出现故障,超过15秒会自动发生主从切换,切记如果为服务器设置了访问密码,需要在从机配置文件中配置对应主机masterauth 密码才能自动切换;
  • 发生故障的主节点恢复后,成为从机;
  • 如果某段插槽对应的主从节点都出现故障,存在以下两种情况,该参数在redis.conf文件中进行配置:
    1)cluster-require-full-coverage = yes则整个集群全部挂掉,不能使用;
    2)cluster-require-full-coverage = no则整个集群中只有当前主从节点无法使用,其他部分正常使用;

参考资料:《尚硅谷》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在京东做外包的那些日子....

不知不觉已经在京东做了两年外包,最近收到不少朋友私信,说马上面临就业,在找工作的过程中,有不少软件测试的外包公司给我打电话让去面试,究竟要不要去?这篇文章给大家说说我这2年的外包经验,希望…

【Java基础学习打卡01】计算机概述

目录 引言一、计算机是什么?1.计算机vs计算器2.计算机定义 二、计算机发展简史三、计算机分类四、计算机基本工作原理1.冯诺依曼2.冯诺依曼原理 总结 引言 其实我们在学习Java编程之前应该要对计算机有所了解,这里的了解不是说我们日常接触电脑就算是了…

机器视觉初步2:机器视觉基础知识

本节概况 1.机器视觉的定义2.机器视觉系统的工作流程3.机器视觉的组成视场和最大像面 1.机器视觉的定义 什么是机器视觉,其中美国的一种定义为: “机器视觉是研究如何通过光学装置和非接触式传感器自动地接收、处理真实场景的图像,以获得所需…

前端使用tailwindcss 快速实现主题切换方案

使用Tailwind CSS在黑暗模式下为你的网站设计样式。 现在,黑暗模式是许多操作系统的第一流功能,为你的网站设计一个黑暗版本以配合默认设计,变得越来越普遍。 为了使这一点尽可能简单,Tailwind包括一个暗色变体,让你…

POWERBUILDER基础学习提纲

Chengg0769 2012年 版权信息保留: www.mis2erp.com http://blog.csdn.net/chengg0769 http://www.haojiaocheng.cc 这当时是给列给一位因伤休养的朋友。他有一段难捱的时间,想学习学习。这样复出之后也不至于工作无望或者浪费这段时间。 在SQL2000基础…

什么是API接口测试

什么是 API ? API 是“应用程序编程接口”的缩写,是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样,你只需要告诉服务员你想要的食物,而不需要了解厨房中的具体操作,服务员会把你的订单传递…

【PyQt5】(02)Qt Designer:快速设计GUI界面的利器

系列文章目录 【PyQt5】(01)PyQt的详细介绍 文章目录 系列文章目录前言一、安装Qt Designer二、Qt Designer的基本用法2.1 新建窗体2.2 添加部件2.3 编辑属性2.4 布局管理2.5 设置样式2.6 保存文件 三、将UI文件转化为Python代码并显示3.1 使用uic将UI文…

请问一下java在线编程的网站有哪一些?

前言 下面为大家整合了一些Java在线编程的的网站,个人认为都是挺好用的,整合不易,希望大家能顺手留下点赞和收藏! 废话少说,我们直接进入正题: 1、菜鸟工具 菜鸟工具的这个在线编程工具页面很为简洁&…

linux查看/修改某个进程运行的CPU核

1.ps -eF #查看fwd进程运行在哪个cpu核上 [rootCENTOS57 rpm]# ps -eF | grep fwd 2.top命令 (1)top (2)按f键可以选择下面配置选项 P Last Used Cpu (SMP) (3)Esc 退回到top界面可以看到多了一列进程所在cpu信息 3.pidstat命令 查看进程使用cpu情况,如果绑定了多…

CH32V3xx RT-Thread下的ethernet调试及问题记录

目录 1、CH32V3xx 以太网模块简介2、TCP Client 程序2.1 WCHNET库2.1.1 添加WCHNET2.1.2 以太网配置2.2 TCP Client代码2.3 测试结果3、调试过程中的一些问题1、CH32V3xx 以太网模块简介 CH32V3xx MCU的以太网收发器是微控制器的一个重要高速高速通讯外设,集成了千兆的MAC(媒体…

堆积如山:探索数据结构中的堆

前言 欢迎来到小K的数据结构专栏的第十一小节,本节将为大家带来堆的详解并带来堆题目的讲解(✨当然也为大家准备了完整的源码 )~希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾 目录…

排查一次nacos动态配置不生效

一、问题描述 新需求需要使用到nacos动态配置,但是开发完成之后联调过程中发现动态配置没有生效。 二、问题排查 首先在本地测试,发现启动服务后修改nacos配置确实不生效,在查看启动日志时发现服务启动时打印了下面这样的日志。这里是在配…

Blender3.2使用python脚本命令的三种方式, 以及源码示例

本文环境系统OS(Win10) 方式一,在Script(脚本)功能里面的Console(控制台输入python代码)。 如下图: 对应的三句代码是: print("Hi, blender.")import bpybpy.ops.mesh.primitive_cube_add(enter_editmodeFalse, alignWORLD, location(0,0, …

ModBus通信详解

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的…

python通过远程连接mysql数据库进行操作

文章目录 前言一、开启远程访问权限1、开启远程访问端口2、命令行登录mysql 二、Navicat 建库1、新建连接2、建库建表 三、python对数据库进行远程操作三、总结四、参考资料 前言 环境: 1、mysql 5.7 2、pycharm 22.3.1 Professional 3、navicat 一、开启远程访问权…

数字孪生与物流园区:优化布局规划的关键

随着全球贸易的增长和物流行业的发展,物流园区作为重要的物流枢纽和供应链管理中心,扮演着至关重要的角色。而数字孪生技术的出现为物流园区的运营和管理带来了革命性的变化。数字孪生技术是一种将实体物体与其数字化模型相结合的创新技术,通…

微信小程序| 基于ChatGPT+明基屏幕挂灯实现超智能家居物联网小程序

一、需求背景 在尝试了这么多次的ChatGPT在纯软方向的应用开发后,深感LLM(大语言模型)的能力之强大。俗话说得好:心有多大舞台就有多大!基于AI大模型,可以尝试的方面实在是数不胜数!轻轻松松就可以突破在移动互联网时…

1. Qt小游戏 --- 推箱子

1. 说明 这个小游戏主要使用Qt中的绘制事件函数**paintEvent()**在画布上面不停的绘制图形,并使用定时器做时间上的触发处理,这个小游戏只是做了简单的逻辑处理,具体复杂的功能读者可自行发挥,效果展示如下: Qt制作推箱子小游戏 2. 相关代码 《推箱子》小游戏项目文件中…

最新(photoshop AI)photoshop beta 安装成功过程

目录 安装过程说明如图 效果如图 第一步:手机浏览器 创建 微软邮箱 打开浏览器 注册时候,选择 MG,其他正常填写即可。 第二步:打开 官网,(创建账号)或者直接输入注册的账号直接登录 第三…

ArgoCD(四)--Application管理

1.3 Application管理 先导入一个测试的repo在本地gitlab(gitlab.icloud2native.com),方便测试。 1.3.1 创建application 通过argocd cli创建application 通过argocd 的命令行可以创建application argocd app create guestbook --repo http…