redis集群默认最少3个主节点,每个主节点最少一个从节点

1.下载redis压缩包并解压,复制为6份

https://github.com/tporadowski/redis/releases
在这里插入图片描述

2.修改redis.windows.conf文件

在这里插入图片描述
删除#注释修改为以下内容

port 7001 #为每个redis指定不同的端口
cluster-enabled yes
cluster-config-file nodes-7001.conf #为每个redis指定cluster-config-file文件名
cluster-node-timeout 15000
replica-read-only no #主节点设置为no,从节点设置为yes
 
 #requirepass,masterauth 要相同 
requirepass 123456
masterauth 123456

集群配置详解

# yes 代表启用集群模式
cluster-enabled yes     
# Redis 用于保存集群状态信息的文件,状态信息包括:所有节点的信息(IP和Port)、它们的状态(故障,在线)、哈希槽信息等
cluster-config-file nodes-6379.conf     
# 如果一个节点在15000毫秒(15秒)内没有收到来自另一个节点的PONG响应(即对PING请求的回应),那么它会认为那个节点是不可达或失效的(处于主观下线状态)。
cluster-node-timeout 15000
# 这个配置项决定了一个从节点断开与主节点连接多久后,会被认为不能进行故障转移和晋升为主节点。默认是10s
cluster-replica-validity-factor 10  
# 当一个主节点失效,为了晋升其下的从节点成为新的主节点,至少需要有多少个从节点在线,否则不会进行晋升过程。
cluster-migration-barrier 1    
# 是否允许从节点在集群的不同主节点之间迁移。这有助于在负载不均的情况下平衡从节点。
cluster-allow-replica-migration yes  
#  如果设置为 "yes",则集群要保证所有的哈希槽都必须有一个主节点来管理它,否则整个集群将停止服务。
cluster-require-full-coverage yes
#   这个配置选项决定了当主节点失效时,从节点是否可以自动升级为主节点。置为 "no" 允许从节点尝试变为新的主节点。设置为 "yes" 则不允许这种晋升。
cluster-replica-no-failover no   
#  该配置项决定了在集群出现问题时,是否允许在从节点上进行读操作。设置为 "no" 时,从节点不允许读取。如果设置为 "yes",即使集群有问题,从节点还是可以读取。
cluster-allow-reads-when-down no        

3添加启动文件

在这里插入图片描述
文件内容

title redis-7001 #我这里和端口保持一致可以自定义
redis-server.exe redis.windows.conf

4在父目录添加批量启动文件

在这里插入图片描述

调用3中的start文件一次启动6个redis

@echo off
setlocal
 
rem 获取脚本所在的目录作为父目录
set "parent_directory=%~dp0"
 
rem 遍历父目录下的每个子目录
for /d %%D in ("%parent_directory%*") do (
  rem 检查子目录是否包含 start.bat 文件
  if exist "%%~D\start.bat" (
    rem 进入子目录并运行 start.bat
    pushd "%%~D"
    start start.bat
    popd
  )
)
 
endlocal

5启动redis

运行4中的批量启动文件启动6个redis,redis的黑窗口会显示:Ready to accept
connections
在这里插入图片描述

6启动集群模式

启动集群模式

redis-cli -a 123456 --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

–cluster-replicas 1 每个主节点分配1个从节点
在这里插入图片描述
设置为yes后redis变化如下
在这里插入图片描述

redis会默认的将前3个节点用作主节点。
此时redis集群启动完成,

7在cluster-config-file指定的文件查看节点关系

在这里插入图片描述
在这里插入图片描述
1744305617000所在字段表示节点状态更新时间,用于判断节点存活状态和故障恢复优先级‌。
此时在黑窗口用redis-cli链接从节点添加数据会提示未授权,链接主节点则会正常写入并同步到其他节点,使用rdm等工具则无影响。

8批量关闭节点

在这里插入图片描述

@echo off
set START_PORT=7001
set END_PORT=7006
 
echo Closing port  %START_PORT%-%END_PORT%...
echo.
 
for /l %%i in (%START_PORT%, 1, %END_PORT%) do (
    call :closeProgram %%i
)
 
echo.
echo Closing all
echo.
 
taskkill /f /fi "imagename eq cmd.exe"
 
echo.
echo All closed.
goto :eof
 
:closeProgram
set PORT=%1
 
echo Searching for programs using port %PORT%...
 
for /f "tokens=5" %%a in ('netstat -ano ^| findstr /i ":%PORT%"') do (
    taskkill /f /pid %%a
    echo Program with port %PORT% has been closed.
)
 
echo.
echo End of program list for port %PORT%.
goto :eof

9添加主节点

新增两个redis并设置端口为7007,7008,其他的和之前的设置一样
在这里插入图片描述
运行start文件能看到两个新节点是在这里插入图片描述
在这里插入图片描述

10新节点加入集群

7007作为主节点加入集群

redis-cli.exe --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 -a 123456

新加的节点127.0.0.1:7007;任意集群中现有节点127.0.0.1:7001;如有密码则用-a 123456
在这里插入图片描述

11为新增主节点分配哈希槽

redis-cli.exe --cluster reshard 127.0.0.1:7007

根据提示输入以下信息:
‌迁移的槽位数量‌(如1000)
‌目标节点ID‌(新节点的ID,可通过cluster nodes查看)
‌源节点ID‌(输入all表示从所有现有节点迁移槽位)‌

‌迁移的槽位数量‌
在这里插入图片描述
目标节点ID‌
在这里插入图片描述
源节点ID‌
我用的7001的槽位,7001当前槽位分配
在这里插入图片描述

在这里插入图片描述
输入完源节点id后输入“done”
在这里插入图片描述
选择yes继续执行
在这里插入图片描述
可以看到7007 的槽位
在这里插入图片描述

12为7007添加从节点

运行7008的start文件
在这里插入图片描述

redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id 6685f6b1642c9c802282c7f9b73d216a2310f51a -a 123456

新节点127.0.0.1:7008
任意现有节点127.0.0.1:7001
主节点7007的id6685f6b1642c9c802282c7f9b73d216a2310f51a
在这里插入图片描述
添加完成
在这里插入图片描述

在这里插入图片描述

13删除一对主从节点

删除前先将主节点的哈希槽转移到其他主节点上,删除时要先删除从节点

删除从节点

redis-cli --cluster del-node 127.0.0.1:7008 4a3d20794c78d72f339b64049aa46fedd90a6579 #该节点的id

在这里插入图片描述
看一看到7008退出
在这里插入图片描述
查看主节点信息
在这里插入图片描述
7007有2000个槽,0个从节点

将7007的槽还给7001

redis-cli --cluster reshard 127.0.0.1:7007 --cluster-from 6685f6b1642c9c802282c7f9b73d216a2310f51a --cluster-to 97d9f617e25fb5dd182942a41888b72a3d81b576 --cluster-slots 2000 --cluster-yes

在这里插入图片描述

6685f6b1642c9c802282c7f9b73d216a2310f51a 7007的id
97d9f617e25fb5dd182942a41888b72a3d81b576 7001的id
2000 分给7001的槽数量,也能拆为两份,执行两次命令,将槽分给两个主节点

7001的哈希槽变化
在这里插入图片描述

删除主节点7007

redis-cli --cluster del-node 127.0.0.1:7007 6685f6b1642c9c802282c7f9b73d216a2310f51a -a 123456

在这里插入图片描述
在这里插入图片描述
7007从集群中移出

更多推荐