当前位置: 首页 > news >正文

Redis —— 架构概览

文章目录

    • Redis 架构概览
      • 一、单机架构
      • 二、主从复制架构
      • 三、哨兵(Sentinel)架构
      • 四、Redis Cluster(集群)架构

Redis 架构概览

Redis 有多种架构模式,每种架构适用于不同的业务场景。以下详细介绍常见的 Redis 架构及其搭建过程:

一、单机架构

架构说明:单一 Redis 实例,最简单的部署方式,适用于开发环境或低并发场景。

搭建步骤

  1. 下载并解压 Redis

    wget http://download.redis.io/releases/redis-6.2.6.tar.gz
    tar xzf redis-6.2.6.tar.gz
    cd redis-6.2.6
    
  2. 编译安装

    make
    make install PREFIX=/usr/local/redis
    
  3. 配置 Redis

    cp redis.conf /usr/local/redis/bin/
    cd /usr/local/redis/bin/
    # 修改配置文件
    vi redis.conf
    # 主要配置:
    # daemonize yes(后台运行)
    # bind 0.0.0.0(允许远程访问)
    # requirepass your_password(设置密码)
    
  4. 启动服务

    ./redis-server redis.conf
    
  5. 验证

    ./redis-cli -a your_password
    127.0.0.1:6379> ping
    PONG
    

二、主从复制架构

架构核心:通过 “1 主多从” 实现数据冗余和读负载均衡,主节点负责读写,从节点仅读并同步主节点数据。当主节点故障时,需手动将从节点晋升为主节点(需配合人工操作实现高可用)。

环境准备

  • 服务器:1 台服务器(或 3 台独立服务器,此处以单服务器多端口模拟,端口:6379(主)、6380(从)、6381(从))
  • Redis 版本:推荐 6.x 及以上(本文以 6.2.6 为例)
  • 依赖:gcc 环境(编译 Redis 需用)

搭建步骤

