如何在 Linux 上設定 Redis Cluster
在現代應用程式架構中,資料的吞吐量與可用性至關重要。當單一 Redis 執行個體無法負載日益增長的請求,或需要確保在節點故障時服務不中斷,Redis Cluster 便成為首選解決方案。它提供了內建的資料分片(Sharding)與高可用性機制,讓分散式快取變得簡單易用。
本文將帶領中階 Linux 使用者,在 Ubuntu 22.04 或 Debian 12 環境上,手動部署一個包含 6 個節點(3 Master + 3 Replica)的 Redis Cluster。
環境準備與依賴安裝
首先,我們需要確保系統已安裝 Redis 伺服器。雖然 Redis Cluster 功能內建於 Redis 5.0 以上版本,但為了教學清晰,我們將使用預設的二進位檔進行設定。
在終端機中執行以下指令安裝 Redis:
sudo apt update
sudo apt install redis-server -y
安裝完成後,暫時停止 Redis 服務,因為我們將手動管理多個執行個體:
sudo systemctl stop redis-server
sudo systemctl disable redis-server
建立節點目錄結構
Redis Cluster 每個節點都需要獨立的埠號、資料目錄與設定檔。為了簡化管理,我們將建立 6 個目錄,分別對應埠號 7000 到 7005。
執行以下指令建立目錄結構:
for port in $(seq 7000 7005); do \
mkdir -p /etc/redis/cluster/$port \
touch /etc/redis/cluster/$port/redis.conf; \
done
撰寫節點設定檔
接下來,我們需要為每個節點撰寫專屬的 redis.conf。核心設定包括埠號、啟用 Cluster 模式、設定 Cluster 節點檔案名稱以及關閉保護模式。
我們可以使用 Shell 迴圈自動生成設定檔內容,確保一致性:
for port in $(seq 7000 7005); do
cat <<EOF > /etc/redis/cluster/$port/redis.conf
port $port
cluster-enabled yes
cluster-config-file nodes-$port.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
daemonize yes
pidfile /var/run/redis/redis-$port.pid
dir /etc/redis/cluster/$port
logfile /var/log/redis/redis-$port.log
bind 0.0.0.0
EOF
done
這裡的重點參數說明:
cluster-enabled yes:啟用 Cluster 模式。cluster-config-file:Cluster 狀態的內部檔案,由 Redis 自動維護,勿手動編輯。protected-mode no:為了讓節點間能互相通訊,教學環境中暫時關閉保護模式(生產環境應使用防火牆規則控制)。bind 0.0.0.0:監聽所有網路介面。
啟動所有節點
設定檔準備就緒後,我們可以批次啟動所有 Redis 節點。請確保 /var/run/redis 目錄存在且具有正確權限:
sudo mkdir -p /var/run/redis
sudo chown redis:redis /var/run/redis
for port in $(seq 7000 7005); do
sudo -u redis redis-server /etc/redis/cluster/$port/redis.conf
done
啟動後,我們可以檢查節點是否成功運行:
ps aux | grep redis-server
若看到 6 個不同埠號的 Redis 程序,表示啟動成功。
組建 Redis Cluster
現在,所有節點都是獨立運作的。我們需要使用 Redis 提供的 CLI 工具 redis-cli 將它們組合成一個 Cluster。Redis 7.0 之後,建議使用 --cluster create 參數,它會自動處理 Master 與 Replica 的分配。
執行以下指令,將 6 個節點加入 Cluster:
redis-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
執行後,終端機會顯示節點配置摘要,並詢問是否確認。輸入 yes 並按下 Enter。Redis 會自動將前 3 個節點設為 Master,後 3 個設為對應的 Replica。
驗證 Cluster 狀態
組建完成後,我們可以使用 cluster info 和 cluster nodes 指令來驗證狀態。
檢查 Cluster 是否健康運作:
redis-cli -p 7000 cluster info
若看到 cluster_state:ok,表示 Cluster 運作正常。
查看節點角色與連線狀態:
redis-cli -p 7000 cluster nodes
您應該會看到類似以下的輸出,顯示每個節點的 ID、IP、埠號以及角色(master 或 slave):
a1b2c3d4... 127.0.0.1:7000@17000 master - 0 1620000000000 1 connected
e5f6g7h8... 127.0.0.1:7001@17001 master - 0 1620000000000 2 connected
...
常見問題與排解
1. 無法連線到 Cluster 節點
若執行 cluster create 時出現 CLUSTERDOWN 或連線逾時,通常是因為防火牆阻擋了資料埠(17000+)。Redis Cluster 除了設定埠外,還需要開放 設定埠 + 10000 的通訊埠。
解決方法:在 Ubuntu 上使用 UFW 開放範圍:
sudo ufw allow 7000:7005/tcp
sudo ufw allow 17000:17005/tcp
2. 節點啟動失敗或權限錯誤
若節點無法啟動,檢查 /var/log/redis/ 下的 log 檔。常見原因是 redis 使用者對設定目錄或資料目錄無寫入權限。
解決方法:確保目錄所有者為 redis:
sudo chown -R redis:redis /etc/redis/cluster/
sudo chown -R redis:redis /var/log/redis/
小結
透過上述步驟,我們成功在單一 Linux 主機上部署了一個具備高可用性與資料分片能力的 Redis Cluster。這種手動部署方式適合學習與測試環境。在生產環境中,建議使用 Ansible 或 Kubernetes Operator 進行自動化部署,並搭配雲端負載平衡器以處理節點故障轉移。Redis Cluster 的強大之處在於其透明性,應用程式只需連線到任意節點,Redis 會自動處理資料路由,讓分散式快取架構變得輕鬆可靠。