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

Docker容器创建Redis主从集群

利用虚拟机中的三个Docker容器创建主从集群,容器信息:

容器名角色IP映射端口
r1master192.168.150.1017001
r2slave192.168.150.1017002
r3slave192.168.150.1017003

启动多个redis实例

新建一个docker-compose文件来构建主从集群:

文件内容:

version: "3.2"services:r1:image: rediscontainer_name: r1network_mode: "host"entrypoint: ["redis-server", "--port", "7001"]r2:image: rediscontainer_name: r2network_mode: "host"entrypoint: ["redis-server", "--port", "7002"]r3:image: rediscontainer_name: r3network_mode: "host"entrypoint: ["redis-server", "--port", "7003"]

上传到虚拟机的/root/redis目录下

移动到这个目录下

执行命令:

docker compose up -d

结果:

建立集群

通过命令建立集群关系:

# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>

有两种模式:

  • 永久生效:在redis.conf文件中利用slaveof命令指定master节点
  • 临时生效:直接利用redis-cli控制台输入slaveof命令,指定master节点

这里测试临时模式,先连接r2让其以r1为master

  # 连接r2
docker exec -it r2 redis-cli -p 7002
# 认r1主,也就是7001
slaveof 192.168.150.101 7001

然后连接r3让其以r1为master

# 连接r3
docker exec -it r3 redis-cli -p 7003
# 认r1主,也就是7001
slaveof 192.168.150.101 7001

连接r1查看集群状态

# 连接r1
docker exec -it r1 redis-cli -p 7001
# 查看集群状态
info replication

输出结果:

127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.150.101,port=7002,state=online,offset=42,lag=0
slave1:ip=192.168.150.101,port=7003,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:12683467c1e8c3805281c12a6d7187ca3bb0bb73
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
127.0.0.1:7001>

可以看到,当前节点r1:7001的角色是master,有两个slave与其连接:

  • slave0port7002,也就是r2节点
  • slave1port7003,也就是r3节点

测试:

依次在r1r2r3节点上执行下面命令:

set num 123get num

结果:

可以发现:只有在r1这个节点上可以执行set命令(写操作),其它两个节点只能执行get命令(读操作)。也就是说读写操作已经分离了。

相关文章:

  • 如何排查Redis单个Key命中率骤降?
  • 【Linux系统编程】Ext系列文件系统
  • Ansible 剧本精粹 - 编写你的第一个 Playbook
  • 告别手动绘图!基于AI的Smart Mermaid自动可视化图表工具搭建与使用指南
  • Vue拖拽组件:vue-draggable-plus
  • 如何设计一个支持线上线下的通用订单模块 —— 面向本地生活服务行业的架构思路
  • Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家
  • docker 部署 gin
  • 模型训练相关的问题
  • CFTel:一种基于云雾自动化的鲁棒且可扩展的远程机器人架构
  • 实现RabbitMQ多节点集群搭建
  • 初学者如何微调大模型?从0到1详解
  • 基于Python与本地Ollama的智能语音唤醒助手实现
  • RV1126-OPENCV 图像叠加
  • Rust 学习笔记:发布一个 crate 到 crates.io
  • 性能优化 - 工具篇:基准测试 JMH
  • 性能优化 - 案例篇:数据一致性
  • NX753NX756美光科技闪存NX784NX785
  • QuickJS 如何计算黄金分割率 ?
  • Microsoft Fabric - 尝试一下Data Factory一些新的特性(2025年5月)
  • 厦门建设网站/网络域名
  • 网站制作软件/小红书网络营销策划方案
  • wordpress 断点调试/郑州关键词优化费用
  • 宁波网站建设服务电话/重庆seo黄智
  • 如何写一个可以做报价计算的网站/最新军事新闻
  • 住房和城乡建设部网站事故快报/手机创建网站免费注册