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

用docker实现Redis主从配置

初始条件

在三台不同服务器上使用 Docker 部署 Redis 主从模式,通常有以下步骤。
假设你有三台服务器,分别为 server1、server2 和 server3,我们将在这些服务器上设置 Redis 的主从复制。

步骤概览
准备 Redis 配置文件:每台服务器上的 Redis 实例需要配置主从关系。
在三台服务器上启动 Docker 容器:在每台服务器上分别启动 Redis 容器,其中两台作为从节点,一台作为主节点。
配置主从复制:在从节点上配置连接到主节点。

步骤 1:准备 Docker 环境

在每台服务器上安装 Docker,并确保它们能够相互通信。如果你使用 Docker Compose,也可以通过配置 docker-compose.yml 文件来简化配置。

步骤 2:启动 Redis 容器

你需要在三台服务器上启动 Redis 容器。以下是如何在每台服务器上启动 Redis 实例的步骤。

  1. 启动主节点(Server1)
    在 server1 上启动主节点 Redis:
docker run -d \--name redis-master \--restart always \-p 6379:6379 \redis:latest

此命令会启动一个 Redis 容器并将其设置为主节点。6379 是 Redis 的默认端口。

  1. 启动从节点(Server2)
    在 server2 上启动一个从节点 Redis,并连接到 server1 上的主节点:
docker run -d \--name redis-slave1 \--restart always \-e REDIS_REPLICATION_MODE=slave \-e REDIS_MASTER_HOST=<server1_ip> \-e REDIS_MASTER_PORT=6379 \-p 6380:6379 \redis:latest

这里,<server1_ip> 是 server1 的 IP 地址,redis-slave1 是从节点的名称。通过环境变量来指定从节点连接到主节点。

  1. 启动从节点(Server3)
    在 server3 上启动另一个从节点 Redis,并连接到 server1 上的主节点:
docker run -d \--name redis-slave2 \--restart always \-e REDIS_REPLICATION_MODE=slave \-e REDIS_MASTER_HOST=<server1_ip> \-e REDIS_MASTER_PORT=6379 \-p 6381:6379 \redis:latest

同样,替换 <server1_ip> 为主节点的 IP 地址。

步骤 3:配置主从复制
Redis 会自动通过容器的环境变量配置主从关系,但是你可以通过连接到从节点并手动配置主从关系来确保一切正常。

  1. 进入从节点容器并配置主从关系
docker exec -it redis-slave1 redis-cli

连接到从节点后,执行以下命令以确保它正确地配置了主从复制:

SLAVEOF <server1_ip> 6379

同样,在 redis-slave2 上执行相同的操作:

docker exec -it redis-slave2 redis-cli
SLAVEOF <server1_ip> 6379

步骤 4:验证主从复制是否成功
你可以使用以下命令来检查主从关系是否正常工作:

连接到主节点(server1):

docker exec -it redis-master redis-cli

在主节点上执行命令查看从节点:

INFO replication

你应该能看到类似以下的输出,显示从节点已连接:

localhost:6379[1]> INFO replication

# Replication
role:master
connected_slaves:2
slave0:ip=172.16.100.121,port=6379,state=online,offset=7873245,lag=0
slave1:ip=172.16.100.122,port=6379,state=online,offset=7793351,lag=1
master_failover_state:no-failover
master_replid:0ab711eb4e43cf51c349e232042f3ef01b009c72
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7874805
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:6826230
repl_backlog_histlen:1048576

连接到从节点(server2 或 server3):

docker exec -it redis-slave1 redis-cli

在从节点上执行命令查看主节点信息:

INFO replication

输出应显示从节点已正确连接到主节点,如下所示:

# Replication
role:slave
master_host:172.16.100.102
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:48479646
slave_repl_offset:48479646
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0ab711eb4e43cf51c349e232042f3ef01b009c72
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:48479646
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:47431071
repl_backlog_histlen:1048576

步骤 5:持久化配置(可选)
为了确保 Redis 数据在重启后依然有效,你可以为 Redis 配置持久化机制。可以通过修改 Redis 配置文件或使用 Docker 挂载数据卷来实现。

docker run -d \--name redis-master \--restart always \-v /path/to/data:/data \-p 6379:6379 \redis:latest

这样,Redis 数据将保存在本地磁盘,而不是容器的默认文件系统中。

总结:
主节点:在 server1 上启动一个 Redis 实例。
从节点:在 server2 和 server3 上启动两个 Redis 从节点,并将它们配置为从属于 server1。
验证复制:通过 INFO replication 命令验证主从关系是否正确。
通过这种方式,你可以在三台服务器上使用 Docker 部署一个高可用的 Redis 主从模式。

http://www.xdnf.cn/news/19280.html

相关文章:

  • Android14 init.qcom.usb.rc详解
  • 2025年渗透测试面试题总结-38(题目+回答)
  • WebRTC音频QoS方法五(音频变速算法之Expand算法实现)
  • 订餐后台管理系统 -day03 登录模块
  • Electron 项目来实现文件下载和上传功能(AI)
  • 前端网页源码模板 静态HTML源码网站
  • 【C++八股文】计算机网络篇
  • 企业级-搭建CICD(持续集成持续交付)实验手册
  • Web开发工具一套式部署Maven/Nvm/Mysql/Redis
  • 【问题】Windows的dockerdesktop/wsl虚拟化支持问题总结
  • 2025年OE SCI2区TOP,势场蚁群算法+无人水面艇路径规划,深度解析+性能实测
  • RustDesk(跨平台远程桌面软件) v1.4.1 中文绿色版
  • 根据并发和响应延迟,实现语音识别接口自动切换需求
  • 「日拱一码」058 机器学习——监督学习
  • CesiumJS 封装 - 初始化与配置
  • 《零基础入门AI:YOLOv2算法解析》
  • 【菜狗每日记录】VSCode远程连接多个账号、创建环境
  • Linux Shell 脚本基础002
  • Day16(前端:JavaScript基础阶段)
  • 8月科技前沿速递 | 存算一体开发者社区月报
  • HCIE考试截图及作答文件上传流程
  • Baseline|基线
  • 在vue/react项目中单独引入一个js文件,在js文件中使用DOMContentLoaded函数querySelectorAll为空数组解决办法
  • OpenCV轮廓近似与Python命令行参数解析
  • 第四十七天(jndi注入)
  • 柳州市委常委、统战部部长,副市长潘展东率队首访深兰科技集团新总部,共探 AI 赋能制造大市与东盟合作新局
  • 前端vue框架实现反向代理详解
  • 响应式编程框架Reactor【3】
  • 【物联网】关于 GATT (Generic Attribute Profile)基本概念与三种操作(Read / Write / Notify)的理解
  • OpenAI Sora深度解析:AI视频生成技术如何重塑广告电商行业?影业合作已落地