• redis高可用


    在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和 Cluster集群。

    持久化

    Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。

    持久化的分类

    rdb

    原理:周期性的把内存中的数据保存在磁盘中。

    rdb的分类

    1、手动触发:

    2、自动触发:save m n(假设 900 10 则表示900秒内或者10次语句执行,则触发RDB持久化)

    3、特殊触发:当手动关闭时redis时,会进行RDB方式持久化,关闭时shutdown

    注: kill 删除进程不会触发RDB。

    工作流程

    rdb的优缺点

    缺点:

    1、数据完整性不如AOE。

    2、RDB类似于快照(完备)。

    3、在进行备份时会阻塞进程。

    优点:

    1、持久化的速度比较快(因为保存的是数据结果),在写入到*.rcb持久化文件,会进行压缩,来减小自身的体积。

    2、在集群中,redis主从复制 从-》主服务器进行同步,默认先用RDB文件进行恢复操作,所以同步性能较高。

    aof

    原理:从redis的操作日志记录中将执行的过程同步到磁盘中。

    aof 的分类

    1、手动触发

    2、自动触发:

    1、 always 每条语句,同步执行持久化有强一致性的要求的场景。

    2)、No 不进行持久化。

    3、every second 每秒进行一次AOE持久化 (建议使用,均衡性场景)。

    AOF触发规则

    1、always一直触发aof 的持久化

    2、everysecond 每秒触发一次持久化

    3、no 不进行持久化

    出现 在 1s 内执行20条语句

    1、always: 每执行一条语句就出发一次aof持久化

    2、everysecond:每秒出发执行一次aof持久化操作

    3、no: 从不进行持久化

    工作流程

    aof 优缺点

    缺点

    1、执行语句一致的情况下,aof备份的内容更大。因为RDB备份的是结果,而AOE备份的是语句。

    2、AOF消耗性能更大,占用磁盘越来越大。(类似于mysql增量备份)

    优点

    1、支持秒级持久化、兼容性好。

    主从复制

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

    主从复制的作用

    1、数据冗余:实现了数据的热备份,是持久化之外的一种数据冗余方式。

    2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。

    3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载,可以提高Redis服务器的并发量。

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

    主从复制的工作流程

    (1)若启动一个Slave节点,则它会向Master节点发送sync命令,请求同步连接。

    (2)收到连接后,Master节点都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

    (3)后台进程完成缓存操作之后,Master节点就会向Slave节点发送数据文件,Slave节点将数据文件保存到硬盘上,然后将其加载到内存中,接着Master节点就会将修改数据的所有操作一并发送给Slave端节点。

    (4)复制完成之后,从节点会持续接收主节点发送的新的操作命令

    总的来说 通过主从复制,redis 能够实现数据的备份 (master产生的数据能slave备份),负责均衡 (读操作可以分摊到slave上去) 和高可用 (maste宕机后,可以由slave进行故障切换)。

    命令

    1、修改 Redis 配置文件

    主节点

    1. vim /etc/redis/6379.conf
    2. bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
    3. daemonize yes #137行,开启守护进程
    4. logfile /var/log/redis_6379.log #172行,指定日志文件目录
    5. dir /var/lib/redis/6379 #264行,指定工作目录
    6. appendonly yes #700行,开启AOF持久化功能
    7. /etc/init.d/redis_6379 restart

    从节点

    1. vim /etc/redis/6379.conf
    2. bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
    3. daemonize yes #137行,开启守护进程
    4. logfile /var/log/redis_6379.log #172行,指定日志文件目录
    5. dir /var/lib/redis/6379 #264行,指定工作目录
    6. replicaof 192.168.11.22 6379 #288行,指定要同步的Master节点IP和端口
    7. appendonly yes #700行,开启AOF持久化功能
    8. /etc/init.d/redis_6379 restart

    2、 验证主从效果

    1. 在Master节点上验证从节点
    2. redis-cli info replication

    哨兵

    哨兵是一个用于管理多个reids服务的系统,它提供监控、通知、自动故障转移、配置提供服务的功能,以实现redis高可用性。

    哨兵的核心功能

    在主从复制的基础上,哨兵引入了主节点的自动故障转移。

    工作原理

     

    哨兵模式的作用

    监控:哨兵会不断地检查主节点和从节点是否运作正常。

    通知(提醒):某个redis实例有问题,哨兵可以通过API向管理员或者其他应用发信通知。

    自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

    配置提供服务:客户端可以使用哨兵来查询被认证的master节点及所有slave节点。

    命令

    1、修改 Redis 哨兵模式的配置文件

    1. vim /opt/redis-5.0.7/sentinel.conf
    2. protected-mode no #17行,关闭保护模式
    3. port 26379 #21行,Redis哨兵默认的监听端口
    4. daemonize yes #26行,指定sentinel为后台启动
    5. logfile "/var/log/sentinel.log" #36行,指定日志存放路径
    6. dir "/var/lib/redis/6379" #65行,指定数据库存放路径
    7. sentinel monitor mymaster 192.168.11.22 6379 2 #84行,修改 指定该哨兵节点监控192.168.10.22:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
    8. sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
    9. sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000180秒)

    2、启动哨兵模式,先启master,再启slave

    1. cd /opt/redis-5.0.7/
    2. redis-sentinel sentinel.conf &

     3、查看哨兵信息

    redis-cli -p 26379 info Sentinel

    Cluster集群

    redis cluster 是一个分布式数据库解决方案,提供一组redis服务之间的网络接口。

    redis 集群 是一个提供高性能、高可用、数据分片、故障转移特性的分布式数据解决方案。

    cluster集群的主要功能

    数据分片:redis cluster 实现了数据自动分片,每个节点都会保存一份数据。Redis集群有16384个哈希槽(编号0-16383)

    故障转移: 若个某个节点发生故障,cluster会自动将其上的分片迁移个其他节点。

    高性能:由于数据分片和网络,redis cluster提供高性能的数据操作。

    高可用:如果单个节点挂掉了,那么redis cluster 内部会自动进行故障恢复。

    命令

    1、搭建Redis 群集模式

    1. cd /etc/redis/
    2. mkdir -p redis-cluster/redis600{1..6}
    3. for i in {1..6}
    4. do
    5. cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
    6. cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
    7. done

    2、开启群集功能

    1. #其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
    2. cd /etc/redis/redis-cluster/redis6001
    3. vim redis.conf
    4. #bind 127.0.0.1 #69行,注释掉bind 项,默认监听所有网卡
    5. protected-mode no #88行,修改,关闭保护模式
    6. port 6001 #92行,修改,redis监听端口,
    7. daemonize yes #136行,开启守护进程,以独立进程启动
    8. cluster-enabled yes #832行,取消注释,开启群集功能
    9. cluster-config-file nodes-6001.conf #840行,取消注释,群集名称文件设置
    10. cluster-node-timeout 15000 #846行,取消注释群集超时时间设置
    11. appendonly yes #700行,修改,开启AOF持久化

    3、启动redis节点

    1. redis-server redis.conf
    2. for d in {1..6}
    3. do
    4. cd /etc/redis/redis-cluster/redis600$d
    5. redis-server redis.conf
    6. done
    7. ps -ef | grep redis

    4、启动集群 

    redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
    

     5、测试群集

    1. redis-cli -p 6001 -c
    2. cluster slots #查看节点的哈希槽编号范围

  • 相关阅读:
    【附源码】Python计算机毕业设计社区老人健康服务跟踪系统
    Linux下awk命令的使用
    CTFshow,命令执行:web31
    C语言典范编程
    供应链全流程计划与排产解决方案核心功能概要
    cmake中编译动态库且依赖fortran动态库问题记录
    2021年下半年软件设计师下午真题答案及解析(一)
    前端开发面试题—CSS清除浮动的方法
    vue导出excel使用xlsx、file-saver、xlsx-style、yxg-xlsx-style 遇到的坑
    SpringMVC 04 RestFul风格
  • 原文地址:https://blog.csdn.net/ffdtj/article/details/132799495