Windows部署Redis哨兵一主二从三哨兵

1.修改配置文件

一主两从
复制三份 redis.windows.conf,分别如下配置

redis-6379.windows.conf

bind 127.0.0.1
port 6379
#有密码加密码,切记参数顶头不能有空
requirepass “mxl8341”
masterauth “mxl8341”

redis-6380.windows.conf

bind 127.0.1
port 6380
#有密码加密码,切记参数顶头不能有空
requirepass “mxl8341”
masterauth “mxl8341”
slaveof 127.0.0.1 6379

redis-6381.windows.conf

bind 127.0.1
port 6381
#有密码加密码,切记参数顶头不能有空
requirepass “mxl8341”
masterauth “mxl8341”
slaveof 127.0.0.1 6379

2.启动 Rdis

redis-server.exe redis6379.windows.conf
redis-server.exe redis6380.windows.conf
redis-server.exe redis6381.windows.conf

验证是否成功,看到从节点状态 online 说明主从环境搭建成功了

redis-cli.exe -h 127.0.0.1 -p 6379
备注:也可以脚本启动(快速方便)
添加以下文本 后缀名.bat
@ECHO OFF
redis-server redis6379.windows.conf
pause

127.0.0.1:6379> info replication

Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=0
master_replid:677245c1292f2244597f22a12c85730f236fa707
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98

3.配置三个哨兵

创建三个配置文件(精简)

sentinel26379.windows.conf

bind 127.0.0.1
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
#有密码加密码
sentinel auth-pass mymaster mxl8341

sentinel26380.windows.conf

bind 127.0.0.1
port 26380
sentinel monitor mymaster 127.0.0.1 6379 2
#有密码加密码
sentinel auth-pass mymaster mxl8341

sentinel26381.windows.conf

bind 127.0.0.1
port 26381
sentinel monitor mymaster 127.0.0.1 6379 2
#有密码加密码
sentinel auth-pass mymaster mxl8341

启动哨兵

redis-server sentinel26379.conf --sentinel
redis-server sentinel26380.conf --sentinel
redis-server sentinel26381.conf --sentinel
备注:也可以脚本启动(快速方便)
添加以下文本 后缀名.bat
@echo off
redis-server.exe sentinel26379.conf --sentinel
@pause
验证是否成功,看到最后 status=ok 说明成功了

127.0.0.1:26379> info sentinel

Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

Redis可视化工具,方便操作查看结果:查看主从关系:

根据需要输入密码连接

Windows部署Redis哨兵一主二从三哨兵_第1张图片
Redis可视化工具,方便操作查看结果:查看哨兵启动情况:

Windows部署Redis哨兵一主二从三哨兵_第2张图片

故障排查
提示1:
哨兵信息发现slaves的数量变多,查找配置信息ip地址要一致(redis.conf和sentinel.conf),其他局域网时要用本机IP地址.切记不能用127.0.0.1
提示2:
哨兵信息发现sentinels数量与开启的哨兵数量不符(小于实际),把哨兵配置文件中sentinel myid 行注释掉,让其自动生成,重启再查看

附件:哨兵配置文件完整,根据场景挑选配置
主配置

# 配置 sentinel 端口号
port 26379

# 以守护进程启动
daemonize yes

# 绑定只在本地使用
bind 127.0.0.1

# 日志文件名称
logfile "sentinel_26379.log"

# 日志文件存放地址
dir "./"

# 监控 master 名字叫做 mymaster,地址是 127.0.0.1 端口号是 63791 表示有几个 sentinel 认为该 master 出现故障,触发主备切换动作
sentinel monitor mymaster 127.0.0.1 6379 2

#有密码加密码
sentinel auth-pass mymaster mxl8341

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000

# 主备切换时,多少个从服务器同步更新数据,数值越小越好
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。 
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
sentinel failover-timeout mymaster 180000

从配置

# 配置 sentinel 端口号
port 26380

# 以守护进程启动
daemonize yes

# 绑定只在本地使用
bind 127.0.0.1

# 日志文件名称
logfile "sentinel_26380.log"

# 日志文件存放地址
dir "./"

# 监控 master 名字叫做 mymaster,地址是 127.0.0.1 端口号是 63791 表示有几个 sentinel 认为该 master 出现故障,触发主备切换动作
sentinel monitor mymaster 127.0.0.1 6379 2

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000

#有密码加密码
sentinel auth-pass mymaster mxl8341

# 主备切换时,多少个从服务器同步更新数据,数值越小越好
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。 
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
sentinel failover-timeout mymaster 180000

从配置

# 配置 sentinel 端口号
port 26381

# 以守护进程启动
daemonize yes

# 绑定只在本地使用
bind 127.0.0.1

# 日志文件名称
logfile "sentinel_26381.log"

# 日志文件存放地址
dir "./"

# 监控 master 名字叫做 mymaster,地址是 127.0.0.1 端口号是 63791 表示有几个 sentinel 认为该 master 出现故障,触发主备切换动作
sentinel monitor mymaster 127.0.0.1 6379 2

#有密码加密码
sentinel auth-pass mymaster mxl8341

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000

# 主备切换时,多少个从服务器同步更新数据,数值越小越好
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。 
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
sentinel failover-timeout mymaster 180000

遇到的问题

代码客户端连接redis,报错 All sentinels down, cannot determine where is mymaster master is running… 或者 Could not get a resource from the pool
参考这篇博客:Spring bootJedisPoolConfig 连接池,认真读过 【深入学习redis(4):哨兵】 ,所以这个问题已经不再是问题了通过客户端原理的介绍,可以加深对哨兵功能的理解:(1)配置提供者:客户端可以通过哨兵节点+masterName获取主节点信息,在这里哨兵起到的作用就是配置提供者。需要注意的是,哨兵只是配置提供者,而不是代理。二者的区别在于:如果是配置提供者,客户端在通过哨兵获得主节点信息后,会直接建立到主节点的连接,后续的请求(如set/get)会直接发向主节点;如果是代理,客户端的每一次请求都会发向哨兵,哨兵再通过主节点处理请求。举一个例子可以很好的理解哨兵的作用是配置提供者,而不是代理。在前面部署的哨兵系统中,将哨兵节点的配置文件进行如下修改:

sentinel monitor mymaster 192.168.92.128 6379 2
改为
sentinel monitor mymaster 127.0.0.1 6379 2

然后,将前述客户端代码在局域网的另外一台机器上运行,会发现客户端无法连接主节点;这是因为哨兵作为配置提供者,客户端通过它查询到主节点的地址为127.0.0.1:6379,客户端会向127.0.0.1:6379建立redis连接,自然无法连接。如果哨兵是代理,这个问题就不会出现了注意一点:哨兵程序监控端口和 redis 服务端口都要开放给客户端,否则就访问不通。我本地开发环境就是这种情况,可以访问通监控端口,但是无法访问redis服务端口。这也再次说明了哨兵只是配置提供者,而不是代理。

收录:

1.搭建redis哨兵集群时,哨兵无法感知到其他哨兵
2.springboot+shiro-redis 使用Redis sentinel(哨兵)主从实现
3.redis三个定时监控任务和主观下线、客观下线
4.Redis及其Sentinel配置项详细说明
5.SpringBoot2.0整合Redis高可用之Sentinel哨兵
6.Redis的哨兵模式
7.Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
8.SpringBoot 2.3.3 + Redis + Sentinel 测试

你可能感兴趣的:(JAVA,redis,windows)