这篇文章将为大家详细讲解有关复述中怎么实现低成本高可用方案,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<节>哨兵介绍
哨兵是复述,官方为集群提供的高可用解决方案。在实际项目中可以使用哨兵去做复述,自动故障转移,减少人工介入的工作量。另外哨兵也给客户端提供了监控消息的通知,这样客户端就可根据消息类型去判断服务器的状态,去做对应的适配操作。
下面是哨兵主要功能列表:
- <李> <节>
监控:哨兵持续检查集群中的主人,奴隶状态,判断是否存活。
节> 李> <李> <节>通知:在发现某个复述,实例死的情况下,哨兵能通过API通知系统管理员或其他程序脚本。
节> 李> <李> <节>自动故障转移:如果一个主挂掉后,哨兵立马启动故障转移,把某个奴隶提升为大师。其他的奴隶重新配置指向新主人。
节> 李> <李> <节>配置提供者:对于客户端来说前哨通知是有效可信赖的。客户端会连接哨兵去请求当前主人的地址,一旦发生故障哨兵会提供新地址给客户端。
节> 李>哨兵配置
哨兵本质上只是一个运行在特殊模式下的复述,服务器,通过不同配置来区分提供服务.sentinel.conf配置:
<代码>//,[监控名称],[ip],[港口],[多少哨兵同意才发生故障转移],
sentinel monitor mymaster 127.0.0.1 6379年,2
//,[监控名称],[大师多少毫秒后不回应平命令,就认为大师是主观下线状态]
sentinel down-after-milliseconds mymaster 60000年
//,[故障转移超时时间]
sentinel failover-timeout mymaster 180000年
//[在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步]
sentinel parallel-syncs mymaster 1
代码>
哨兵需要使用redis2.8版本以上,启动如下:
<代码> redis-sentinel sentinel.conf,
代码>
启动后前哨会:
- <李> <节>
以10秒一次的频率,向被监视的主发送信息命令,根据回复获取主人当前信息。
节> 李> <李> <节>以1秒一次的频率,向所有复述,服务器,包含哨兵在内发送平命令,通过回复判断服务器是否在线。
节> 李> <李> <节>以2秒一次的频率,通过向所有被监视的主人,奴隶服务器发送包含当前哨兵,主信息的消息。
节> 李>另外建议哨兵至少起3个实例以上,并配置2个实例同意即可发生转移5个实例,配置3个实例同意以此类推。
,故障转移消息接收的3种方式
复述,服务器一旦发送故障后,哨兵通过筏算法投票选举新主人。故障转移过程可以通过哨兵的API获?订阅接收事件消息。
搜索Java知音公众号,回复”后端面试”,送你一份Java面试题宝典. pdf
,脚本接收
- <李> <节>当故障转移期间,可以指定一个“通”知脚本用来告知系统管理员,当前集群的情况。节> 李> <李> <>节脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(杀死)节> 李>
<代码> sentinel notification-script mymaster /var/复述/notify.sh,
代码>
- <李> <节>故障转移期之后,配置通知客户端的脚本。节> 李>
<代码> sentinel client-reconfig-script mymaster /var/复述/notifyReconfig.sh, ,
代码>
客户端直接接收
前哨的故障转移消息通知使用的是复述,发布订阅。就是说在故障转移期间所有产生的事件信息,都通过频道(频道)发布出去。比如我们加台奴隶服务器,哨兵监听到后会发布加奴隶的消息到“+ slave"频道上,客户端只需要订阅“+ slave"频道即可接收到对应消息。
其消息格式如下:
[实例类型][事件服务器名称][服务器ip][服务器端口]@(主名称][ip][端口)
<代码> & lt; instance-type>, & lt; name>, & lt; ip>, & lt; port>, @ & lt; master-name>, & lt; master-ip>, & lt; master-port>,
代码>
通知消息格式示例:
<代码> *,,,,,,,,,,//订阅类型,,*即订阅所有事件消息。
-sdown ,,,,//消息类型
slave 127.0.0.1:6379 127.0.0.1 6379年,@ mymaster 127.0.0.1 6381复述中怎么实现低成本高可用方案