欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Windows下Redis主备集群及哨兵模式的搭建

程序员文章站 2022-05-17 22:41:30
...

1.redis主备集群

本文所用redis版本为3.2.1

1.1下载redis

链接:https://pan.baidu.com/s/1bjdoi1LO9qcC1mbPe9ts-Q
提取码:isc9

1.2下载完成后解压,目录如图

Windows下Redis主备集群及哨兵模式的搭建

1.3复制一份解压后的redis,目录如图

Windows下Redis主备集群及哨兵模式的搭建

第一个redis的配置文件不用修改,点开第二个文件夹,修改redis.windows.conf

首先找到port,修改端口号为6380

然后找到slaveof <masterip> <masterport>,修改为slaveof 127.0.0.1 6379,并将前面的注释去掉,点击保存

1.4启动redis

分别执行2个文件夹下面的start.bat

启动第一个如图:

Windows下Redis主备集群及哨兵模式的搭建

启动第二个如图:

Windows下Redis主备集群及哨兵模式的搭建

可以看到显示出链接端口号为6379的信息,接下来就来验证一下

1.5验证主备集群

打开DOS命令窗口,切换到这俩随便一个文件夹下面

输入 redis-cli -h 127.0.0.1 -p 6379,或者输入redis-cli.exe也能切换到6379下

接着输入 info replication 命令查看信息

Windows下Redis主备集群及哨兵模式的搭建

我们先在6379下面设置一个键值对,看在6380下面能否看到。

set k1 v1
 
get k1

没问题的话Ctrl+C退出,redis-cli -h 127.0.0.1 -p 6380 切换到6380下面

输入 get k1,发现也可以得到v1

接着输入info replication

Windows下Redis主备集群及哨兵模式的搭建

现在我们把6379关掉,继续get k1,发现还可以读到v1。

实际上至此redis主从集群已经完成了,但是当6379挂掉以后,想往6380存入数据,发现报错((error) READONLY You can't write against a read only slave.),然后输入info replication命令,发现6380还是备,并没有升成主

Windows下Redis主备集群及哨兵模式的搭建

这就有点难堪了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

https://blog.csdn.net/u011872945/article/details/82928329

http://www.cnblogs.com/sammyliu/p/6929066.html