Docker-Compose实战,搭建Redis主从

200 阅读3分钟

确实,只需要备份主节点的数据即可。从节点的数据会自动从主节点同步,因此不需要单独备份从节点的数据。下面是简化后的 Docker Compose 文件和 Redis 配置文件,仅对主节点进行数据持久化。

项目结构

redis_cluster/
├── docker-compose.yml
├── master/
│   └── redis.conf
└── slave/
    └── redis.conf

1. 简化后的 docker-compose.yml

version: "3.0"

services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    volumes:
      - ./master/redis.conf:/usr/local/etc/redis/redis.conf
      - masterData:/data
    command:
      - redis-server
      - /usr/local/etc/redis/redis.conf
    networks:
      - redisNet
    ports:
      - "13001:6379"
    restart: "no"
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: "400MB"

  redis-slave:
      image: redis:latest
      container_name: redis-slave
      ports:
        - "13002:6379"
      volumes:
        - ./slave/redis.conf:/usr/local/etc/redis/redis.conf
      networks:
        - redisNet
      restart: "no"
      command: redis-server /usr/local/etc/redis/redis.conf
      depends_on:
        - redis-master
      environment:
        - REDIS_MASTER_HOST=redis-master
      deploy:
        resources:
          limits:
            cpus: "0.5"
            memory: "400MB"


volumes:
  masterData:
    driver: local

networks:
  redisNet:
    driver: bridgee

2. master/redis.conf

bind 0.0.0.0
port 6379
requirepass yourpassword
dir /data
dbfilename dump.rdb
appendonly yes
maxmemory 400mb
maxmemory-policy allkeys-lru
  • bind 0.0.0.0:这意味着 Redis 将接受来自任何网络接口的连接,这对开发和测试环境很有用,但在生产环境中应谨慎使用,并配合防火墙或其他安全措施使用。
  • port 6379:默认端口号 6379 是 Redis 服务器的标准监听端口。如果需要运行多个 Redis 实例,可能需要更改此端口号。
  • requirepass yourpassword:设置访问控制密码。所有客户端连接 Redis 时需要提供这个密码,确保 Redis 服务器的安全性。
  • dir /data:Redis 将其数据文件保存到这个目录。确保这个目录有足够的空间,并且对 Redis 进程具有写权限。
  • dbfilename dump.rdb:RDB 文件名,存储 Redis 数据库的快照。在某些情况下,重启 Redis 可以从这个快照文件恢复数据。
  • appendonly yes:启用 AOF 持久化,每次写操作都会被记录到 AOF 文件中,确保更高的持久化可靠性。
  • maxmemory 400mb:限制 Redis 的内存使用量,防止 Redis 消耗过多内存,影响系统的其他进程。
  • maxmemory-policy allkeys-lru:当内存达到限制时,Redis 将根据 LRU 算法删除最近最少使用的键。其他可选策略包括 volatile-lruvolatile-randomallkeys-random 等。

3. slave/redis.conf

bind 0.0.0.0
port 6379
requirepass yourpassword
masterauth yourpassword
slaveof redis-master 6379

步骤

  1. 创建项目目录结构
    在项目根目录下创建上述目录结构和文件。
  2. 启动服务
    在项目根目录下运行以下命令:
docker-compose up -d
  1. 验证 Redis 主从设置
    • 连接到 Redis 主节点:
docker exec -it redis-master redis-cli -a yourpassword

然后在 Redis CLI 中运行以下命令:

INFO replication

你应该会看到类似以下输出:

# Replication
role:master
connected_slaves:1
slave0:ip=<slave_ip>,port=6379,state=online,offset=0,lag=1

    • 连接到 Redis 从节点:
docker exec -it redis-slave redis-cli -a yourpassword

然后在 Redis CLI 中运行以下命令:

INFO replication

你应该会看到类似以下输出:

# Replication
role:slave
master_host:redis-master
master_port:6379

解释

  • 持久化:只对主节点的数据进行持久化,将主节点的数据目录映射到本地目录。
  • 资源限制:对主从节点都设置 CPU 和内存的使用限制。
  • 密码设置:通过 requirepassmasterauth 设置 Redis 密码,确保安全性。
  • Redis 配置:在主节点的 redis.conf 中设置持久化、最大内存限制和内存策略。从节点的 redis.conf 设置从属关系和认证信息。

通过这个示例项目,你可以学习如何使用 Docker Compose 来设置和管理具有数据持久化、资源限制和密码保护的 Redis 主从架构,仅对主节点进行数据持久化。