用Docker搭建分布式 Redis 的方法

news/2024/7/8 9:08:36 标签: docker, 分布式, redis

使用 Docker 搭建一个分布式的 Redis 集群可以帮助你快速部署和管理多个 Redis 实例。一个典型的 Redis 集群包括多个主从节点,通过分片来实现数据的分布式存储与高可用性。

以下是使用 Docker 搭建分布式 Redis 集群的详细步骤:

前提条件

  • 安装 Docker 和 Docker Compose
  • 了解 Redis 集群的基本概念

步骤 1:创建 Redis 配置文件

首先,为每个 Redis 实例创建配置文件(redis.conf)。这里以 redis-node1.conf 为例:

port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

类似地,创建 redis-node2.conf, redis-node3.conf, redis-node4.conf, redis-node5.conf, 和 redis-node6.conf,这些文件的内容可以相同。

步骤 2:创建 Docker Compose 文件

创建一个 docker-compose.yml 文件来定义 Redis 集群的服务:

version: '3'

services:
  redis-node1:
    image: redis:6.2
    container_name: redis-node1
    ports:
      - "6379:6379"
    volumes:
      - ./redis-node1.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node2:
    image: redis:6.2
    container_name: redis-node2
    ports:
      - "6380:6379"
    volumes:
      - ./redis-node2.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node3:
    image: redis:6.2
    container_name: redis-node3
    ports:
      - "6381:6379"
    volumes:
      - ./redis-node3.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node4:
    image: redis:6.2
    container_name: redis-node4
    ports:
      - "6382:6379"
    volumes:
      - ./redis-node4.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node5:
    image: redis:6.2
    container_name: redis-node5
    ports:
      - "6383:6379"
    volumes:
      - ./redis-node5.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

  redis-node6:
    image: redis:6.2
    container_name: redis-node6
    ports:
      - "6384:6379"
    volumes:
      - ./redis-node6.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - redis-cluster

networks:
  redis-cluster:

步骤 3:启动 Redis 集群

在包含 docker-compose.yml 文件的目录中运行以下命令来启动 Redis 提供的全套服务:

docker-compose up -d

等待所有服务启动成功后,使用以下命令查看启动状态:

docker-compose ps

步骤 4:初始化 Redis 集群

连接到其中一个 Redis 容器,然后通过 Redis 命令行工具初始化集群:

docker exec -it redis-node1 redis-cli --cluster create \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node1):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node2):6379\
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node3):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node4):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node5):6379 \
  $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node6):6379 \
  --cluster-replicas 1

该命令会启动一个 Redis 集群,设置三个主节点(redis-node1、redis-node2、redis-node3),每个主节点有一个从节点(redis-node4、redis-node5、redis-node6)。--cluster-replicas 1 表示每个主节点有一个从节点。

你会看到一段输出,要求你确认分配,输入 yes 并按回车。

步骤 5:验证集群

确认集群初始化完成后,可以通过 Redis 命令行工具验证集群状态:

docker exec -it redis-node1 redis-cli -c 

在 Redis 命令行中,运行以下命令检查集群信息:

127.0.0.1:6379> cluster nodes

此命令应返回集群中所有节点的详细信息,包括它们的角色(主节点或从节点)、状态和与其他节点的连接情况。

完成!

到此为止,你已经使用 Docker 部署了一个带有 6 个 Redis 实例的分布式 Redis 集群系统。你可以通过 redis-cli 与集群进行交互,并执行各种 Redis 命令来测试和使用你的 Redis 集群。

总结

通过上述步骤,你可以快速搭建一个分布式的 Redis 环境,适用于开发和测试场景。当然,在生产环境中可能还需要考虑更多的安全、性能及运维管理的问题。


http://www.niftyadmin.cn/n/5536996.html

相关文章

使用PowerShell开启防火墙端口

使用PowerShell开启防火墙端口 引言 防火墙是网络安全的重要组成部分,它通过控制进出网络的流量来保护计算机和网络免受未经授权的访问。有时候,我们需要打开特定的防火墙端口以允许特定应用程序或服务的通信。本文将详细讲解如何使用 PowerShell 开启…

自动化立体仓库出入库能力及堆垛机节拍

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载 自动化立体仓库的出入库能力、堆垛机节拍以…

python实现API调用缓存

python实现API调用缓存 1.代码2.输出3.保存的json数据 想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据 1.代码 import jsondef get_variable_name(var):变量转变量名local_varsglobals()return [name for name, value in local_vars.ite…

eclipse基础工程配置( tomcat配置JRE环境)

文章目录 I eclipse1.1 工程配置1.2 编译工程1.3 添加 JRE for the project build pathII tomcat配置JRE环境2.1 Eclipse编辑tomcat运行环境(Mac版本)2.2 Eclipse编辑tomcat运行环境(windows版本)2.3 通过tomcat7W.exe配置运行环境(windows系统)I eclipse 1.1 工程配置 …

OpenGL的学习之路

Qt如何创建OpenGL的渲染窗口? 类比GLFW库,Qt提供了OpenGL的渲染窗口类QOpenGLWidget: 1、重写initializeGL()和resizeGL()函数来设置OpenGL状态并提供透视图转换。 2、重写paintGL()来绘制3D场景,只调用OpenGL函数。 3、还可以…

分页联合查询实现方法(Java)

controller层 GetMapping("/page")Operation(summary "获得标注属性管理分页")public CommonResult<PageResult<MarkerPropertyViewVO>> getMarkerPropertyPage(Valid MarkerPropertyPageReqVO pageVO) {PageResult<MarkerPropertyDO> …

AIGC文生图lora微调训练案例;SD-Train界面训练stable Diffusion lora模型

lora仓库&#xff08;1000多个lora微调模型分享&#xff09;&#xff1a; https://lorastudio.co/models 1、命令代码方式&#xff1a;文生图lora微调训练案例 主要用huggingface相关包&#xff1a;peft、accelerate、diffusers 参考&#xff1a; https://huggingface.co/blo…

眼动追踪技术 | 眼动的分类和模型

摘要 灵长类动物用于调整中央凹位置的正常眼动&#xff0c;几乎都可以归结为五种基本类型的组合&#xff1a;扫视、平稳追踪、聚散、前庭眼震和生理性眼震(与注视相关的微小运动)。聚散运动用于将双眼聚焦于远处的目标(深度知觉)。其他运动(如适应和聚焦)指的是眼动的非位置变…