# 如何使用redis-trib.rb搭建集群
## 前言
Redis Cluster是Redis官方提供的分布式解決方案,通過數據分片(sharding)實現水平擴展。`redis-trib.rb`是Redis官方提供的集群管理工具(Ruby編寫),雖然Redis 5.0后推薦使用`redis-cli --cluster`,但了解傳統方式仍有價值。本文將詳細介紹使用`redis-trib.rb`搭建Redis集群的全過程。
---
## 環境準備
### 1. 基礎要求
- 至少**3個主節點**(正式環境建議每個主節點配1個從節點,共6節點)
- 每個節點需開啟**集群模式**(`cluster-enabled yes`)
- 確保節點間**端口互通**(通常需開放數據端口+10000的集群總線端口)
### 2. 軟件依賴
```bash
# 安裝Ruby和Redis gem
sudo apt-get install ruby # Ubuntu/Debian
sudo yum install ruby # CentOS/RHEL
gem install redis -v 3.3.5 # 注意版本兼容性
修改每個節點的redis.conf:
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
daemonize yes
啟動所有節點:
redis-server /path/to/redis.conf
# 基本命令格式
./redis-trib.rb create --replicas 1 \
192.168.1.101:6379 \
192.168.1.102:6379 \
192.168.1.103:6379 \
192.168.1.104:6379 \
192.168.1.105:6379 \
192.168.1.106:6379
參數說明:
- --replicas 1:每個主節點配1個從節點
- 前3個IP會被默認設為主節點
執行后會顯示分片方案,輸入yes確認:
>>> Creating cluster
>>> Performing hash slots allocation...
M: 2936f3... 192.168.1.101:6379
slots:0-5460 (5461 slots)
M: e3c7d9... 192.168.1.102:6379
slots:5461-10922 (5462 slots)
M: 43a1a8... 192.168.1.103:6379
slots:10923-16383 (5461 slots)
S: 1b2e3f... 192.168.1.104:6379
replicates 2936f3...
Can I set the above configuration? (type 'yes' to accept): yes
# 檢查集群狀態
./redis-trib.rb check 192.168.1.101:6379
# 輸出關鍵信息示例
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 添加主節點
./redis-trib.rb add-node new_host:6379 existing_host:6379
# 添加從節點(需指定主節點ID)
./redis-trib.rb add-node --slave --master-id <master-id> new_host:6379 existing_host:6379
./redis-trib.rb reshard existing_host:6379
按提示輸入:
- 遷移的slot數量(如1000)
- 目標節點ID
- 源節點ID(輸入all從所有節點平均遷移)
手動關閉某個主節點,觀察從節點是否自動接替:
redis-cli -h 192.168.1.101 -p 6379 DEBUG SEGFAULT
若報錯redis requires Ruby version >= 2.3.0:
# 使用RVM管理Ruby版本
curl -sSL https://get.rvm.io | bash -s stable
rvm install 2.6
rvm use 2.6 --default
檢查:
- 防火墻是否開放端口(數據端口和集群總線端口)
- 配置文件是否設置bind 0.0.0.0
- 日志中的錯誤信息(/var/log/redis/redis.log)
若出現[ERR] Not all 16384 slots are covered:
# 手動修復未分配的slot
./redis-trib.rb fix existing_host:6379
監控工具:
redis-cli --cluster info查看簡要狀態CLUSTER NODES命令獲取詳細拓撲備份策略: “`bash
redis-cli -h
# 定期備份AOF/RDB文件 cp /var/lib/redis/dump.rdb /backup/
3. **版本升級**:
- 先升級從節點,再手動故障轉移升級主節點
- 確保所有節點版本一致
---
## 總結
通過`redis-trib.rb`工具,我們能夠快速搭建和管理Redis集群。雖然新版本推薦使用`redis-cli --cluster`,但理解底層原理對運維復雜集群至關重要。建議在生產環境中:
- 使用至少6節點(3主3從)保證高可用
- 定期檢查集群狀態和slot分布
- 做好監控和報警設置
> 注意:Redis 5+用戶可直接使用`redis-cli --cluster create`命令,其參數與`redis-trib.rb`基本一致。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。