C05S18-Redis高可用

一、Redis持久化

1. 持久化概述

Redis是基于内存的数据库,数据都是存储在内存当中。持久化就是将数据保存到硬盘当中,防止进程退出导致数据丢失,主要作用就是用于数据的备份。

Redis持久化分为RDB持久化和AOF持久化。RDB持久化是指人工或者定时将内存的数据存入磁盘,属于冷备份,是Redis默认的持久化方式;AOF持久化类似于MySQL基于二进制恢复数据,REDIS相关操作会记录在二进制文件当中,恢复的时候根据文件内容进行恢复,属于热备份。

AOF持久化操作的实时性更好,进程如果意外退出,丢失的数据少,可恢复的数据是最多,属于主流持久化方式。

2. RDB持久化

RDB持久化是在一定的时间内将数据通过快照的方式保存到硬盘当中,所以也被称为是快照持久化。生成的快照文件(RDB文件)后缀名是.rdb或.redis,每次重启的时候会读取快照文件进行数据的恢复。

RDB持久化有两种方式,save和bgsave。通过save方式持久化,会阻塞Redis进程,直到文件创建完毕。阻塞期间,Redis不能够处理任何操作请求。而bgsave方式持久化,是通过子进程实现快照文件,只有在fork子进程的时候会阻塞Redis进程。子进程创建快照文件的同时,主进程可以支持处理操作请求。

因此,在真实的操作环境当中,使用bgsave方式,而不是save方式。

3. AOF持久化

一旦开启AOF持久化,Redis就会将AOF为默认的持久化方式,并立刻读取二进制文件。因此要开启AOF就要在初始化时开启。当AOF文件被截断时,如

必须给Redis的内存设置阈值,不设置阈值,只要Redis有需求,就会占用整个内存,并占用交换空间,导致系统崩溃。设置阈值后,Redis使用的空间到达阈值,系统会自动回收生命周期不足的key。

  • volatile-lru
  • volatile-ttl
  • allkeys-lru
  • allkeys-random

Redis雪崩

  • 集群大面积故障
  • 缓存键值对全部被删除
  • 大量Redis请求失败

Redis击穿

  • 热点数据缓存失效,大量热点请求全部转发到数据库

Redis穿透

  • 缓存键值对和数据库中都没有数据,但是有客户端不断请求

4. 持久化的配置与实现

4.1 RDB持久化

  1. 编辑Redis的配置文件/etc/redis/redis.conf ,设置RDB持久化的自动触发。

    # 触发条件
    svae 900 1
    save 300 10
    save 60 10000
    
    # 开启RDB压缩
    rdbcompression yes
    # 设置RDB文件名
    dbfilename dump.rdb
    # 设置持久化文件的存放路径
    dir /var/lib/redis
    
    • svae 900 1:Redis数据在每900秒内至少发生1次变化,就会执行bgsave。
  2. 保存文件后,要重启Redis服务。

    systemctl restart redis
    

4.2 AOF持久化

  1. 编辑Redis的配置文件/etc/redis/redis.conf ,设置AOF持久化。

    # 开启AOF持久化
    appendonly yes
    # 设置AOF文件名
    appendfilename "appendonly.aof"
    # 恢复数据时,如果AOF文件被截断,会尽可能多的恢复数据
    aof-load-truncated yes
    # 设置AOF文件重写的触发条件,值为百分比
    # 100表示AOF文件增长到上一次重写后的两倍大小才会触发重写操作
    auto-aof-rewrite-percentage 100
    # 设置触发重写的AOF文件基准大小
    auto-aof-rewrite-min-size 64mb 
    
  2. 重启Redis服务。

    systemctl restart redis
    

二、Redis主从复制

1. 主从复制概述

主从复制是Redis实现哨兵模式和集群的基础,工作原理和MySQL主从复制相同,主节点负责写入,再将数据同步到从节点当中。主节点可写,而从节点只有读数据的权限。

2. 主从复制流程

  1. 从节点启动,会向主节点发送一个sync command命令,请求建立同步连接。
  2. 主节点会开启一个后台进程,将数据保存到数据文件中。
  3. 主节点收到请求后,会将数据文件发送给从节点。

3. 主从复制配置

集群架构

Master:192.168.1.128

Slave1:192.168.1.129

