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/bashecho "Starting all Tendis instances..."# 循环处理 tendis1 到 tendis6
for i in {1..6}; dodir="tendis${i}"if [[ -d "$dir" ]]; thenecho "----------------------------------------"echo "Processing $dir..."# 进入目录,执行脚本,然后返回 (pushd/popd 是另一种方式)( cd "$dir" && echo "In directory: $(pwd)" && ./start.sh )if [[ $? -eq 0 ]]; thenecho "Started $dir successfully."elseecho "Failed to start $dir."fielseecho "Directory $dir not found, skipping."fi
doneecho "----------------------------------------"
echo "All Tendis instance start commands issued."
这样我们可以一次性启动 6个节点
- 停止节点
#!/bin/bash
echo "Stoping all Tendis instances..."
# 循环处理 tendis1 到 tendis6
for i in {1..6}; dodir="tendis${i}"if [[ -d "$dir" ]]; thenecho "----------------------------------------"echo "Processing $dir..."# 进入目录,执行脚本,然后返回 (pushd/popd 是另一种方式)( cd "$dir" && echo "In directory: $(pwd)" && ./stop.sh )if [[ $? -eq 0 ]]; thenecho "stop $dir successfully."elseecho "Failed to stop $dir."fielseecho "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
"小李"
这样集群就配置完成了。