Windows 系统单机搭建 Redis 哨兵模式

为了保证 Redis 的高可用性,可以采用 Redis 实例主从配置的方式,但主从配置方式天然存在主服务单机故障就导致整个系统瘫痪的致命问题。

为了解决这个问题,Redis2.4 开始支持 哨兵机制,Redis 2.8 中正式引入

哨兵机制 的思想很简单,再 Redis 运行服务外,专门运行一个哨兵服务,监测主服务是否发生故障,一旦发生,从服务自动升级为主服务,如果主服务恢复了,自动变为从服务。

主服务也可以配置一个哨兵服务,如果挂掉,重启后可以充当为一个从服务哨兵。

服务环境:windows7 单机部署

一、配置 Redis 主从

参考:https://blog.csdn.net/createNo_1/article/details/108362125

二、配置 Redis 哨兵

1. Redis6380 配置哨兵

  在 Redis6380 目录下添加 sentinel.conf 文件,配置内容如下:

# 配置地址及端口
port 26380
# 配置地址
# 不配置会报错:Creating Server TCP listening socket *:26380: listen: UnKnown error
bind 127.0.0.1
# 所有哨兵监听的都是主服务器,当前主服务器是 6380,所以就监控 6380
# 将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)
sentinel monitor mymaster 127.0.0.1 6380 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. Redis6381、Redis6382 配置从服务哨兵

  在各自目录下添加 sentinel.conf 文件,配置内容如下:

# 6382 部署直接更改 port 为 26382,其他不改
port 26381
bind 127.0.0.1

# 每个从服务也都监控主服务的地址和端口
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

# 如果主服务 redis 存在密码 123456,需要如下部署密码
# sentinel auth-pass master 123456

三、测试

测试流程:

  1. 测试准备
  2. 关闭 6380 主服务
  3. 重启 6380 服务
  4. 关闭新的主服务
  5. 重启新的主服务

每一步分别观察三个 sentinel 服务日志变化,通过 redisDisktopManager 工具打印各服务的信息来观察主从变化。

1. 准备测试

建议像下图那样先开六个窗口,右三个窗口启动三个端口对应的 Reids 服务,左 3 个窗口启动三个 sentinel 服务。

启动 Redis 服务命令:redis-server.exe redis.windows.conf

启动哨兵服务命令:redis-server.exe sentinel.conf --sentinel

都启动起来后,执行效果如下:

我们主服务是 6380 端口,可以通过 redisDisktopManager 工具,执行 info replication 命令查看实例信息,明显能看到,role 角色为 master,有两个 slave,如下:

查看两个从服务的信息,角色信息都为 slave,如下:

2. 关闭 6380 主服务,查看服务信息变化

直接断掉 redis6380 的服务运行,观察从服务的 sentinel 服务的打印日志,Redis6381 的 sentinel 服务打印日志如下:

Redis6382 的 sentinel 服务打印日志如下:

上面的日志打印看出新的主服务是 6382 对应的 redis 服务,看不懂上面那个没关系,可以继续再 manager 查看 info:

上面可以看出,redis6381 的 master 信息自动更换为 6382 的信息,6382 变为了主服务。

3. 重启开启 6380  服务

重新把 redis6380 启动,查看三个服务的信息:

上面可以看出 redis6380 变为了从服务,master 信息指向 6382,redis6381 依然为从服务,redis6382 依然为主服务。

4. 关闭 6382 主服务

再把 redis6382 服务关掉,6380 又变回主服务,6381 的 master 信息重新指向 6380,如下信息:

5. 重启 6382 服务

再把 redis6382 服务开启,master 信息重新指向 6380,如下信息:

四、总结

redis 哨兵模式非常大程度保证了服务的高可用,只要还有一个 Redis 实例能够正常运行都能保证业务请求的可用性,是一种非常优秀的防灾思想。

更多关于哨兵机制原理可以参考:http://redisdoc.com/topic/sentinel.html#id2

猜你喜欢

转载自blog.csdn.net/createNo_1/article/details/108364291