Slave2:192.168.1.130

3.1 Master节点

  1. 修改Master节点Redis配置文件/etc/redis/redis.conf。

    # 注释掉监听地址
    # bind 0.0.0.0
    # 开启守护进程,允许后台启动
    daemonize yes
    # 开启AOF持久化
    appendonly yes
    
  2. 重启Redis服务。

    systemctl restart redis
    

3.2 Slave节点

  1. 修改两个节点的Redis配置文件/etc/redis/redis.conf。

    # 注释掉监听地址
    # bind 127.0.0.1 ::1
    # 开启守护进程,允许后台启动
    daemonize yes
    # 设置同步的Master节点IP和端口
    replicaof 192.168.1.128 6379
    # 开启AOF持久化
    appendonly yes
    
  2. 重启Redis服务。

    systemctl restart redis
    

3.3 测试主从

  1. 在Master节点上查看Redis服务的运行日志,是否出现从节点同步主节点的日志信息。

    tail -f /var/log/redis/redis-server.log
    

三、Redis哨兵模式

1. 哨兵模式概述

哨兵模式在主从模式基础之上,引入了故障切换功能。对主从复制架构中的每个节点进行监控,当主节点出现故障,会通过投票机制选择新的主节点。从节点会同步新主节点的数据。

2. 哨兵模式流程

  1. 主从节点之间,都有一个心跳检测。
  2. 主节点宕机,从节点会收到主节点宕机消息。
  3. 从节点之间会进行投票,选举出新的主节点。
  4. 从节点会自动加入新的主节点的主从复制架构。

3. 哨兵模式的配置与实现

集群架构

Master:192.168.1.128

Slave1:192.168.1.129

Slave2:192.168.1.130

  1. 部署完主从复制,再在三个节点上安装Redis Sentinel服务。

    apt -y install redis-sentinel
    
  2. 编辑Redis Sentinel的配置文件/etc/redis/sentinel.conf。

    # 注释掉监听地址
    # bind 127.0.0.1 ::1
    # 取消注释,关闭保护模式
    protected-mode no
    # 修改为yes,设置后台运行
    daemonize yes
    # 设置主节点的节点名称、IP地址和端口号,以及要进行故障转移的从节点最小同意数
    sentinel monitor mymaster 192.168.206.40 6379 2
    # 设置检查主节点是否宕机的时间周期,单位是毫秒
    sentinel down-after-milliseconds mymaster 30000
    # 设置节点的最大超时时间,单位是毫秒
    sentinel failover-timeout mymaster 18000
    
  3. 重启Redis Sentinel服务。

    systemctl restart redis-sentinel.service
    

4. 测试哨兵模式

  1. 在主节点上实时查看Redis Sentinel服务的日志文件。

    tail -f /var/log/redis/redis-sentinel.log
    
  2. 在另外一个终端上关闭主节点的Redis服务,查看日志文件是否显示主节点切换的日志信息。

    systemctl stop redis
    

四、Redis集群

1. 集群概述

Redis的集群模式引入了哈希槽,集群有16384个哈希槽(0-16383)。每个节点会被平均分配哈希槽,因此在集群模式下,节点数量通常是3的倍数。

2. 集群配置和实现

集群节点:192.168.1.128、192.168.129、192.168.1.130

  1. 修改各个节点的Redis配置文件/etc/redis/redis.conf。

    # 注释掉监听地址
    # bind 127.0.0.1 ::1
    # 取消注释,关闭保护模式
    protected-mode no
    # 修改为yes,设置后台运行
    daemonize yes
    # 开启AOF持久化
    appendonly yes
    # 开启集群模式
    cluster-enabled yes
    # 设置集群的配置文件
    cluster-config-file nodes-6379.conf
    # 设置集群的超时时间,单位是毫秒
    cluster-node-timeout 15000
    
  2. 保存配置文件,重启Redis服务。

    systemctl restart redis
    
  3. 在任意一个节点上启动集群。

    redis-cli --cluster create 192.168.1.128:6379 192.168.1.129:6379 192.168.1.130:6379
    
    • 还可以使用–cluster-replicas设置主节点的从节点数量,同时设置的集群节点也得增加。比如一主一从的模式下,需要有6个节点,–cluster-replicas设置为1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值