Docker-Compose部署Redis(v7.2)分片集群(含主从)

本文详细介绍了如何在Windows环境下使用DockerDesktop搭建Redis7.2的分片主从集群,包括文件夹结构、配置文件调整、自动分配主从和手动配置,以及测试集群结构和分片功能。
摘要由CSDN通过智能技术生成

环境

  • docker desktop for windows 4.23.0
  • redis 7.2

目标

搭建如下图分片+主从集群。
在这里插入图片描述

一、前提准备

1. 文件夹结构

因为Redis 7.2 docker镜像里面没有配置文件,所以需要去redis官网下载一个复制里面的redis.conf
博主这里用的是7.2.3版本的redis.conf,这个文件就在解压后第一层文件夹里。

然后构建如下文件夹结构。

sharding/
├── docker-compose.yaml
├── master1
│   └── conf
│       └── redis.conf
├── master2
│   └── conf
│       └── redis.conf
├── master3
│   └── conf
│       └── redis.conf
├── replica1
│   └── conf
│       └── redis.conf
├── replica2
│   └── conf
│       └── redis.conf
└── replica3
    └── conf
        └── redis.conf

二、配置文件

1. redis.conf

对每个redis.conf都做以下修改。分片集群的redis主从的redis.conf目前都是一样的。

port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /data/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /data
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize no
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /data/run.log

2. docker-compose文件

version: '3.8'

networks:
  redis-sharding:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.30.2.0/24

services:
  master1:
    container_name: master1
    image: redis:7.2
    volumes:
      - ./master1/conf:/usr/local/etc/redis
    ports:
      - "7001:6379"
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.11

  master2:
    container_name: master2
    image: redis:7.2
    volumes:
      - ./master2/conf:/usr/local/etc/redis
    ports:
      - "7002:6379"
    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.12

  master3:
    container_name: master3
    image: redis:7.2
    volumes:
      - ./master3/conf:/usr/local/etc/redis
    ports:
      - "7003:6379"
    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.13

  replica1:
    container_name: replica1
    image: redis:7.2
    volumes:
      - ./replica1/conf:/usr/local/etc/redis
    ports:
      - "8001:6379"
    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.21

  replica2:
    container_name: replica2
    image: redis:7.2
    volumes:
      - ./replica2/conf:/usr/local/etc/redis
    ports:
      - "8002:6379"
    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.22

  replica3:
    container_name: replica3
    image: redis:7.2
    volumes:
      - ./replica3/conf:/usr/local/etc/redis
    ports:
      - "8003:6379"
    command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    networks:
      redis-sharding:
        ipv4_address: 172.30.2.23


需要注意以下几点

  • 这里自定义了bridge子网并限定了范围,如果该范围已经被使用,请更换。
  • 这里没有对data进行-v挂载,如果要挂载,请注意宿主机对应文件夹权限问题。

随后运行

docker-compose -p redis-sharding up -d

在这里插入图片描述

三、构建集群

接下来所有命令都在master1容器的命令行执行

1. 自动分配主从关系

这个命令会创建了一个集群,包括三个主节点和三个从节点,每个主节点分配一个从节点作为副本,前3个ip为主节点,后3个为从节点,主节点的从节点随机分配。

redis-cli --cluster create 172.30.2.11:6379 172.30.2.12:6379 172.30.2.13:6379 172.30.2.21:6379 172.30.2.22:6379 172.30.2.23:6379 --cluster-replicas 1

如果希望手动指定主从关系,看下面,否则你可以跳过这一章节了。

2.1 构建3 master集群

redis-cli --cluster create 172.30.2.11:6379 172.30.2.12:6379 172.30.2.13:6379 --cluster-replicas 0

2.2 手动配置从节点

查看3个主节点的ID

redis-cli -h 172.30.2.11 -p 6379 cluster nodes

下面3个命令会将3个从节点加入集群中,其中172.30.2.11可以是三个主节点的任意一个。

redis-cli -h 172.30.2.21 -p 6379 cluster meet 172.30.2.11 6379
redis-cli -h 172.30.2.22 -p 6379 cluster meet 172.30.2.11 6379
redis-cli -h 172.30.2.23 -p 6379 cluster meet 172.30.2.11 6379

然后为每个从节点指定主节点。

redis-cli -h 172.30.2.21 -p 6379 cluster replicate <master-ID>
redis-cli -h 172.30.2.22 -p 6379 cluster replicate <master-ID>
redis-cli -h 172.30.2.23 -p 6379 cluster replicate <master-ID>

四、测试

1. 集群结构

可以通过以下命令查看集群中每个节点的id、角色、ip、port、插槽范围等信息

 redis-cli -h 172.30.2.11 -p 6379 cluster nodes

2. 分片测试

往集群存入4个键值

redis-cli -c -h 172.30.2.11 -p 6379 set key1 value1
redis-cli -c -h 172.30.2.11 -p 6379 set key2 value2
redis-cli -c -h 172.30.2.11 -p 6379 set key3 value3
redis-cli -c -h 172.30.2.11 -p 6379 set key4 value4

查看每个主节点现有的键值,会发现每个节点只有一部分键值。

redis-cli -h 172.30.2.11 -p 6379 --scan
redis-cli -h 172.30.2.12 -p 6379 --scan
redis-cli -h 172.30.2.13 -p 6379 --scan
  • 32
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用docker-compose部署Redis集群的步骤: 1.创建一个目录,例如redis-cluster,并在该目录中创建一个docker-compose.yaml文件。 2.在docker-compose.yaml文件中编写以下内容: ```yaml version: '3' services: redis-1: image: redis:6.0.9 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf ports: - "6379" networks: - redis-cluster redis-2: image: redis:6.0.9 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf ports: - "6380" networks: - redis-cluster redis-3: image: redis:6.0.9 command: redis-server /usr/local/etc/redis/redis.conf volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf ports: - "6381" networks: - redis-cluster networks: redis-cluster: driver: bridge ``` 3.在redis-cluster目录中创建一个redis.conf文件,并将以下内容复制到文件中: ```conf bind 0.0.0.0 port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes requirepass 1111 masterauth 1111 ``` 4.在终端中导航到redis-cluster目录,并运行以下命令启动Redis集群: ```shell docker-compose up -d ``` 5.使用以下命令进入redis-1容器: ```shell docker exec -it redis-cluster_redis-1_1 /bin/bash ``` 6.在redis-1容器中,使用以下命令创建Redis集群: ```shell redis-cli --cluster create 172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379 --cluster-replicas 0 ``` 7.现在,您已经成功地使用docker-compose部署Redis集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值