1.概述
我們在部署 tendis 集羣的時候,我們需要準備 6台機器,3主三從,當然 我們可以將他們部署同一台機器上,只要端口不一樣就可以。
我們準備 6個文件夾
端口分別從 7001到 7006
2. 構建過程
2.1.準備6個文件夾
tendis1
tendis2
tendis3
tendis4
tendis5
tendis6
文件夾下放
start.sh
stop.sh
tendisplus.conf
這些文件從 tendis 的 script copy 出來
需要修改
stop.sh
ip=127.0.0.1
port=7001
echo shutdown |../bin/redis-cli -h ${ip} -p ${port}
這個文件修改端口即可
tendisplus.conf ,這個文件也是
port 7001
daemon on
loglevel notice
logdir ./home/log
dumpdir ./home/dump
dir ./home/db
pidfile ./home/tendisplus.pid
slowlog ./home/log/slowlog
rocks.blockcachemb 4096
executorThreadNum 48
cluster-enabled yes
這個文件也是修改端口和是否開啓集羣
2.2.編寫批處理一次性啓動6個節點
- 啓動節點
#!/bin/bash
echo "Starting all Tendis instances..."
# 循環處理 tendis1 到 tendis6
for i in {1..6}; do
dir="tendis${i}"
if [[ -d "$dir" ]]; then
echo "----------------------------------------"
echo "Processing $dir..."
# 進入目錄,執行腳本,然後返回 (pushd/popd 是另一種方式)
( cd "$dir" && echo "In directory: $(pwd)" && ./start.sh )
if [[ $? -eq 0 ]]; then
echo "Started $dir successfully."
else
echo "Failed to start $dir."
fi
else
echo "Directory $dir not found, skipping."
fi
done
echo "----------------------------------------"
echo "All Tendis instance start commands issued."
這樣我們可以一次性啓動 6個節點
- 停止節點
#!/bin/bash
echo "Stoping all Tendis instances..."
# 循環處理 tendis1 到 tendis6
for i in {1..6}; do
dir="tendis${i}"
if [[ -d "$dir" ]]; then
echo "----------------------------------------"
echo "Processing $dir..."
# 進入目錄,執行腳本,然後返回 (pushd/popd 是另一種方式)
( cd "$dir" && echo "In directory: $(pwd)" && ./stop.sh )
if [[ $? -eq 0 ]]; then
echo "stop $dir successfully."
else
echo "Failed to stop $dir."
fi
else
echo "Directory $dir not found, skipping."
fi
done
echo "----------------------------------------"
echo "All Tendis instance stop commands issued."
2.3 節點握手
當6個節點啓動後,我們可以連到 節點1 和其他的節點握手
連接節點1
redis-cli -p 7001
分別執行
cluster meet 127.0.0.1 7002
cluster meet 127.0.0.1 7003
cluster meet 127.0.0.1 7004
cluster meet 127.0.0.1 7005
cluster meet 127.0.0.1 7006
2.4 分配slots
默認情況下,Tendis存儲版跟Redis一樣,將所有的數據映射到16384個slot中,每個key都會對應一個槽。只有把slot分配給了Tendis節點,Tendis節點才能響應與slot相關的命令,否則就會返回move錯誤。
分配slots可使用cluster addslots指令
我們分別將 1,3,5 節點分配 solt
分別登錄 7001,7003,7005
連接後分別執行
cluster addslots {0..5461}
cluster addslots {5462..10922}
cluster addslots {10923..16383}
2.5 配置主從複製
我們將1,3,5 作為主節點,2,4,6 作為從 節點
我們先查看節點
登錄節點1 執行命令
cluster nodes
看到節點
9474f3e26932126611bf00940ac06fbe9ceb1940 127.0.0.1:7003@17003 master - 0 1763797462000 0 connected 5462-10922
88419aaa88393e14da923f65795266c076cb71f7 127.0.0.1:7001@17001 myself,master - 0 1763797462000 2 connected 0-5461
3dba50eb72c1790fb0109795d92b24457b33e406 127.0.0.1:7005@17005 master - 0 1763797462634 4 connected 10923-16383
8200c98af4c657a681bbd1582a22fc06a86e6c07 127.0.0.1:7004@17004 slave 9474f3e26932126611bf00940ac06fbe9ceb1940 0 1763797461000 3 connected
3b5b89b032a8dc9c1c232da4ee03e1725c750e7a 127.0.0.1:7002@17002 slave 88419aaa88393e14da923f65795266c076cb71f7 0 1763797461579 2 connected
00aa76b24d4d43f48b81893438350914fc10fc1a 127.0.0.1:7006@17006 slave 3dba50eb72c1790fb0109795d92b24457b33e406 0 1763797463680 5 connected
這個是我配置好了的情況,如果沒有配置主從的話 6個節點都是主節點。
我們分別登錄 2,4,5 執行命令
cluster replicate 4233f87b9899774feb71bcef1cfeec964de0535b
cluster replicate 這裏是主節點的ID
2.6 測試
我們可以登錄其中的某個節點
執行 set 命令,可以看到他會將key 分佈到不同的節點上。
我們連接 tendis 時 需要使用如下命令
./redis-cli -c -p 端口
:~/tendis/tendisplus/bin$ ./redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7003
"小李"
這樣集羣就配置完成了。
3.部署單實例
比如啓動兩個實例 比如 端口為 8001,8002
我們使用 8001 作為主實例
執行命令將 8002 作為複製實例
slaveof localhost 8001
# 將節點不作為 從實例
slaveof no one
比如我們需要切換主從可以這樣做。
切換 8002 為主服務
slave no one
# 將 8001 作為從服務
flush all
slaveof localhost 8002