Windows11配置redis主从哨兵
Windows11配置redis主从哨兵
虚拟机环境:Window11
redis版本:3.0
1.简介
最近学了一些关于redis相关知识,今天就来在Windows环境下配置Redis主从加哨兵模式的集群。
2.Redis主从和哨兵的简介
-
Redis主从
主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器。前者成为主节点(master),后者成为从节点(slave),数据的复制是单向的,只能由主节点到从几点。(master复制写,slaver复制读,读写分离)
-
Redis哨兵(Sentinel)
顾名思义,Redis哨兵充当了Redis主从实例的守护者,是构成Redis高可用的一个重要组成部分。其主要作用如下:-
集群监控,负责监控redis master和slave进程是否正常工作
-
消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
-
故障转移,如果master node挂掉了,会自动转移到slave node上
-
配置中心,如果故障转移发生了,通知client客户端新的master地址
-
Redis sentinel本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
由于哨兵本身也是可能失效的,所以一个哨兵不能保证Redis服务的高可用,为了保证Redis服务其中一个节点故障的,其他节点仍能够继续推选新的节点来代替当前故障节点继续对外提供服务,Redis通过仲裁算法来推选新的节点来代替当前故障节点。所以哨兵至少需要三个实例来完成高可用,才是一个健壮的哨兵系统
-
哨兵至少需要3个实例,来保证自己的健壮性
-
哨兵 + redis主从的部署架构,是不会保证数据零丢失的,只能保证redis集群的高可用性
-
对于哨兵 + redis主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练
简单介绍了一下Redis的主从和哨兵,深入了解的话可以参考其他博客,这里重点是如何搭建。
3.集群环境搭建
下载Windows下的Redis安装包。
下载完成进行解压
解压后目录如下:
复制三份解压后的Redis文件,命名为Redis-6379、Redis-6380、Redis-6381
修改redis.windows.conf
Redis-6379文件夹不用修改。
Redis-6380文件夹下的redis.windows.conf文件修改为:
port 6380
Redis-6381文件夹下的redis.windows.conf文件修改为:
port 6381
增加脚本
在对应的redis文件夹下面新建:
startRedisServer.bat
脚本内容为:(让redis的服务,按配置文件的配置启动)
@echo off
redis-server.exe redis.windows.conf
@pause
依次将6380和6381都添加到对应的吗目录下。
在redis文件夹同级的目录下在新建:
start6379.cmd、start6380.cmd、start6381.cmd
脚本内容为:
start6379.cmd:
@echo off
cd Redis-6379
startRedisServer.bat
start6380.cmd:
@echo off
cd Redis-6380
startRedisServer.bat
start6381.cmd:
@echo off
cd Redis-6381
startRedisServer.bat
配置哨兵
在Redis-6379、Redis-6380、Redis-6381文件下新增一个名为sentinel.conf的文件,文件内容如下:
Redis-6379:(地址根据实际改动)
# 当前Sentinel服务运行的端口
port 26379
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6380 2
# 3秒内mymaster没响应,则认为mymaster宕机
sentinel down-after-milliseconds mymaster 3000
# 如果10秒后,mymaster仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时,最多有1个从服务器同时对新的主服务器进行同步
sentinel config-epoch mymaster 6
# Generated by CONFIG REWRITE
dir "D:\\software\\redis\\redis-zhucondemo\\Redis-6379"
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 6379
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 26381 f468033601759ada7bf82f1b9fdc3d9630b2ebdc
sentinel known-sentinel mymaster 127.0.0.1 26380 f085798e0294383bc82c1405f34e0a6dcb136fd2
sentinel current-epoch 6
同理,在6380和6381的目录下也添加对应的sentinel
Redis-6380:
# 当前Sentinel服务运行的端口
port 26380
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6380 2
# 3秒内mymaster没响应,则认为mymaster宕机
sentinel down-after-milliseconds mymaster 3000
# 如果10秒后,mymaster仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时,最多有1个从服务器同时对新的主服务器进行同步
sentinel config-epoch mymaster 6
# Generated by CONFIG REWRITE
dir "D:\\software\\redis\\redis-zhucondemo\\Redis-6380"
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-slave mymaster 127.0.0.1 6379
sentinel known-sentinel mymaster 127.0.0.1 26379 e30ff23c67f78acab2b5fec403c25c5f8f072cdb
sentinel known-sentinel mymaster 127.0.0.1 26381 f468033601759ada7bf82f1b9fdc3d9630b2ebdc
sentinel current-epoch 6
Redis-6381:
# 当前Sentinel服务运行的端口
port 26381
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6380 2
# 3秒内mymaster没响应,则认为mymaster宕机
sentinel down-after-milliseconds mymaster 3000
# 如果10秒后,mymaster仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时,最多有1个从服务器同时对新的主服务器进行同步
sentinel config-epoch mymaster 6
# Generated by CONFIG REWRITE
dir "D:\\software\\redis\\redis-zhucondemo\\Redis-6381"
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 6379
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 26379 e30ff23c67f78acab2b5fec403c25c5f8f072cdb
sentinel known-sentinel mymaster 127.0.0.1 26380 f085798e0294383bc82c1405f34e0a6dcb136fd2
sentinel current-epoch 6
在Redis-6379、Redis-6380、Redis-6381文件下新增Redis-Sentinel启动脚本:startRedisSentinel.bat
@echo off
redis-server.exe sentinel.conf --sentinel
@pause
配置启动startRedisSentinel.bat的脚本:startrRedisSentinel26379.cmd、startrRedisSentinel26380.cmd、startrRedisSentinel26381.cmd.
startrRedisSentinel26379.cmd:
@echo off
cd Redis-6379
startRedisSentinel.bat
at
startrRedisSentinel26380.cmd:
@echo off
cd Redis-6380
startRedisSentinel.bat
at
startrRedisSentinel26381.cmd:
@echo off
cd Redis-6381
startRedisSentinel.bat
at
启动测试
启动规则:先启动主节点,然后再启动从节点
依次双击启动脚本start6379.cmd、start6380.cmd、start6381.cmd启动主从节点。
双击启动startrRedisSentinel26379.cmd、startrRedisSentinel26380.cmd、startrRedisSentinel26381.cmd。启动三个哨兵实例
启动主从节点
启动三个哨兵实例
查看主从节点状态
进入Redis-6379目录下,cmd进入(或者右键在终端打开)
启动客户端(如果没启动redis-server会连接失败)
redis-cli.exe -p 6379
使用如下命令查看详情
info replication
通过详情可以看到,6379端口为slave节点,master节点为6380
进入Redis-6380目录下,cmd进入。
使用如下命令,进入6380的客户端
redis-cli.exe -p 6380
使用如下命令查看详情
info replication
通过详情可以看到,6380为master节点,有两个slave节点:6379和6381
同理,我们来验证6381节点的情况
进入Redis-6381目录下,cmd进入。
使用如下命令,进入6381的客户端
redis-cli.exe -p 6381
使用如下命令查看详情
info replication
通过详情可以看到,8381为slave节点,主节点为6380。
我们接着来看我们创建的三个哨兵实例
三个哨兵实例全部启动成功,生成了各自的id
异常情况验证
我们知道哨兵有下线功能,我们来验证如果我们的master(6380)异常下线的情况下,redis能否正常工作。
异常关闭6380主节点服务
关闭的瞬间,如果我们观察6379和6381的节点服务
我们会发现,哨兵重新选举,此时6379位master,6381位6381的slave节点
使用如下命令查看详情
info replication
6379:
6381:
可以看出,在不手动修改的情况下,当主节点宕机后,哨兵会监听主动将存活的节点升为主机点,达到了预想的效果。