• Redis的三种模式——主从复制、哨兵、集群


    目录

    一、Redis模式

    二、主从复制

    2.1 主从复制概述

    2.2 主从复制

    2.3 Redis主从复制流程

    2.4 搭建Redis主从复制

    2.4.1 安装Redis

    2.4.2 修改Master节点配置文件(192.168.152.11)

    2.4.3 修改slave节点配置文件(192.168.152.16、192.168.152.17)

    2.4.4 验证主从同步 


    一、Redis模式

    Redis有三种模式:分别是主从同步/复制、哨兵模式、Cluster

    • 主从复制:主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单故障恢复。
      缺陷:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。
    • 哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。
      缺陷:写操作无法负载均衡,存储能力受到单机的限制,哨兵无法对从节点进行自动故障转移;在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
    • 集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

    二、主从复制

    2.1 主从复制概述

    • 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
    • 默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点 (或没有从节点),但一个从节点只能有一个主节点。

    2.2 主从复制

    • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
    • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
    • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

    2.3 Redis主从复制流程

    • 若启动一个Slave机器进程,则它会向Master机器发送一个“sync command" 命令,请求同步连接。
    • 无论是第一次连接还是重新连接,Master机器 都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作) ,同时 Master 还会记录修改数据的所有命令并缓存在数据文件中。
    • 后台进程完成缓存操作之后,Master 机器就会向 Slave 机器发送数据文件,Slave 端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着 Master 机器就会将修改数据的所有操作一并发送给 Slave 端机器。若 Slave 出现故障导致宕机,则恢复正常后会自动重新连接。
    • Master机器收到 Slave 端机器的连接后,将其完整的数据文件发送给 Slave 端机器,如果 Mater 同时收到多个 Slave 发来的同步请求,则 Master 会在后台启动一个进程以保存数据文件,然后将其发送给所有的 Slave 端机器,确保所有的 Slave 端机器都正常。

    2.4 搭建Redis主从复制

    主机系统IP地址安装包
    Master节点CentOS 7192.168.152.11redis-5.0.7.tar. gz
    Slave1节点CentOS 7192.168.152.16redis-5.0.7.tar. gz
    Slave2节点CentOS 7192.168.152.17

    redis-5.0.7.tar. gz

    #三台主机都关闭防火墙和SELINUX
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0

    2.4.1 安装Redis

    在三台服务器上均需部署Redis

    1)# 关闭防火墙和SElinux 
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
     
    2)#安装gcc gcc-c++ 编译器
    yum install -y gcc gcc-c++ make
     
    3)#切换至/opt目录,把下载好的安装包上传进来并解压
    cd /opt/
    tar zxvf redis-5.0.7.tar.gz 
     
    4)#进入目录然后编译安装
    cd /opt/redis-5.0.7/
    make
    make PREFIX=/usr/local/redis install
     
    #由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装
     
    5)#执行install_server.sh脚本
    cd /opt/redis-5.0.7/utils 
    ./install_server.sh  #一路回车,指导让你输入路径这一步
    #路径需要手动输入
    Please select the redis executable path [] /usr/local/redis/bin/ redis-server
     
    Selected config:
    Port               : 6379                               #默认侦听端口为6379
    Config file        : /etc/redis/6379.conf               #配置文件路径
    Log file           : /var/log/redis_6379.log            #日志文件路径
    Data dir           : /var/lib/ redis/6379               #数据文件路径
    Executable         : /usr/local/redis/bin/redis-server  #可执行文件路径
    Cli Executable     : /usr/local/redis/bin/redis-cli     #客户端命令工具
     
    6)#优化路径并查端口是否打开
    #把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
    ln -s /usr/local/redis/bin/* /usr/local/bin/
     
    #当install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认侦听端口为6379
    netstat -natp | grep redis
     
    7)#修改配置文件
    vim /etc/redis/6379.conf
    bind 127.0.0.1 192.168.152.11/16/17                #70行,添加监听的主机地址
    port 6379                                  #93行,Redis默认的监听端口
    daemonize yes                               #137行,启用守护进程
    pidfile /var/run/redis_6379.pid            #159行,指定PID文件
    loglevel notice                             #167行,日志级别
    logfile /var/log/redis_6379.log            #172行,指定日志文
     
    8) #重启redis查看监听的地址
    /etc/init.d/redis_6379 restart    #重启
    ss -antp|grep redis
     
    9)##Redis服务控制
    /etc/init.d/redis_6379 stop       #停止
    /etc/init.d/redis_6379 start      #启动
    /etc/init.d/redis_6379 restart    #重启
    /etc/init.d/redis_6379 status     #状态

    2.4.2 修改Master节点配置文件(192.168.152.11)

    (1)#修改master主配置文件
    vim /etc/redis/6379.conf
    bind 0.0.0.0                        #70行,注释掉bind项,或修改为0.0.0.0,默认监听所有网卡
    daemonize yes                        #137行,开启守护进程
    logfile /var/log/redis_6379.log    #172行,指定日志文件目录
    dir /var/lib/redis/6379            #264行,指定工作目录
    appendonly yes                      #700行,开启AOF持久化功能

    (2)#重启redis
    /etc/init.d/redis_6379 restart






    2.4.3 修改slave节点配置文件(192.168.152.16、192.168.152.17)

     (1)#修改slave1节点、slave2节点配置文件,slave1和slave2修改步骤相同
    vim /etc/redis/6379.conf
    bind 0.0.0.0                         #70行,修改监听地址为0.0.0.0
    daemonize yes                        #137行,开启守护进程
    logfile /var/log/redis_6379.log      #172行,指定日志文件目录
    dir /var/lib/redis/6379              #264行,指定工作目录
    replicaof 192.168.152.11 6379         #287行,取消注释并指定要同步的Master节点IP和端口
    appendonly yes                        #700行,开启AOF持久化功能

    (2)#重启slave1节点和slave2节点redis服务
    /etc/init.d/redis_6379 restart







    2.4.4 验证主从同步 

    #在Master节点上看日志:
    tail -f /var/log/redis_6379.log

    #在Master节点上验证从节点:
    redis-cli
    127.0.0.1:6379> info replication

    #创建数据验证
    ##在master创建数据
    set name yr

    ##在从节点上查看
    get name

     在Master节点上看日志
    在Master节点上验证从节点

    在master创建数据

    |在两台slave上查看

     

     未完,待更……

     

  • 相关阅读:
    LeetCode之二:字母异位词分组
    golang学习笔记——Map
    NumPy 基础知识
    IDL学习:语法基础-过程和函数
    CVE-2021-1732_Windows本地提权漏洞
    Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
    2020华数杯全国大学生数学建模竞赛C题-脱贫帮扶绩效评价体系的构建与探究(二)(附MATLAB和Python代码)
    开发知识点-Git
    Spark GraphX 图算法的理解
    tiup dm disable
  • 原文地址:https://blog.csdn.net/qq_44363920/article/details/125564514