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

Redis 主从复制集群搭建教程

目录

    • 为什么要搭建 Redis 主从复制集群?
    • 搭建 Redis 主从复制集群
      • 前提条件
      • 步骤一:创建 Docker 网络
      • 步骤二:启动 Redis 主节点
      • 步骤三:启动 Redis 从节点
      • 步骤四:验证复制状态
      • 步骤五:使用 Python 连接 Redis 集群

为什么要搭建 Redis 主从复制集群?

在生产环境中,单节点 Redis 存在以下几个问题:

  1. 单点故障风险:如果唯一的 Redis 节点发生故障,整个系统将无法访问缓存数据。
  2. 性能瓶颈:所有读写请求都集中在单个节点上,容易成为系统瓶颈。
  3. 数据安全性低:数据只存在于一个节点,如果该节点数据丢失,将无法恢复。
  4. 维护困难:单节点维护(如升级)时,会导致服务不可用。

主从复制集群通过引入多个节点解决了这些问题:

  • 读写分离:主节点处理写操作,从节点处理读操作,提高系统吞吐量
  • 高可用性:主节点故障时,可以提升从节点为新的主节点
  • 数据备份:数据在多个节点上存在副本,提高数据安全性
  • 负载均衡:读请求可以分散到多个从节点,减轻主节点压力

搭建 Redis 主从复制集群

前提条件

  • 已安装 Docker
  • 基本了解 Redis 和 Docker 命令

步骤一:创建 Docker 网络

首先,创建一个专用网络,使 Redis 容器之间可以通过容器名称相互通信:

docker network create redis-cluster

步骤二:启动 Redis 主节点

启动一个 Redis 容器作为主节点,并将其端口映射到主机:

docker run -d -p 6379:6379 --name redis-master --network redis-cluster redis

步骤三:启动 Redis 从节点

启动两个 Redis 从节点,并配置它们跟随主节点:

docker run -d -p 6380:6379 --name redis-slave1 --network redis-cluster redis redis-server --slaveof redis-master 6379
docker run -d -p 6381:6379 --name redis-slave2 --network redis-cluster redis redis-server --slaveof redis-master 6379

在这里插入图片描述

步骤四:验证复制状态

连接到主节点,检查复制状态:

docker exec -it redis-master redis-cli

在 Redis CLI 中执行:

INFO replication

您应该看到类似以下输出:

# Replication
role:master
connected_slaves:2
slave0:ip=172.xx.xx.xx,port=6379,state=online,offset=xxx,lag=0
slave1:ip=172.xx.xx.xx,port=6379,state=online,offset=xxx,lag=0

在这里插入图片描述

步骤五:使用 Python 连接 Redis 集群

创建一个 Python 脚本来连接和使用 Redis 集群:

import redis# 连接到主节点(写操作)
master = redis.StrictRedis(host='localhost', port=6379, db=0)# 连接到从节点(读操作)
slave = redis.StrictRedis(host='localhost', port=6380, db=0)def write_to_master(key, value):# 写操作发送到主节点master.set(key, value)def read_from_slave(key):# 读操作发送到从节点value = slave.get(key)if value:return value.decode('utf-8')  # 将字节字符串解码为普通字符串return None# 示例使用
write_to_master('foo', 'bar')
value = read_from_slave('foo')
print(value)  

在这里插入图片描述

相关文章:

  • 游戏引擎学习第267天:为每个元素添加裁剪矩形
  • 《大规模电动汽车充换电设施可调能力聚合评估与预测》MATLAB实现计划
  • 在一个FreeBSD的控制台,当移动鼠标时,就会有字符发生,这是怎么回事:35;62;18m35;60;
  • 【Python】Pycharm中安装库可靠的方法
  • 基础编程题目集 6-8 简单阶乘计算
  • 自定义Widget开发:复杂组件设计
  • Android 数据持久化之 文件存储
  • 超详细讲解注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制
  • Java响应实体【R】
  • 如何对外包团队进行有效的管理?
  • Day19 常见的特征筛选算法
  • 代码随想录第39天:单调栈
  • 零拷贝的简单复习
  • Python核心数据结构深度对比:列表、字典、元组与集合的异同与应用场景
  • 深度解析语义分割评估指标:从基础到创新实践
  • DataWorks快速入门
  • 预渲染 Prerender
  • pm2如何执行脚本批量启动多个服务
  • 77.组合问题
  • C++ STL入门:vecto容器
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典
  • 数说母亲节|妈妈的妈妈带娃比例提升,托举效果如何?
  • 经彩申城!上海网络大V沙龙活动走进闵行
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿助力人文学科与社会科学创新
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • 中方对中美就关税谈判的立场发生变化?外交部:中方立场没有任何改变