Redis-Cluster-搭建

官方地址:https://redis.io/topics/cluster-tutorial

为 Cluster 启动 6 台 Redis 服务器,准备 6 台 Redis 服务器,下载 Redis 服务器:https://github.com/MicrosoftArchive/redis/releases

image-20220113100928757

CV 复制 6 台出来,修改服务器配置:

Redis-7000

port 7000                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7000.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

Redis-7001

port 7001                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7001.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

Redis-7002

port 7002                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7002.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

Redis-7003

port 7003                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7003.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

Redis-7004

port 7004                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7004.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

Redis-7005

port 7005                            # 端口号
daemonize yes                        # 以守护进程方式运行
cluster-enabled yes                  # 表示这是一个 Cluster 节点
cluster-config-file nodes-7005.conf  # Cluster 信息配置文件, 内容会自动生成
cluster-require-full-coverage no     # 是否集群中所有节点都能提供服务, 才对外提供服务
cluster-node-timeout 15000           # 故障转移或者节点超时时间

注册服务器进程

redis-server.exe --service-install redis.windows-service.conf --service-name Redis7000
redis-server.exe --service-install redis.windows-service.conf --service-name Redis7001
redis-server.exe --service-install redis.windows-service.conf --service-name Redis7002
redis-server.exe --service-install redis.windows-service.conf --service-name Redis7003
redis-server.exe --service-install redis.windows-service.conf --service-name Redis7004
redis-server.exe --service-install redis.windows-service.conf --service-name Redis7005

启动相关 Redis 服务器

image-20220125090631938

测试读写

image-20220127155342154

让 6 台 Redis 服务器相互握手

redis-cli -h 127.0.0.1 -p 7000 cluster nodes
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005

image-20220126150005938

在如上握手的脚本当中,你可以观察发现,只有 7000 服务器与其它 Redis 服务器一一进行了握手,那么还需要 7001 与其它服务器在重复进行握手一次嘛,答:其实是不需要的,这个原理其实就像现实生活当中的认识新朋友原理很像,假如:赵六 认识 张三, 张三认识 李四王五, 那么通过张三就可以让赵六、李四、王五相互认识。

image-20220126151311068

测试读写

image-20220126151600594

给分片服务器分配槽

分别给不同的服务器进行分配槽的时候需要执行如下的指令进行一一分配,那么有 16383 那么岂不是疯了吗,是吧,这个时候呢,就有了下方的 windows 脚本的出现。

redis-cli -h 127.0.0.1 -p 7000 cluster addslots 0
redis-cli -h 127.0.0.1 -p 7001 cluster addslots 5462
redis-cli -h 127.0.0.1 -p 7002 cluster addslots 16383

这样子就不需要我们人为的去进行一一分配了,交给机器即可:

addslots.bat

@echo off
for /l %%i in (0,1,5461) do (
   redis-cli -h 127.0.0.1 -p 7000 cluster addslots %%i
)
pause

创建如上脚本文件,然后拖拽到对应的目录当中去然后在点击文件运行执行即可:

image-20220127162100244

image-20220127164905842

关于 7001 与 7002 同上即可,改一下脚本当中的 Redis 端口号 与分配的 范围,然后依次执行分配好即可:

7001:

@echo off
for /l %%i in (5462,1,10991) do (
   redis-cli -h 127.0.0.1 -p 7001 cluster addslots %%i
)
pause

7002:

@echo off
for /l %%i in (10992,1,16383) do (
   redis-cli -h 127.0.0.1 -p 7002 cluster addslots %%i
)
pause

分配了之后在查看所分配的槽:

image-20220127165137535

测试:

image-20220127165308917

去 7002 当中进行设置存储结果如下:

image-20220127165640455

完毕,接下来就是开始搭建分配主从关系了。

分配主从关系

redis-cli -h 127.0.0.1 -p 7000 cluster nodes

image-20220127165908517

redis-cli -h 127.0.0.1 -p 7003 cluster replicate 7000node-id
redis-cli -h 127.0.0.1 -p 7004 cluster replicate 7001node-id
redis-cli -h 127.0.0.1 -p 7005 cluster replicate 7002node-id

image-20220127170049933

分配之后的结果如下:

image-20220127170109031

测试自动保证高可用性

打开 windows 的服务管理页面将 redis7000 服务关闭,然后在查看 Redis-Custer 当中的主从结构即可测试:

image-20220127212701224

posted @   BNTang  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示