docker-compose搭建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 列出槽位、節點信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM