• dockercompose搭建redis集群Cluster模式


    docker-compose搭建Redis高可用架构,在这篇文章中,我搭建了一套redis集群。
    但是有个问题就是,我的宿主机无法正常访问该集群,
    所以,我对原来的方案进行了调整。

    docker-compose.yml

    version: '3.8'
    services:
      redis-node-master-1:
        image: redis:5.0.14
        container_name: cluster-redis-1
        ports:
          - 6381:6379
          - 16381:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6381 \
          --cluster-announce-bus-port 16381"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis1:/data
      redis-node-master-2:
        image: redis:5.0.14
        container_name: cluster-redis-2
        ports:
          - 6382:6379
          - 16382:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6382 \
          --cluster-announce-bus-port 16382"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis2:/data
      redis-node-master-3:
        image: redis:5.0.14
        container_name: cluster-redis-3
        ports:
          - 6383:6379
          - 16383:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6383 \
          --cluster-announce-bus-port 16383"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis3:/data
      redis-node-slave-1:
        image: redis:5.0.14
        container_name: cluster-redis-1-slave
        ports:
          - 6384:6379
          - 16384:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6384 \
          --cluster-announce-bus-port 16384"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis1-slave:/data
      redis-node-slave-2:
        image: redis:5.0.14
        container_name: cluster-redis-2-slave
        ports:
          - 6385:6379
          - 16385:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6385 \
          --cluster-announce-bus-port 16385"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis2-slave:/data
      redis-node-slave-3:
        image: redis:5.0.14
        container_name: cluster-redis-3-slave
        ports:
          - 6386:6379
          - 16386:16379
        command: "redis-server --requirepass abc123 --masterauth abc123 --appendonly yes \
          --cluster-enabled yes \
          --cluster-config-file nodes.conf \
          --cluster-node-timeout 15000 \
          --cluster-announce-ip 10.24.99.61 \
          --cluster-announce-port 6386 \
          --cluster-announce-bus-port 16386"
        volumes:
          - F:\DockerCluster\redis\cluster\data\redis3-slave:/data
    

    重点关注这三个属性:

    1. --cluster-announce-ip 10.24.99.61
    2. --cluster-announce-port 6381
    3. --cluster-announce-bus-port 16381

    在没有加之前,通过 cluster nodes 看到的是这样的:

    加了这三个属性后,结果是这样的:

    这个 ip 填什么?我是在 CMD 中使用 ipconfig 打印出网卡信息,然后选择一个 IPv4 地址。

    cluster meet

    登入 cluster-redis-1 容器:

    docker exec -it cluster-redis-1 /bin/bash
    

    接着,使用 redis-cli 命令进入 Redis客户端,再执行以下命令:

    cluster meet 10.24.99.61 6382
    cluster meet 10.24.99.61 6383
    cluster meet 10.24.99.61 6384
    cluster meet 10.24.99.61 6385
    cluster meet 10.24.99.61 6386
    

    如图所示:

    执行后,在 cluster-redis-1 容器内的 Redis 客户端使用 cluster nodes:

    登入 cluster-redis-2 容器,执行类似的操作,也能得到差不多的结果:

    如果登入其他容器,只看到一条记录而不是 6 条记录,那么它们之间的连通性可能就有问题了。

    删除操作:
    cluster forget :从集群中移除指定的节点,这样就无法完成握手,过期时间为60s,60s后两节点又会继续完成握手。

    cluster replicate

    接着就是设置主从关系了,这个命令要进入 cluster-redis-1 容器,在打开的 Bash 中执行:

    redis-cli -h 10.24.99.61 -p 6384 -a abc123 cluster replicate 511fd258afa09ee6070a2145f3083876a5fc852d
    redis-cli -h 10.24.99.61 -p 6385 -a abc123 cluster replicate 6673e34cf2ed0b687236339e2c7d92b8057a8749
    redis-cli -h 10.24.99.61 -p 6386 -a abc123 cluster replicate 762ba770812f5f6ef0995717dd4b47eec3080558
    

    cluster addslots

    最后,就是分配槽位了,这个命令要进入 cluster-redis-1 容器,在打开的 Bash 中执行,:

    redis-cli -h 10.24.99.61 -p 6381 -a abc123 cluster addslots {0..5500}
    redis-cli -h 10.24.99.61 -p 6382 -a abc123 cluster addslots {5501..11000}
    redis-cli -h 10.24.99.61 -p 6383 -a abc123 cluster addslots {11001..16383}
    

    使用 cluster info 检查一下集群信息槽是否都已经分配了:

    cluster:fail,可能是你还没有分配槽,或者 16384 个槽位没有全部分配出去。

    删除操作:
    cluster delslots slot [slot...] 删除一个或者多个槽(仅对当前节点有效)
    查询操作:
    cluster slots 列出槽位、节点信息。

  • 相关阅读:
    PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现
    PHP message:filesize(): stat failed for 错误
    laravel 数据验证规则
    Laravel修改验证提示信息为中文
    laravel 根据字段不同值做不同查询
    Laravel 报错: Dotenv values containing spaces must be surrounded by quotes.
    Laravel 自定命令以及生成文件
    什么是phpize及其用法
    在centos7下安装gitlab-runner
    php 23种设计模型
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/15826862.html
Copyright © 2020-2023  润新知