步骤 1:安装 Redis(所有节点通用)

  1. 下载并解压 Redis 源码

    wget http://download.redis.io/releases/redis-6.2.6.tar.gz  # 下载源码包
    tar -zxvf redis-6.2.6.tar.gz  # 解压
    cd redis-6.2.6  # 进入源码目录
    
  2. 编译安装(需 gcc 环境,若未安装先执行 yum install gcc -yapt install gcc -y

    make  # 编译(根据系统自动编译,生成可执行文件)
    make install PREFIX=/usr/local/redis  # 安装到指定目录(/usr/local/redis)
    
  3. 验证安装:进入 /usr/local/redis/bin,查看是否有 redis-server(服务端)、redis-cli(客户端)等文件,若存在则安装成功。

  4. 为避免配置冲突,为每个节点创建独立目录:

    mkdir -p /usr/local/redis-cluster/{master,slave1,slave2}  # 主节点、从节点1、从节点2目录
    

步骤 2:配置主节点(6379 端口)

  1. 复制默认配置文件到主节点目录:

    cp /root/redis-6.2.6/redis.conf /usr/local/redis-cluster/master/  # 假设源码在/root目录
    
  2. 编辑主节点配置文件 vi /usr/local/redis-cluster/master/redis.conf,修改以下配置(关键配置及解释):

    # 端口号(默认6379,主节点用6379)
    port 6379# 是否后台运行(生产环境建议开启,避免终端关闭后服务停止)
    daemonize yes# 日志文件路径(记录服务运行日志,便于排查问题)
    logfile "/usr/local/redis-cluster/master/redis-6379.log"# 数据存储目录(RDB/AOF文件及集群配置文件存放路径,需提前创建)
    dir "/usr/local/redis-cluster/master/data"
    # 提前创建data目录:mkdir -p /usr/local/redis-cluster/master/data# 绑定IP(默认绑定127.0.0.1,仅本地可访问;生产环境需改为0.0.0.0允许远程访问)
    bind 0.0.0.0# 保护模式(默认yes,仅允许绑定的IP访问;若bind为0.0.0.0,需关闭保护模式或设置密码)
    protected-mode no# 访问密码(生产环境必须设置,避免未授权访问)
    requirepass "redis@123"  # 主节点密码# 开启AOF持久化(默认no,建议开启,与RDB配合提高数据安全性)
    appendonly yes# AOF文件名(默认appendonly.aof)
    appendfilename "appendonly-6379.aof"# RDB文件名(默认dump.rdb)
    dbfilename "dump-6379.rdb"
    

    配置说明:

    • port:区分不同节点,避免端口冲突;
    • daemonize:后台运行是生产环境的基本要求;
    • logfiledir:明确日志和数据路径,便于管理和排查问题;
    • bind 0.0.0.0protected-mode no:允许其他节点(从节点、哨兵)远程连接;
    • requirepass:密码是安全的基础,所有连接该节点的客户端(包括从节点)必须验证密码;
    • 持久化配置(AOF+RDB):防止节点宕机后数据丢失,AOF 实时性更高,RDB 适合备份。

步骤 3:配置从节点(6380、6381 端口)

  1. 复制配置文件(从节点1):

    cp /usr/local/redis-cluster/master/redis.conf /usr/local/redis-cluster/slave1/
    
  2. 编辑配置文件 vi /usr/local/redis-cluster/slave1/redis.conf,修改:

    port 6380  # 端口与主节点不同
    logfile "/usr/local/redis-cluster/slave1/redis-6380.log"  # 日志路径
    dir "/usr/local/redis-cluster/slave1/data"  # 数据路径(需创建:mkdir -p .../data)
    requirepass "redis@123"  # 从节点自身密码(客户端连接从节点需验证)# 关键:指定主节点地址和端口(Redis 5.0+ 推荐用replicaof,替代旧版slaveof)
    replicaof 127.0.0.1 6379  # 指向主节点(IP为服务器实际IP,此处本地模拟用127.0.0.1)# 主节点的密码(从节点同步数据时需验证主节点密码)
    masterauth "redis@123"  # 与主节点requirepass一致
    

    配置说明:

    • replicaof:定义从节点的 “主节点”,从节点启动后会自动连接主节点并同步数据;
    • masterauth:从节点向主节点发送同步请求时,需携带主节点密码,否则主节点会拒绝连接。
  3. 从节点 2 配置与从节点 1 类似,仅端口和路径不同:

    port 6381
    logfile "/usr/local/redis-cluster/slave2/redis-6381.log"
    dir "/usr/local/redis-cluster/slave2/data"
    requirepass "redis@123"
    replicaof 127.0.0.1 6379
    masterauth "redis@123"
    

步骤4:启动主从节点

  1. 启动所有节点

    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/master/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/slave1/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/slave2/redis.conf
    
  2. 验证启动:ps -ef | grep redis-server,应显示 3 个进程(6379、6380、6381)。

步骤 5:验证主从复制状态

  1. 连接主节点,查看复制信息:

    /usr/local/redis/bin/redis-cli -p 6379 -a redis@123  # -p指定端口,-a指定密码
    127.0.0.1:6379> info replication  # 查看复制状态
    

    输出中应包含从节点信息(示例):

    # Replication
    role:master  # 角色为主节点
    connected_slaves:2  # 有2个从节点
    slave0:ip=127.0.0.1,port=6380,state=online,offset=144,lag=1  # 从节点1
    slave1:ip=127.0.0.1,port=6381,state=online,offset=144,lag=1  # 从节点2
    
  2. 测试数据同步:在主节点写入数据,从节点验证是否同步:

    # 主节点写入
    127.0.0.1:6379> set test_key "主从复制测试"
    OK# 连接从节点6380,读取数据
    /usr/local/redis/bin/redis-cli -p 6380 -a redis@123
    127.0.0.1:6380> get test_key
    "主从复制测试"  # 成功同步
    

三、哨兵(Sentinel)架构

架构核心:在主从架构基础上增加哨兵节点(Sentinel),哨兵实时监控主从节点健康状态,当主节点故障时,自动将从节点晋升为新主节点,实现 “无人值守” 的高可用。

环境准备

  • 已搭建主从架构(1 主 2 从:6379、6380、6381);
  • 3 个哨兵节点(推荐奇数个,避免脑裂,端口:26379、26380、26381)。

搭建步骤

步骤 1:创建哨兵节点目录

  1. 创建哨兵节点目录

    mkdir -p /usr/local/redis-cluster/sentinel/{s1,s2,s3}  # 3个哨兵目录
    

步骤 2:配置哨兵节点(以 s1 为例,26379 端口)

  1. 复制哨兵默认配置文件(源码包中自带):

    cp /root/redis-6.2.6/sentinel.conf /usr/local/redis-cluster/sentinel/s1/
    
  2. 编辑哨兵配置 vi /usr/local/redis-cluster/sentinel/s1/sentinel.conf,修改:

    # 哨兵端口(26379,与其他节点端口区分)
    port 26379# 后台运行
    daemonize yes# 哨兵日志文件
    logfile "/usr/local/redis-cluster/sentinel/s1/sentinel-26379.log"# 数据目录(哨兵自身状态文件存放路径)
    dir "/usr/local/redis-cluster/sentinel/s1/data"  # 需创建data目录# 关键:监控主节点(格式:sentinel monitor <主节点名称> <主节点IP> <主节点端口> <quorum>)
    sentinel monitor mymaster 127.0.0.1 6379 2  # 解释如下:
    # mymaster:主节点的逻辑名称(自定义);
    # 127.0.0.1 6379:主节点的IP和端口;
    # 2:quorum值(至少2个哨兵认为主节点故障,才判定为真故障)。# 主节点的密码(哨兵连接主节点需验证)
    sentinel auth-pass mymaster redis@123  # 与主节点requirepass一致# 判定主节点“主观下线”的时间(毫秒):若主节点超过30秒无响应,哨兵认为其主观下线
    sentinel down-after-milliseconds mymaster 30000# 故障转移超时时间(毫秒):若180秒内未完成故障转移,视为失败
    sentinel failover-timeout mymaster 180000# 同一时间最多有1个从节点向新主节点同步数据(避免网络拥堵)
    sentinel parallel-syncs mymaster 1
    

    配置说明:

    • quorum:奇数哨兵节点数的情况下,通常设为 (n/2)+1(n 为哨兵总数),3 个哨兵设为 2,确保多数同意;
    • down-after-milliseconds:主观下线时间,过短可能误判,过长影响故障转移速度,推荐 30 秒;
    • parallel-syncs:控制从节点同步新主节点的并发数,1 表示串行同步,减少网络压力。
  3. 配置其他哨兵节点(s2、s3),与 s1 配置类似,仅端口和路径不同:

    s2(26380 端口):

    port 26380
    logfile "/usr/local/redis-cluster/sentinel/s2/sentinel-26380.log"
    dir "/usr/local/redis-cluster/sentinel/s2/data"
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel auth-pass mymaster redis@123
    # 其他配置(daemonize、down-after-milliseconds等)与s1一致
    

    s3(26381 端口):

    port 26381
    logfile "/usr/local/redis-cluster/sentinel/s3/sentinel-26381.log"
    dir "/usr/local/redis-cluster/sentinel/s3/data"
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel auth-pass mymaster redis@123
    # 其他配置与s1一致
    

步骤 3:启动所有哨兵节点

  1. 启动哨兵

    # 启动s1
    /usr/local/redis/bin/redis-sentinel /usr/local/redis-cluster/sentinel/s1/sentinel.conf
    # 启动s2
    /usr/local/redis/bin/redis-sentinel /usr/local/redis-cluster/sentinel/s2/sentinel.conf
    # 启动s3
    /usr/local/redis/bin/redis-sentinel /usr/local/redis-cluster/sentinel/s3/sentinel.conf
    

    验证启动:ps -ef | grep redis-sentinel,应显示 3 个进程。

步骤 4:验证哨兵状态

  1. 连接任意哨兵节点,查看监控状态:

    /usr/local/redis/bin/redis-cli -p 26379  # 哨兵无密码(默认不设置,若需密码可配置requirepass)
    127.0.0.1:26379> info sentinel  # 查看哨兵信息
    

    输出应包含:

    # Sentinel
    sentinel_masters:1  # 监控的主节点数量
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
    # 显示主节点状态正常,2个从节点,3个哨兵
    

步骤 5:测试故障转移(核心验证)

  1. 手动停止主节点(模拟故障):

    /usr/local/redis/bin/redis-cli -p 6379 -a redis@123 shutdown
    
  2. 查看哨兵日志(以 s1 为例):

    tail -f /usr/local/redis-cluster/sentinel/s1/sentinel-26379.log
    

    日志中会显示:

    • 检测到主节点 6379 下线;
    • 哨兵协商后发起故障转移;
    • 从 6380、6381 中选举一个新主节点(假设 6380 被选中)。
  3. 验证新主节点:连接原从节点 6380,查看角色:

    /usr/local/redis/bin/redis-cli -p 6380 -a redis@123
    127.0.0.1:6380> info replication
    # 输出中role:master,且connected_slaves:1(原6381变为其从节点)
    
  4. 重启原主节点 6379,查看角色:

    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/master/redis.conf  # 重启6379
    /usr/local/redis/bin/redis-cli -p 6379 -a redis@123
    127.0.0.1:6379> info replication
    # 角色变为slave,replicaof指向新主节点6380(哨兵自动更新配置)
    

四、Redis Cluster(集群)架构

架构核心:多主多从 + 数据分片,将数据分散到多个主节点(通过 16384 个槽位分片),每个主节点有从节点备份,支持水平扩展和自动故障转移,适合大规模数据场景。

环境准备

  • 6 个节点(3 主 3 从,端口:6379、6380、6381(主);6382、6383、6384(从));
  • 所有节点开启集群模式。

搭建步骤

步骤 1:创建 6 个节点目录

  1. 创建 6 个节点目录:

    mkdir -p /usr/local/redis-cluster/cluster/{79,80,81,82,83,84}  # 对应端口6379-6384
    

步骤 2:配置集群节点(以 79 为例,6379 端口)

  1. 复制配置文件:

    cp /root/redis-6.2.6/redis.conf /usr/local/redis-cluster/cluster/79/
    
  2. 编辑配置 vi /usr/local/redis-cluster/cluster/79/redis.conf,修改:

    port 6379
    daemonize yes
    logfile "/usr/local/redis-cluster/cluster/79/redis-6379.log"
    dir "/usr/local/redis-cluster/cluster/79/data"  # 需创建data目录
    bind 0.0.0.0
    protected-mode no
    requirepass "redis@123"  # 节点密码
    masterauth "redis@123"  # 主节点密码(从节点同步用)# 关键:开启集群模式
    cluster-enabled yes  # 必须设为yes,否则不是集群节点# 集群配置文件(自动生成,记录集群节点信息,无需手动修改)
    cluster-config-file nodes-6379.conf  # 每个节点文件名不同(含端口)# 节点超时时间(毫秒):超过此时间未响应,视为节点故障
    cluster-node-timeout 15000  # 推荐15秒# 开启AOF持久化
    appendonly yes
    

    配置说明:

    • cluster-enabled yes:标志该节点为集群节点,参与槽位分配和数据分片;
    • cluster-config-file:集群自动维护的配置文件(记录节点 ID、槽位分布等),重启后会加载;
    • cluster-node-timeout:故障检测的超时阈值,影响故障转移速度。
  3. 复制并修改其他 5 个节点的配置(仅端口和路径不同):

    • 6380:port 6380cluster-config-file nodes-6380.conf,路径对应 80 目录;
    • 6381:port 6381cluster-config-file nodes-6381.conf,路径对应 81 目录;
    • 6382-6384:同上,端口依次为 6382-6384,路径对应 82-84 目录。

步骤 3:启动所有集群节点

  1. 启动所有节点

    # 依次启动6个节点
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/79/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/80/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/81/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/82/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/83/redis.conf
    /usr/local/redis/bin/redis-server /usr/local/redis-cluster/cluster/84/redis.conf
    

    验证启动:ps -ef | grep redis-server,6 个节点进程均存在。

步骤 4:创建 Redis 集群(核心步骤)

  1. 创建集群

    /usr/local/redis/bin/redis-cli --cluster create \
    127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
    127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \
    --cluster-replicas 1 \
    -a redis@123
    

    命令参数解释:

    • --cluster create:创建集群;
    • 后续为 6 个节点的 IP: 端口;
    • --cluster-replicas 1:每个主节点分配 1 个从节点(3 主 3 从,符合预期);
    • -a redis@123:节点的密码(所有节点密码需一致)。

    执行后,会显示节点角色分配(如 6379、6380、6381 为主节点,6382-6384 为其从节点),并提示 “Can I set the above configuration? (type ‘yes’ to accept)”,输入 yes 确认。

步骤 5:验证集群状态

  1. 连接任意节点(需加 -c 表示集群模式,自动路由):

    /usr/local/redis/bin/redis-cli -c -p 6379 -a redis@123
    
  2. 查看集群信息:

    127.0.0.1:6379> cluster info  # 集群整体状态
    cluster_state:ok  # 集群正常
    cluster_slots_assigned:16384  # 所有槽位已分配
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6  # 6个节点
    ...
    
  3. 查看节点列表(含角色和槽位):

    127.0.0.1:6379> cluster nodes
    # 输出示例(精简):
    999d... 127.0.0.1:6379@16379 master - 0 1680000000000 1 connected 0-5460  # 主节点,负责槽0-5460
    a88b... 127.0.0.1:6380@16380 master - 0 1680000000000 2 connected 5461-10922  # 主节点,槽5461-10922
    b77c... 127.0.0.1:6381@16381 master - 0 1680000000000 3 connected 10923-16383  # 主节点,槽10923-16383
    c66d... 127.0.0.1:6382@16382 slave 999d... 0 1680000000000 4 connected  # 6379的从节点
    d55e... 127.0.0.1:6383@16383 slave a88b... 0 1680000000000 5 connected  # 6380的从节点
    e44f... 127.0.0.1:6384@16384 slave b77c... 0 1680000000000 6 connected  # 6381的从节点
    

步骤 6:测试数据分片与故障转移

  1. 数据分片测试:

    127.0.0.1:6379> set name "redis-cluster"  # 自动路由到对应槽位的节点
    -> Redirected to slot [5798] located at 127.0.0.1:6380  # 路由到6380(负责5461-10922槽)
    OK127.0.0.1:6380> get name  # 直接读取
    "redis-cluster"127.0.0.1:6379> cluster keyslot key1 # 查看键所在的槽位
    
  2. 故障转移测试(停止主节点 6380):

    /usr/local/redis/bin/redis-cli -p 6380 -a redis@123 shutdown
    

    查看集群节点状态:

    127.0.0.1:6379> cluster nodes
    # 6383(原6380的从节点)会晋升为主节点,负责5461-10922槽;
    # 重启6380后,会变为6383的从节点。
    

各架构对比及适用场景

架构优点缺点适用场景
单机简单、资源占用少无高可用、难扩展开发环境、低并发场景
主从提高读性能、数据备份手动故障转移、难扩展读多写少、需数据备份
哨兵自动故障转移、高可用难扩展、运维复杂生产环境、需高可用
集群高可用、水平扩展跨槽操作限制、复杂大规模数据、高并发

实际生产中,中小规模推荐哨兵架构,大规模数据推荐 Redis Cluster。所有架构均需配合持久化(AOF+RDB)和备份策略,进一步保障数据安全。

http://www.dtcms.com/a/582460.html

相关文章:

  • 筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
  • 青海住房和城乡建设部网站山东省城乡建设厅官网
  • 哈尔滨智能建站模板厦门 网站建设 网站开发
  • 第3节 RSA算法开启公钥加密时代
  • 昆山做网站公司哪家好青岛市黄岛区城市建设局 网站
  • 从正确到卓越:昇腾CANN算子开发高级性能优化指南
  • 网站建设 国家标准微网站自助建站
  • 政务公开系统网站建设短剧分销平台
  • 网站建设的静态网页作业青田网站做服装找工作
  • 【1min 速通 -- PyTorch 张量数据类型】张量类型的获取、转化与判别
  • git stash push 命令作用及使用场景
  • 青岛李沧区城乡建设局网站自己给网站做优化怎么做
  • 梧州网站建设设计朝阳专业网站建设
  • 网站模板和定制的区别网站营销应该怎么做
  • 用自己服务器做网站用备案wordpress功能小工具增加按钮
  • 2025 年的热门 AI 编程工具评测:Cursor、Claude Code、Codex、Lovable、v0 等
  • 切片上传version2.0 进度用模拟后端实时返回的进度,大文件1.05GB耗时7.49秒
  • App HTTPS 抓包 工程化排查与工具组合实战
  • 分页条初始化
  • 网站做seo的好处京东网上购物官方网站
  • 网站的风格设计下载了wordpress然后怎么用
  • 网站开发用的开源系统龙华在深圳算什么档次
  • 正确使用玛伐凯泰(Mavacamton)治疗梗阻性肥厚型心肌病的剂量间隔
  • ViDoRAG详解:多模态文档检索增强生成框架的革命性突破
  • 玉溪做网站建设的公司昆明网站设计都需要设计什么
  • 计算机关于网站开发的证书关于申请网站建设的报告
  • 获取DPI、设置进程DPI感知(C++源码)
  • 时间序列图的“性能陷阱”:Highcharts “金融级”优化方案
  • 网站开发的方法和步骤网站构成的作用是什么
  • 6、prometheus资源规划