Redis 组网方式入门

文章目录

Redis 是一个开源的、基于键值对的内存数据存储系统,广泛应用于缓存、消息队列、数据库等多种场景。随着业务需求的不断增长,单一的 Redis 实例往往无法满足高可用性和高性能的要求。因此,Redis 提供了多种组网方式来应对不同的应用场景。本文将详细介绍 Redis 的几种主要组网方式及其优缺点。

一、组网方式

1. 单实例模式

描述

这是最基本的部署方式,Redis 服务运行在一个单独的服务器上,没有冗余机制。

优点

简单易用:配置和管理都非常简单,适合小型应用或测试环境。

资源利用率高:不需要额外的服务器资源,成本较低。

缺点

单点故障:一旦该实例发生故障,整个服务将不可用,存在较高的风险。

性能瓶颈:所有请求都集中在同一个实例上,容易成为性能瓶颈。

适用场景

小型应用或测试环境

对高可用性和性能要求不高的场景

2. 主从复制模式(Master-Slave Replication)

描述

一个主节点(Master)可以有多个从节点(Slave),主节点负责写操作,从节点负责读操作。数据从主节点异步复制到从节点。

优点

提高读取性能:通过读写分离,从节点可以分担主节点的读取压力。

数据冗余:支持数据备份,提高了数据的安全性。

灵活扩展:可以轻松添加更多的从节点来提升读取性能。

缺点

单点故障:主节点故障时需要手动切换,存在单点故障风险。

数据一致性:由于数据复制是异步的,可能会导致主从节点之间的数据不一致。

适用场景

读多写少的应用场景

需要数据备份和读写分离的场景

基于docker的redis主从复制

1. 配置主节点
  • 编辑主节点配置文件
conf 复制代码
# 绑定 IP 地址,允许远程连接
bind 0.0.0.0

# 配置端口号
port 6379

# 设置密码(可选)
requirepass 123456

# 开启 AOF 持久化(可选)
appendonly yes

# 设置日志级别
loglevel notice

# 设置日志文件路径
logfile /var/log/redis/redis.log
  • 启动主节点
sh 复制代码
docker run -d -P \
--name redis7-master \
-p 6379:6379 \
-p 16379:16379 \
-v /work/docker/redis/data/master_6379:/data \
-v /work/docker/redis/data/master_6379/log:/var/log/redis \
-v /work/docker/redis/conf/master_6379.conf:/etc/redis/redis.conf \
redis:latest \
redis-server /etc/redis/redis.conf
  • 查看主节点IP
sh 复制代码
$ docker inspect redis7-master | grep IPAdd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

如果是生产环境,一般不使用docker,直接部署到物理机,IP地址也是已知确定的;本人使用docker部署,此处查看主节点IP,方便后续部署从节点时使用该IP。

2. 配置从节点
  • 编辑主节点配置文件
conf 复制代码
# 绑定 IP 地址,允许远程连接
bind 0.0.0.0

# 配置端口号
port 6380

# 设置密码(如果主节点设置了密码)
masterauth 123456

# 设置密码(可选)
requirepass 12345678

# 开启 AOF 持久化(可选)
appendonly yes

# 设置日志级别
loglevel notice

# 设置日志文件路径
logfile /var/log/redis/redis.log

# 指定主节点的地址和端口
replicaof 172.17.0.2 6379

replicaof 命令使用的IP即是主节点的IP。

  • 启动从节点
sh 复制代码
docker run -d -P \
--name redis7-slave \
-p 6380:6380 \
-p 16380:16380 \
-v /work/docker/redis/data/slave_6380:/data \
-v /work/docker/redis/data/slave_6380/log:/var/log/redis \
-v /work/docker/redis/conf/slave_6380.conf:/etc/redis/redis.conf \
redis:latest \
redis-server /etc/redis/redis.conf
3. 查看节点状态
  • 检查主节点状态
shell 复制代码
docker exec -it redis7-master bash
redis-cli -a 123456
info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.4,port=6380,state=online,offset=43,lag=0
......

应该能看到 role:masterconnected_slaves:1,表示有一个从节点连接成功。

  • 检查从节点状态
shell 复制代码
docker exec -it redis7-slave bash
redis-cli -p 6380 -a 12345678
> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
......

应该能看到 role:slavemaster_host:<master_ip>master_link_status:up,表示从节点已成功连接到主节点。

在从节点执行slaveof <master_ip> <master_port>slaveof no one也可以快速搭建和解散主从网络。

4. 验证主从数据同步
  • 在主节点上写入数据
