惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
爱范儿
爱范儿
量子位
Martin Fowler
Martin Fowler
V
V2EX
博客园 - 三生石上(FineUI控件)
I
InfoQ
MongoDB | Blog
MongoDB | Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
D
DataBreaches.Net
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
Engineering at Meta
Engineering at Meta

博客园 - 自由港

postgres 支持全文索引 查看 milvus 中的数据 查询数据库锁死情况 使用 keepalived 实现 tendis 高可用 IDEA 运行 main 方法导致整个项目 install 自定义classloader hive 基础操作 在 服务器部署 seatunnel web服务 使用 seatunnel web 设计一个数据同步 如何 运行 seatunnel web 开发版 使用 seatunnel 实现数据同步 avro 数据入门 NIFI国际化 使用 NIFI读取EXCEL 数据到数据库 NIFI 使用HTTP 作为数据源接收数据 使用NIFI 同步数据库表 使用 NIFI监控数据库表 切换JDK NIFI实现配置分发
部署tendis
自由港 · 2025-11-22 · via 博客园 - 自由港

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