Redis哨兵系列文章目录
Redis Sentinel 集群
前言
Sentinel是Redis官方为集群提供的高可用解决方案。 在实际项目中可以使用sentinel去做redis自动故障转移,减少人工介入的工作量。另外sentinel也给客户端提供了监控消息的通知,这样客户端就可根据消息类型去判断服务器的状态,去做对应的适配操作
Sentinel 哨兵的作用
• Monitoring:Sentinel持续检查集群中的master、slave状态,判断是否存活。
• Notification:在发现某个redis实例死的情况下,Sentinel能通过API通知系统管理员或其他程序脚本。
• Automatic failover:如果一个master挂掉后,sentinel会启动故障转移,把某个slave提升为master。其他的slave重新配置指向新master。
• Configuration provider:对于客户端来说sentinel通知是有效可信赖的。客户端会连接sentinel去请求当前master的地址,一旦发生故障sentinel会提供新地址给客户端。
一、配置
主要配置:
- sentinel monitor mastername masterIP masterPort quorum
- sentinel auth-pass def_master masterpass
- sentinel down-after-milliseconds mastername millseconds
- sentinel failover-timeout def_master millseconds
- sentinel can-failover def_master yes|no
- sentinel parallel-syncs def_master num
示例:
- port :当前Sentinel服务运行的端口
- dir : Sentinel服务运行时使用的临时文件夹
- sentinel monitor master 192.168.110.10 6379 2:Sentinel去监视一个名为master的主redis实例,这个主实例的IP地址为本机地址192.168.110.10,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
- sentinel down-after-milliseconds master 30000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
- sentinel parallel-syncs master 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
- sentinel failover-timeout master 180000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败
- sentinel notification-script :指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用
1. 监听多master
Sentinel支持监听多个master,即可以监控多组redis主从,只需要配置多组
sentinel monitor
每组mastername的可以拥有独立的配置,只需要在每个master name后面写入对应配置即可。
#master 1
sentinel monitor master1 192.168.2.3 6379 2
sentinel down-after-milliseconds master1 60000
sentinel failover-timeout master1 180000
sentinel parallel-syncs master1 1
#master 2
sentinel monitor master2 192.168.1.3 6379 2
sentinel down-after-milliseconds master2 10000
sentinel failover-timeout master2 180000
sentinel parallel-syncs master2 2
二、 启动
Sentinel两种启动方式
1、redis-sentinel /path/to/sentinel.conf #一般使用此种方式
2、redis-server /path/to/sentinel.conf --sentinel
启动后Sentinel会:
- 以10秒一次的频率,向被监视的master发送info命令,根据回复获取master当前信息。
- 以1秒一次的频率,向所有redis服务器、包含sentinel在内发送PING命令,通过回复判断服务器是否在线。
- 以2秒一次的频率,通过向所有被监视的master,slave服务器发送包含当前sentinel,master信息的消息。
三、添加或删除哨兵节点
添加哨兵节点
向部署中添加一个新的Sentinel是一个简单的过程,因为Sentinel实现了自动发现机制。启动配置为监视当前活动master服务器的新Sentinel。在10秒内,哨兵将获得其他哨兵的列表和附加到主服务器的副本。
如果需要一次添加多个哨兵,建议一个接一个地添加它,等待所有其他哨兵已经知道第一个,然后再添加下一个。这样可以保证大多数sentinel只能在分区的一侧获得,以防在添加新哨兵的过程中发生失败。
在进程的最后,可以使用命令来检查所有的Sentinels是否同意监视主服务器的Sentinels总数。SENTINEL MASTER mastername
删除哨兵节点
删除一个Sentinel稍微复杂一些;Sentinels永远不会忘记已经看到的Sentinels,即使它们很长时间都无法到达,因为无法动态更改授权故障转移所需的多数,并且创建新的配置号。因此,删除哨兵节点需要执行以下步骤:
- 停止要删除的哨兵进程。
- 向所有其他Sentinel实例发送一个命令(如果只想重置一个主实例,则可以使用确切的主实例名)。一个接一个,在实例之间至少等待30秒。SENTINEL RESET **
- 通过检查每个哨兵的输出,检查所有哨兵是否同意当前活跃的哨兵数量。SENTINEL MASTER mastername