Redis 搭建 keepalived 双活b

keepalived 介绍

  1. keepalived 是集群管理中常用的高可用服务软件,用来解决单点故障
  1. 什么是单点故障?
    1. 当服务是单节点或者不具备主从切换能力的集群,主节点宕时,整个服务不可用,称为单点故障
  1. 常见的单点故障解决方案
    1. 基于 DNS,一主机名多 IP,DNS 服务自带负载均衡,并且一般任务 DNS 服务是高可用的
      使用 keepalived,配置虚拟 IP,监控节点状态,在必要时将虚拟 IP 漂移到备用节点
  1. keepalived 基本原理
    1. VRRP,虚拟链路冗余协议,在网络设计中用来做线路冗余、设备冗余等,防止网络存在单点故障
      keepalived 基于 VRRP 协议,将服务器当作路由设备,通过虚拟 IP 的漂移来达到高可用的目的

Redis 主从复制

  1. 什么是 Redis 主从复制?
    1. 主从复制是一种由主节点向从节点同步数据的功能,Redis 的主从复制是单向的,只能由主到从
      主从复制的作用是提供数据的冗余备份,这正是高可用的基础
      使用 replicaof(5.0 之前 slaveof) 命令形成主从关系即可开启主从复制
  1. 主从复制原理
    1. 全量复制
      主从刚建立连接时,主库将所有数据生成 RDB 文件,发给从库进行同步,然后再把生成 RDB 过程中产生的修改发给从库
      增量复制
      Redis 2.8 开始支持增量复制,主要是为了解决网络闪断造成全量复制,开销很大的问题
      增量复制的原理是断开的一段时间内,主库保持一个记录主从差异数据的缓冲区
  1. 为什么使用 RDB 进行数据同步的传输?
    1. RDB 是定时或需要全量复制时生成的快照,是经过压缩的二进制文件,体积小,恢复快
      相比之下 AOF 记录了每次执行的命令,有许多冗余命令,体积大,浪费带宽,并且需要选择刷盘策略,选择不当可能会影响性能

Redis 高可用方案

  1. Redis 哨兵模式
    1. Redis 主从复制保证了数据冗余备份,但当集群的主节点宕掉,整个集群将无法提供服务
      Redis 哨兵机制提供了集群监控的能力,在主节点宕掉时通过选举产生新主,并完成集群主从角色的切换
  1. Redis keepalived 双活
    1. Redis 哨兵节点至少需要三台以上节点,因为哨兵节点也需要做高可用
      当只有两台机器用于部署 Redis 集群时,可以利用 keepalived 进行节点的监控和主从的切换,在资源有限的项目中不失为一个良好的高可用方案

环境准备与安装

使用 docker centos 镜像,启动两个容器,安装 Redis 和 keepalived 等软件,模拟两个 Redis 节点的集群
  1. 节点 IP 和端口规划
    1. 启动两个节点
      1. 拉取 centos 镜像
        启动两个 centos 容器
        查看容器 IP
        notion image
        进入容器
    1. 安装常用软件
      1. 更新软件库
        安装 net-tools,提供 ifconfig 命令
        安装 initscripts,提供 service 命令
        docker 的 centos 镜像内部可能缺少一些常用命令,必要时自行安装
    1. 安装 Redis 并启动
      1. 安装 EPEL 软件库
        安装 Redis
        修改 Redis 配置文件
        主节点 centos_1
        从节点 centos_2
        启动两个节点上的 Redis
        主节点添加一条测试数据
        notion image
        从节点查看数据是否同步
        notion image
    1. 安装 keepalived

      配置 keepalived

      1. keepalived 配置的基本结构
        1. keeplaived Redis 主从切换配置
          1. 172.18.0.4 主节点初始状态设置为 MASTER,priority 为 100
            172.18.0.5 从节点初始状态设置为 BACKUP,priority 为 90
            当 .4 主节点 Redis 服务不可用时,优先级降低,VIP 漂移到 .5 上,但是当 .4 服务重新上线后,会抢走 MASTER 身份,造成不必要的主从切换,可以将 .4 配置为 nopreempt(非抢占模式)来避免
            如果 .4 配置为非抢占,将不会为 priority 所动,只有 .5 上 keepalived 服务宕掉,VIP 才会漂移到 .4
            keepalived 的配置文件要求很严格,避免多余的空格,缩进须使用 Tab
             
            eth0是网卡,有些是eth33,可以通过ifconfig命令进行查看;
            priority 是用来标记主从服务器的,priority 101表示主服务器,priority 100表示从服务器;
            virtual_ipaddress表示虚拟ip的地址
             
        1. 相关脚本
          1. redis_check.sh
            redis_master.sh
            redis_slave.sh
            redis_falut.sh
            redis_stop.sh

        验证双活

        1. 测试 Redis 主从复制
          1. notion image
        1. 启动 keepalived
          1. 也可以直接运行 keepalive 可执行文件
            notion image
        1. 测试故障转移
          1. 通过 Redis cli 连接虚拟 IP,可以正常执行命令
            notion image
            kill 掉主节点的 Redis 进程
            notion image
            观察主节点 keepalived 日志
            notion image
            直连原来的从节点测试写入
            notion image
            172.18.0.5 上可以执行写入命令,说明该节点已经成功切换为主节点
        Loading...
        文章列表
        王小扬博客
        云原生
        Git
        Elasticsearch
        Apollo
        产品
        Think
        生活技巧
        软件开发
        计算机网络
        CI
        DB
        设计
        缓存
        Docker
        Node
        操作系统
        Java
        大前端
        Nestjs
        其他
        PHP
        AI