1.概述

我们在部署 tendis 集群的时候,我们需要准备 6台机器,3主三从,当然 我们可以将他们部署同一台机器上,只要端口不一样就可以。
我们准备 6个文件夹
端口分别从 7001到 7006

构建过程

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
"小李"

这样集群就配置完成了。

posted on 2025-11-22 15:51  自由港  阅读(0)  评论(0)    收藏  举报