Windows下Redis主备集群及哨兵模式的搭建
1.redis主备集群
本文所用redis版本为3.2.1
1.1下载redis
链接:https://pan.baidu.com/s/1bjdoi1LO9qcC1mbPe9ts-Q
提取码:isc9
1.2下载完成后解压,目录如图
1.3复制一份解压后的redis,目录如图
第一个redis的配置文件不用修改,点开第二个文件夹,修改redis.windows.conf
首先找到port,修改端口号为6380
然后找到slaveof <masterip> <masterport>,修改为slaveof 127.0.0.1 6379,并将前面的注释去掉,点击保存
1.4启动redis
分别执行2个文件夹下面的start.bat
启动第一个如图:
启动第二个如图:
可以看到显示出链接端口号为6379的信息,接下来就来验证一下
1.5验证主备集群
打开DOS命令窗口,切换到这俩随便一个文件夹下面
输入 redis-cli -h 127.0.0.1 -p 6379,或者输入redis-cli.exe也能切换到6379下
接着输入 info replication 命令查看信息
我们先在6379下面设置一个键值对,看在6380下面能否看到。
set k1 v1
get k1
没问题的话Ctrl+C退出,redis-cli -h 127.0.0.1 -p 6380 切换到6380下面
输入 get k1,发现也可以得到v1
接着输入info replication
现在我们把6379关掉,继续get k1,发现还可以读到v1。
实际上至此redis主从集群已经完成了,但是当6379挂掉以后,想往6380存入数据,发现报错((error) READONLY You can't write against a read only slave.),然后输入info replication命令,发现6380还是备,并没有升成主
这就有点难堪了o(╯□╰)o
我们想要的是主备都可以写数据,而且主挂掉以后备可以自动升成主,当挂掉的那个主重启的时候会降为备,那么这时候我们就要引入redis哨兵模式了。
2.Redis哨兵模式
Redis哨兵模式,用现在流行的话可以说就是一个“哨兵机器人”,给“哨兵机器人”进行相应的配置之后,这个"机器人"可以7*24小时工作,它能能够自动帮助你做一些事情,如监控,提醒,自动处理故障等。
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.
关于redis哨兵的具体原理就不赘述了,文末会放上参考链接。本文主要说明一下如何搭建,其实很简单,只需要加一个配置文件就可以了。
2.1新建sentinel.conf文件
redis解压目录下是没有这个文件的,需要我们自己创建
# 这个是Redis6379配置内容,其他文件同理新增然后改一下端口即可,26380
#当前Sentinel服务运行的端口
protected-mode no
port 26381
# 哨兵监听的主服务器 后面的1表示主机挂掉以后进行投票,只需要1票就可以从机变主机
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码,没有的话不用设置
sentinel auth-pass mymaster 123456
在2个文件夹下面都放入此文件,只是端口不同
分别启动2个redis以及2个哨兵,哨兵启动命令为redis-server.exe sentinel.conf --sentinel
我们会发现报错Creating Server TCP listening socket *:26379: listen: UnKnown error
经过网上查询得知是没有配置bind参数的原因,增加bind参数后sentinel.conf文件如下
# 这个是Redis6379配置内容,其他文件同理新增然后改一下端口即可,26380 26381
#当前Sentinel服务运行的端口
port 26381
bind 127.0.0.1
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
现在我们分别启动2个redis以及2个哨兵
注意,启动redis主备集群时要先启动主,后启动从,启动哨兵先启动哪个都可以。
启动哨兵命令:redis-server.exe sentinel.conf --sentinel ,后面的“--sentinel”也要打上
都启动成功之后,就可以进行测试了。
这里有一个自己踩过的坑告诉大家,当测试主挂掉的时候,发现从可以正常的升为主,但是主重启的时候,如果你设置了redis密码,会发现报错:Master does not understand REPLCONF capa: -NOAUTH Authentication required。
这是因为配置主备集群时,在redis.window.conf中,你只给从配置了masterauth "12345",这种情况在主没挂掉时可以用,但当主挂掉后重启时会变为从,没有密码连不上集群,所以会报这个错,所以需要在主的redis.window.conf中也加上这句话。
参考链接:
https://blog.csdn.net/u010648555/article/details/79430105