最近学习了一些redis的相关知识,redis集群(主从复制,哨兵机制,分布集群等),下面来实际操作在windows环境搭建redis主从加哨兵机制。
主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器。前者成为主节点(master),后者成为从节点(slave),数据的复制是单向的,只能由主节点到从几点。
顾名思义,Redis哨兵充当了Redis主从实例的守护者,是构成Redis高可用的一个重要组成部分。其主要作用如下:
Redis sentinel本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
由于哨兵本身也是可能失效的,所以一个哨兵不能保证Redis服务的高可用,为了保证Redis服务其中一个节点故障的,其他节点仍能够继续推选新的节点来代替当前故障节点继续对外提供服务,Redis通过仲裁算法来推选新的节点来代替当前故障节点。所以哨兵至少需要三个实例来完成高可用,才是一个健壮的哨兵系统
简单介绍了一下Redis的主从和哨兵,深入了解的话可以参考其他文献,这里重点是如何搭建。
下载Windows下的Redis安装包(这里我分享了3版本的redis可以使用,链接:https://pan.baidu.com/s/1ltCZQRoMv_ZLaX8MruwbpA?pwd=1cnr
提取码:1cnr)
Redis-6379文件夹不用修改。
Redis-6380文件夹下的redis.windows.conf文件修改为:
Redis-6381文件夹下的redis.windows.conf文件修改为:
5.增加脚本
在对应的redis文件夹下面新建:
startRedisServer.bat
脚本内容为:
@echo off
redis-server.exe redis.windows.conf
@pause
123
依次将6380和6381都添加上。
在redis文件夹同级的目录下在新建:
start6379.cmd、start6380.cmd、start6381.cmd
脚本内容为:
start6379.cmd:
@echo off
cd Redis-6379
startRedisServer.bat
123
start6380.cmd:
@echo off
cd Redis-6380
startRedisServer.bat
123
start6381.cmd:
@echo off
cd Redis-6381
startRedisServer.bat
123
6.配置哨兵
在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:\\Redis\\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
12345678910111213141516171819
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:\\Redis\\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
123456789101112131415161718
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:\\Redis\\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
123456789101112131415161718
在Redis-6379、Redis-6380、Redis-6381文件下新增Redis-Sentinel启动脚本:startRedisSentinel.bat。
内容如下:
@echo off
redis-server.exe sentinel.conf --sentinel
@pause
123
配置启动startRedisSentinel.bat的脚本:startrRedisSentinel26379.cmd、startrRedisSentinel26380.cmd、startrRedisSentinel26381.cmd.
内容为:
startrRedisSentinel26379.cmd:
@echo off
cd Redis-6379
startRedisSentinel.bat
at
1234
startrRedisSentinel26380.cmd:
@echo off
cd Redis-6380
startRedisSentinel.bat
at
1234
startrRedisSentinel26381.cmd:
@echo off
cd Redis-6381
startRedisSentinel.bat
at
1234
启动规则:先启动主节点,然后再启动从节点。
1、依次双击启动脚本start6379.cmd、start6380.cmd、start6381.cmd启动主从节点。
2、双击启动startrRedisSentinel26379.cmd、startrRedisSentinel26380.cmd、startrRedisSentinel26381.cmd。启动三个哨兵实例。
查看主从节点状态
(1)进入Redis-6379目录下,cmd进入。
使用如下命令,进入6379的客户端
redis-cli.exe -p 6379
使用如下命令查看详情
info replication
通过详情可以看到,6379端口为master节点,两个slave结点为6380和6381
(2)进入Redis-6380目录下,cmd进入。
使用如下命令,进入6380的客户端
redis-cli.exe -p 6380
使用如下命令查看详情
info replication
通过详情可以看到,6380为slave节点,master结点为6379
进入Redis-6381目录下,cmd进入。
使用如下命令,进入6381的客户端
redis-cli.exe -p 6381
使用如下命令查看详情
info replication
通过详情可以看到,6381为slave节点,master结点为6379。
三个哨兵实例全部启动成功,生成了各自的id。
异常关闭其中一个redis服务器
将master节点6379异常关闭,在不手动修改的情况下,验证哨兵机制是否起到效果。
1.异常关闭6379主节点服务
在redis6379服务关闭的瞬间,这是哨兵6380的变化情况,此时可以看到6379已经宕机,哨兵采用leader机制从新选举master主结点,最终经过选举选了6381结点为主结点master的过程。
2.查看6380端口和6381端口
通过详情可以看出,6381现在为master节点,其slave节点只有一个6380端口。
通过详情看出,6381为master节点,其slave节点为6380。
可以看出,在不手动修改的情况下,当主节点宕机后,哨兵会监听主动将存活的节点升为主机点,达到了预想的效果。