shell 复制代码
set k1 hello
  • 在从节点上读取数据
shell 复制代码
get k1

如果返回 hello,说明数据同步成功。

5. 查看同步进度
  • 在主节点执行info replication命令

    slave0后面显示从节点的IP、端口、状态、偏移量和延迟

    slave0:ip=172.17.0.4,port=6380,state=online,offset=3179,lag=1
    master_repl_offset:3179 # 表示主节点的复制偏移量

  • 在从节点执行info replication命令

    slave_repl_offset:3501 # 表示从节点的复制偏移量
    master_repl_offset:3501 # 表示主节点的复制偏移量

  • 在主节点或任意从节点执行MONITOR命令

    该命令将显示所有接收到的命令,包括主从同步相关的命令。

  • 在主节点执行CLIENT LIST命令

    flags=S:表示这是一个从节点连接。

3. 哨兵模式(Sentinel)

描述

哨兵模式在主从复制模式的基础上增加了哨兵节点,哨兵节点负责监控主从节点的健康状态,并在主节点故障时自动进行故障转移。

优点

自动化故障恢复:哨兵节点可以自动检测并恢复主节点故障,提高了系统的可用性。

高可用性:通过自动故障转移,减少了服务中断时间。

缺点

配置复杂:需要配置多个哨兵节点和主从节点,管理较为复杂。

资源消耗:哨兵节点会占用一定的系统资源。

适用场景

高可用性要求较高的生产环境

需要自动故障恢复的场景

4. 集群模式(Cluster)

描述

Redis 集群模式支持数据分片(Sharding),每个节点负责一部分数据,通过哈希槽(Hash Slot)机制实现数据的分布式存储。

优点

水平扩展:支持水平扩展,提高了系统的存储容量和处理能力。

高可用性:通过数据分片和副本机制,提高了系统的可用性。

负载均衡:请求均匀分布在多个节点上,避免了单点性能瓶颈。

缺点

配置复杂:需要配置多个节点和哈希槽,管理较为复杂。

客户端要求:客户端需要支持集群模式,增加了客户端的复杂度。

适用场景

大规模分布式系统

需要高可用性和高性能的场景

5. 分片模式

5.1 代理分片模式(Proxy-based Sharding)

描述

通过代理层实现数据分片,客户端请求先经过代理层,由代理层决定将请求路由到哪个Redis实例。

优点

客户端无需关心数据分片逻辑,易于实现读写分离。

缺点

代理层可能成为性能瓶颈,增加了系统复杂度。

5.2 客户端分片模式(Client-side Sharding)

描述

客户端直接负责数据分片逻辑,将请求直接发送到相应的Redis实例。

优点

减少了代理层的开销,提高了性能。

缺点

客户端实现复杂,数据分片逻辑需要在客户端维护,增加了客户端的负担。

二、总结

Redis 提供了多种组网方式,每种方式都有其适用的场景和优缺点。选择合适的组网方式需要根据具体的业务需求、性能要求和运维能力来决定。例如,对于简单的应用,单实例模式或主从复制模式可能就足够了;而对于高可用性和高性能要求的场景,集群模式或哨兵模式可能是更好的选择。

希望本文能够帮助到你。

相关推荐
King.6241 小时前
SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!
大数据·数据库·人工智能·sql·mysql·clickhouse·华为
小希与阿树2 小时前
如何解决Redis中的热点key问题
数据库·redis·缓存
草莓屁屁不酸3 小时前
积分与签到设计
java·redis·微服务·rabbitmq
林犀居士4 小时前
H2数据库在单元测试中的应用
数据库·单元测试·h2·内存数据库
周周写不完的代码7 小时前
mysql -> 达梦数据迁移(mbp大小写问题兼容)
数据库·mysql·达梦
lindsayshuo8 小时前
为什么在二维卷积操作中,将宽度(W)维度放在高度(H)之前会破坏空间局部性原则,并影响缓存性能
缓存
MiniFlyZt10 小时前
省市区三级联动(后端)
数据库·spring boot
背太阳的牧羊人11 小时前
用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(2) —— 从 PDF 文档生成矢量数据库 (VectorDB),然后存储文本的嵌入向量
数据库·人工智能·sql·langchain·pdf
程序员谷美11 小时前
Redis 性能优化:利用 MGET 和 Pipeline 提升效率
java·redis·性能优化
zhangxueyi11 小时前
MySQL之企业面试题:InnoDB存储引擎组成部分、作用
java·数据库·mysql·面试·innodb