首页 > 数据库 >redis主从备份

redis主从备份

时间:2024-09-09 11:05:57浏览次数:1  
标签:备份 redis 节点 repl master sentinel 主从 backlog

redis主从备份

主从复制介绍

redis主从复制原理:

  1. 从服务器向主服务器发送 SYNC 命令。
  2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
  3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
  4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。

img

主从复制手动执行

一般情况,我们有两种方式执行主从复制:

  1. 通过写入配置文件通过配置文件启动的方式
    img
  2. 通过执行salveof host port的方式进行启动(在交互式redis客户端当中)
    img
    # 我们设置完成主从同步之后,可以通过命令来看库的主从情况
    redis-cli -p 6380 info replication
    # 主库6380输出如下
    root@long:/opt/test_redis# redis-cli -p 6380 info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=127.0.0.1,port=6381,state=online,offset=70,lag=0
    slave1:ip=127.0.0.1,port=6382,state=online,offset=70,lag=1
    master_replid:a9346280d6d445a1cde9f7a2cc5921f747126165
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:70
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:70

    # 某一从库输入如下
    root@long:/opt/test_redis# redis-cli -p 6382 info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:5
    master_sync_in_progress:0
    slave_repl_offset:56
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:a9346280d6d445a1cde9f7a2cc5921f747126165
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:56
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:56

主库故障处理

如果在主从复制当中,我们的主库挂了,可以切换从库为主库

    # 进入需要切换的主库的从库运行
    127.0.0.1:6381> slaveof no one
    OK
    # 可以看到它的配置当中已变成主库
    127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:0
    master_replid:a5d9427d968c91b406054f45de51295689d9644e
    master_replid2:a9346280d6d445a1cde9f7a2cc5921f747126165
    master_repl_offset:662
    second_repl_offset:663
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:662
    # 接下来将另一个从库转换为以它为主
    127.0.0.1:6382> slaveof 127.0.0.1 6381
    OK
    127.0.0.1:6382> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6381
    master_link_status:up
    master_last_io_seconds_ago:2
    master_sync_in_progress:0
    slave_repl_offset:662
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:a5d9427d968c91b406054f45de51295689d9644e
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:662
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:663
    repl_backlog_histlen:0

通过哨兵模式使其自动主从备份

以上主从切换的功能都需要手动完成。而哨兵就是在时刻监测是不是一个redis节点挂了,如果一个主库挂了,哨兵就会选出一个从库来代替主库。从而保证服务正常运行。

综上,哨兵主要功能有:

  • 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识(检查一般是通过定时ping主节点的方式)
  • 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
  • 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
    img

哨兵的启动和检查

    # 设置哨兵的配置文件如:26380.conf
    # 启动于26380端口
    port 26380  
    dir "/opt/test_redis/sentinel"
    logfile "26380.log"
    # 后台启动
    daemonize yes

    # 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
    # 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    # mymaster是主节点的别名
    sentinel monitor mymaster 127.0.0.1 6379 2

    # 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
    sentinel down-after-milliseconds mymaster 30000

    # 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
    # 原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs mymaster 1

    # 故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000

如此配置之后便可通过命令启动哨兵(注意启动哨兵时要确保主从库已启动)

    # 启动哨兵
    redis-sentinel 26380.conf
    # 确认启动成功看哨兵的配置文件,会有很多改变
    root@long:/opt/test_redis/sentinel# cat 26380.conf 

    port 26380
    dir "/opt/test_redis/sentinel"
    logfile "26380.log"

    sentinel myid 5f9c80321fe544208459df14b5aa5069259f37ab

    sentinel monitor mymaster 127.0.0.1 6380 1

    sentinel down-after-milliseconds mymaster 10000

    sentinel config-epoch mymaster 0

    daemonize yes
    # Generated by CONFIG REWRITE
    sentinel leader-epoch mymaster 0
    sentinel known-slave mymaster 127.0.0.1 6381
    sentinel known-slave mymaster 127.0.0.1 6382
    sentinel known-sentinel mymaster 127.0.0.1 26382 f44680655e286f25504ad3a1b0c9cf1e86d8dba9
    sentinel known-sentinel mymaster 127.0.0.1 26381 3bf65b4fc567789e59f7969815cf58cd788742c0
    sentinel current-epoch 0

