Windows上利用docker搭建Redis分片集群

分片集群需要的节点数量较多,本文将搭建一个最小的分片集群,包含3个master节点,每个master跟着一个slave节点。
最终会用docker开启6个redis实例,模拟分片集群,信息如下:

节点IP宿主机的映射端口容器内端口角色
master-1172.31.0.1180016379master
master-2172.31.0.1280026379master
master-3172.31.0.1380036379master
slave-1172.31.0.2190016379slave
slave-2172.31.0.2290026379slave
slave-3172.31.0.2390036379slave

Windows上利用docker搭建Redis分片集群(三主三从):

  1. 拉取最新的redis镜像

    docker pull redis:latest
    
  2. 在本机上某位置新建文件夹docker_redis/master-1/confdocker_redis/master-2/confdocker_redis/master-3/confdocker_redis/slave-1/confdocker_redis/slave-2/confdocker_redis/slave-3/conf存放这六个redis节点的配置文件

  3. 拷贝一份redis配置文件redis.conf到刚刚创建的各个节点的conf目录下

    redis.conf可以在官方的基础上修改,主要改以下几点:

    port 6379
    # 开启集群功能
    cluster-enabled yes
    # 集群的配置文件名称,不需要我们创建,由redis自己维护
    cluster-config-file nodes.conf
    # 节点心跳失败的超时时间
    cluster-node-timeout 5000
    cluster-announce-ip 172.31.0.11
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    # 绑定地址
    bind 0.0.0.0
    # 注册的实例ip
    replica-announce-ip 172.31.0.11
    # 保护模式
    protected-mode no
    # 数据库数量
    databases 1
    

    其它节点只需将这个redis.conf复制到自己的conf目录下即可,然后修改cluster-announce-ipreplica-announce-ip为自己的IP地址即可。

    注意:对于从节点不要在配置文件中配置replicaof,否则启动容器时会报错replicaof directive not allowed in cluster mode

  4. 创建docker网络,记得设置子网,子网要与配置文件中redis节点的IP保持一致

    关于docker的网络模式和容器间的网络通信可以看这篇文章

    docker network create --subnet 172.31.0.0/16 redis-net
    
  5. docker启动六个redis实例容器,并分别将本机的8001、8002等端口映射到每个容器的6379端口,创建时将宿主机上的配置文件夹挂载到redis容器中

    docker run -p 8001:6379 -p 18001:16379 --name master-1 -v D:\docker_redis\master-1\conf:/etc/redis --net redis-net --ip 172.31.0.11 -d redis redis-server /etc/redis/redis.conf
    
    docker run -p 8002:6379 -p 18002:16379 --name master-2 -v D:\docker_redis\master-2\conf:/etc/redis --net redis-net --ip 172.31.0.12 -d redis redis-server /etc/redis/redis.conf
    
    docker run -p 8003:6379 -p 18003:16379 --name master-3 -v D:\docker_redis\master-3\conf:/etc/redis --net redis-net --ip 172.31.0.13 -d redis redis-server /etc/redis/redis.conf
    
    
    docker run -p 9001:6379 -p 19001:16379 --name slave-1 -v D:\docker_redis\slave-1\conf:/etc/redis --net redis-net --ip 172.31.0.21 -d redis redis-server /etc/redis/redis.conf
    
    docker run -p 9002:6379 -p 19002:16379 --name slave-2 -v D:\docker_redis\slave-2\conf:/etc/redis --net redis-net --ip 172.31.0.22 -d redis redis-server /etc/redis/redis.conf
    
    docker run -p 9003:6379 -p 19003:16379 --name slave-3 -v D:\docker_redis\slave-3\conf:/etc/redis --net redis-net --ip 172.31.0.23 -d redis redis-server /etc/redis/redis.conf
    

    请添加图片描述

    注意:

    • 每个容器的IP要与它们在配置文件中设置的IP相同

    • 将宿主机上的conf文件夹挂载到容器内,防止容器关闭后配置丢失。注意这里不要直接挂载配置文件,否则可能导致哨兵没有写入配置文件的权限, 在日志中会报WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy.,因此要采用直接挂载文件夹的形式

    • 创建时不要挂载data文件夹,后续可能会出现Failed trying to load the MASTER synchronization DB from disk的错误,主从同步也会失败(暂不清楚原因)

    虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。

    我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。

  6. 创建集群(Redis5.0以后)

    • 进入任一个redis容器的终端,这里选择在master-1的终端

      docker exec -it master-1 bash
      
    • 将这六个redis节点建立一个集群,需要传入所有节点的IP及端口号

      redis-cli --cluster create --cluster-replicas 1 172.31.0.11:6379 172.31.0.12:6379 172.31.0.13:6379 172.31.0.21:6379 172.31.0.22:6379 172.31.0.23:6379 
      

      命令说明:

      • redis-cli --cluster:代表集群操作命令
      • create:代表是创建集群
      • --cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master(这里也看出分片集群中的主从关系不是在从节点的配置文件中配置replicaof,而是给定每个master的副本数量后自动计算master个数然后随机分配slave)

      请添加图片描述

    • 集群建立成功,可以执行如下命令查看集群信息

      先连接redis:

      redis-cli -c
      

      查看集群信息:

      cluster info
      

      查看集群节点信息:

      cluster nodes
      

      请添加图片描述

  7. 测试

    • 在集群中任意一个节点连接redis

      redis-cli -c
      

      注意这里得用redis-cli -c而不能用redis-cli

    • 无论在哪个节点上执行存或取,都会先计算插槽值,然后重定向到负责该插槽的节点上去。
      请添加图片描述

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过docker搭建Redis集群的步骤如下: 1. 创建容器:使用docker命令创建多个Redis容器,每个容器代表一个节点。例如,可以使用以下命令创建一个名为redis-node-1的节点容器: ``` docker run --name redis-node-1 -p 6381:6379 -d redis ``` 2. 进入容器:使用docker exec命令进入容器内部,例如,可以使用以下命令进入redis-node-1容器: ``` docker exec -it redis-node-1 /bin/bash ``` 3. 构建集群关系:在容器内部,使用Redis命令行工具,将新增的节点作为master节点加入原集群。例如,可以使用以下命令将节点redis-node-7加入集群: ``` redis-cli -p 6381 cluster add-node <new_node_ip:port> <existing_node_ip:port> ``` 4. 查看集群状态:使用Redis命令行工具查看集群的状态。例如,可以使用以下命令在节点redis-node-1上查看集群信息: ``` redis-cli -p 6381 cluster info ``` 通过以上步骤,你可以使用docker搭建Redis集群,并查看集群的状态。请根据实际情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [阿昌教你通过docker搭建Redis集群](https://blog.csdn.net/qq_43284469/article/details/122458602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值