Create Redis Cluster Using Docker
在這份文件中,我們將使用 Docker Compose、Dockerfile 以及 Shell 腳本來建立一個 Redis Cluster。以下是相關的設定檔案和步驟。
1. Docker Compose 設定 (docker-compose.yml)
docker-compose.yml)定義一個包含 Redis Cluster 的 Docker Compose 服務:
version: '3.7'
services:
redis1:
image: i_redis_node_1
build:
context: ./DockerFile
dockerfile: redis.Dockerfile
container_name: redis-node1
ports:
- "${NODE_1_PORT}:${NODE_1_PORT}"
- "${NODE_1_BUS_PORT}:${NODE_1_BUS_PORT}"
environment:
NODE_NO: 1
EXTERNAL_IP: ${EXTERNAL_IP}
PORT: ${NODE_1_PORT}
BUS_PORT: ${NODE_1_BUS_PORT}
volumes:
- ./data/node1:/data
healthcheck:
test: [ "CMD", "redis-cli", "-p", "7001", "cluster", "info" ]
interval: 1s
timeout: 3s
retries: 30
# 其他 redis2 到 redis6 的節點與相同配置類似
redis-cluster-creator:
image: redis
entrypoint: [/bin/sh,-c,'echo "yes" | redis-cli --cluster create redis1:7001 redis2:7002 redis3:7003 redis4:7004 redis5:7005 redis6:7006 --cluster-replicas 1']
depends_on:
redis1:
condition: service_healthy
# 其他 redis2 到 redis6 的節點與相同配置類似這份檔案定義了七個服務:
redis1到redis6: 每個服務代表 Redis Cluster 中的一個節點,包括了映像、構建配置、容器名稱、端口映射、環境變數、數據卷、健康檢查等設定。redis-cluster-creator: 這個服務負責創建 Redis Cluster。它使用 Redis 映像,並在啟動時使用 entrypoint 腳本建立集群。此服務的健康檢查依賴於所有其他節點的健康狀態。一旦所有節點健康,該服務就會執行創建 Redis Cluster 的命令。
環境變數部分包括:
NODE_NO: 節點編號。EXTERNAL_IP: 節點的外部 IP。PORT: 節點端口。BUS_PORT: Redis Cluster 總線通訊使用的端口。
環境變數檔案 golbal.env.local
2. Dockerfile (Dockerfile)
Dockerfile)這份 Dockerfile 用於構建 Redis 映像,以下是對檔案內容的詳細解釋:
FROM redis:latest: 這一行指定了基礎映像。在這種情況下,redis:latest表示使用最新版本的 Redis 映像作為基礎。COPY conf/base_redis.conf /base_redis.conf: 這行複製本地機器上的conf/base_redis.conf文件到映像的/base_redis.conf路徑。這是為了將預先配置的 Redis 配置文件添加到映像中。COPY replaceConf.sh /replaceConf.sh: 這行複製本地機器上的replaceConf.sh腳本到映像的/replaceConf.sh路徑。這是一個腳本,將替換 Redis 配置文件中的特定變數。CMD ["/replaceConf.sh"]: 這一行設定了容器啟動時要執行的默認命令。在這種情況下,它執行replaceConf.sh腳本。這確保了在容器啟動時會應用對配置文件的修改。
而 base_redis.conf 其實有針對 cluster 設定做了一些調整,後續的 replaceConf.sh 會根據特定字串進行取代動作。
Dockerfile 用於構建一個基於最新版本的 Redis 映像,並向其中添加了一些特定的配置文件和腳本,以定制 Redis 的行為。
3. Shell 腳本 (replaceConf.sh)
replaceConf.sh)腳本用於替換 Redis 配置文件中的特定變數,然後啟動 Redis 服務。
#!/bin/bash: 這是腳本的 shebang 行,指定了使用 Bash 解釋器執行腳本。nodeNumber=$NODE_NO到busPort=$BUS_PORT: 這一系列的行讀取了環境變數,其中包括 Node 的編號 (NODE_NO)、外部 IP (EXTERNAL_IP)、Port (PORT) 以及 Bus Port (BUS_PORT)。echo "nodeNumber:"$nodeNumber ", port:" $port ", busPort:" $busPort ", externalIp:" $externalIp: 這行用於在執行腳本時輸出上述讀取的變數值,以便於調試。input_file="/base_redis.conf"和output_file="/data/redis.conf": 這裡定義了原始 Redis 配置文件的路徑 (input_file) 和新配置文件的路徑 (output_file)。sed -e ...: 這一行使用sed工具來進行文件替換。具體而言,它通過-e選項指定了一系列替換操作,替換了配置文件中的一些占位符。例如,_port會被替換為實際的 Port 數值。"$input_file" > "$output_file": 這行將替換後的內容寫入到新的配置文件中。echo "replace complates": 這是一條輸出訊息,表示替換過程完成。redis-server $output_file: 最後一行啟動 Redis 服務,使用修改後的配置文件。
這個腳本的作用是根據環境變數替換 Redis 配置文件中的特定變數,然後使用修改後的配置文件啟動 Redis 服務。
4. 啟動測試
最後目錄結構
執行docker-compose
查看 redis-cluster-creator log
附件
System Structure
以上配置將建立一個包含多個 Redis 節點的 Redis Cluster,每個節點都將在不同的端口上運行。通過 Docker Compose 可以簡化整個 Redis Cluster 的建置和配置過程,這樣就可以自行在本機模擬不同環境Redis Server 的配置。
GitHub:前往
Last updated