重点检查
img

附加:

接下来可以手动将主库kill掉检查从库身份是否发生改变。这里不做演示(展示身份变化之后从库6381和26380哨兵的配置情况如下)
img
img

标签:备份,redis,节点,repl,master,sentinel,主从,backlog
From: https://www.cnblogs.com/lmlsh/p/18380115

相关文章

  • redis集群
    redis集群配置为什么要使用集群redis官方生成可以达到10万/每秒,每秒执行10万条命令,假如业务需要每秒100万的命令执行呢。该怎么处理呢一台服务器内存正常是16~256G,假如你的业务需要500G内存,又该如何解决集群的核心思想是将数据分片(sharding)储存于多个redis实例当中。集群......
  • 数据同步和数据备份
       日常使用的移动手机或者是电脑等其它电子产品都是每天在产生不同的数据。数据安全性的 保证需要有很多的计算机程序设计的运行程序进行有效保证。电子产品是硬件设备,硬件设 备就像机器机械一样是可以看得见摸得着的具体物件设施。物质和能量,源头物料可以通过 不同的设......
  • Redis 分布式锁:实现与应用
    在分布式系统中,为了保证数据的一致性和并发控制,常常需要使用分布式锁。Redis作为一种高性能的内存数据库,提供了一些特性可以方便地实现分布式锁。今天,我们就来探讨一下如何用Redis实现分布式锁。一、分布式锁的基本概念分布式锁是一种用于在分布式系统中协调多个进程或线程对......
  • Redis 集群的实现方案全解析
    在当今大数据时代,Redis作为一款高性能的内存数据库,被广泛应用于各种场景。然而,随着数据量的不断增长和业务需求的日益复杂,单节点的Redis往往无法满足需求,这时就需要使用Redis集群来实现数据的分布式存储和高可用性。今天,我们就来一起探讨一下Redis集群的实现方案有哪些。一......
  • Redis 实现延迟队列的巧妙方法
    今天我们来探索一下Redis是如何巧妙地实现延迟队列的,这可是在很多场景下都非常实用的技术哦!一、什么是延迟队列?延迟队列,简单来说,就是可以让消息在指定的延迟时间之后才被消费的队列。想象一下,你在网上订了一份外卖,商家并不会立即配送,而是根据你选择的送达时间,延迟一段时......
  • Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
    经过上一章节的介绍,相信大家对Redis已经有了大致的认知,今天主要给大家详细讲解Redis在Windows、Linux、Docker下的安装过程。01Windows下面给大家介绍三种在Windows环境下安装Redis的方式:官方建议方式、可执行文件方式、脚本方式。1、官方建议方式Redis官方是不支持直接......
  • Redis 入门 - 图形化管理工具如何选择,最全分类
    工欲善其事必先利其器,上一章Redis服务环境已经搭建完成,现在就需要一个趁手的工具,有个好工具可以做到事半功倍。Redis图形化管理工具五花八门,可供选择的很多,大家可以根据自己的需求应用场景进行选择。就是因为选择过多所以才写了这篇文章,和大家分享下到底有哪些工具可供选择,好给......
  • redis基础——SpringDataRedis入门
    redis基础——SpringDataRedis入门最近在学习redis,学到了redis的java客户端,其中最常用的是Jedis和lettuce,而SpringDataRedis是spring整合了Jedis和lettuce的产物,它提供了RedisTemplate工具类,封装各种对redis的操作,将不同数据类型的API封装到了不同类型中,避免了代码臃肿。S......
  • 【redis】redis的特性和主要应用场景
    文章目录redis的特性在内存中存储数据可编程的扩展能力持久化集群高可用快redis的应用场景实时数据存储缓存消息队列redis的特性redis的一些特性(优点)成就了它在内存中存储数据In-memorydatastructuresMySQL主要是通过“表”的方式来存储组织数据的“关系......
  • 如何解决缓存(redis)和数据库(MySQL)数据不一致的问题?
    在使用缓存(如Redis)和数据库(如MySQL)时,数据不一致是常见的问题。通常,我们希望缓存能够提高系统的读性能,但同时也会面临缓存与数据库数据同步的问题。解决缓存与数据库数据不一致的问题有多种方法,常见的策略包括以下几种:1.缓存更新策略常用的缓存更新策略包括缓存穿透、缓存......