在本地部署 redis cluster
2022, Aug 02
Redis 是一個常用來作為暫存資料的記憶體資料庫,由於是資料是在記憶體操作的因此斷電就會遺失資料,為求穩定大型系統都會有 cluster 的建置防止單點錯誤,一般來說 cluster 會把不同的 node 建立在不同的機器上,這篇是為了在本地進行測試才會在本地建置環境
事前準備
- redis 的命令列工具: redis-cli, redis-server
- redis cluster node 的設定檔:
# rediscluster.conf
cluster-enabled yes
cluster-config-file node.conf
cluster-node-timeout 5000
protected-mode no
appendonly yes
直接建 redis cluster 在本地
由於 redis server 啟動時會在目錄下建立各種設定跟暫存資料,所以不同的 redis server 必須在不同的目錄啟動
我自己的目錄結構如下:
├─7001
├─7002
├─7003
├─7002
├─7004
├─7005
└─rediscluster.conf
目錄名稱代表的是 node 的 port 這樣比較好區分,需要用到 6 個 node 的原因是 cluster 的最小基數是 3,而每個 cluster node 必須要有至少一個 replica,所以最低需要有 6 個 node
接著 cd
到每個目錄下執行下面指令:
redis-server ../rediscluster.conf --port 7001 --cluster-announce-bus-port 17001 --daemonize yes
記得 port 要每個目錄不一樣,執行完之後用下面指令確認一下有沒有正確跑起來
ps -aux | grep redis
這時候雖然每個 redis server 都已經起來了,但他們彼此並不知道對方的存在,cluster 還沒有建立起來,這時候需要進行一個初始化
echo "yes" | redis-cli --cluster create 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 \
127.0.0.1:7006 --cluster-replicas 1
看到下面訊息的話表示初始化成功了
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
這個時候可以實際來操作看看能不能運行,操作下面指令
redis-cli -p 7001 -c cluster info # 查看 cluster 狀態
redis-cli -p 7001 -c cluster nodes # 查看 cluster 的 node
info
可以用來確認 cluster 有沒有運行成功,確認一下cluster_state:ok
以及cluster_known_nodes:6
是正確的nodes
則可以看到 cluster 內的 node 有哪些,確認所有的 node 都在裡面,也可以看到哪些是 master 哪些是 slave
然後可以用下面指令連接到 cluster 進行操作
redis-cli -p 7001 -c
之後的 set get 的操作就跟單台 redis 沒有兩樣了