redis HA高可用方案Sentinel和shard

1、搭建redis-master、redis-slave以及seninel哨兵监控

在最小配置:master、slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然不能接受。幸好redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决

每个sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置

最小化的sentinel配置文件为:

[html] view plain copy

print?

  1. 1 port 26389
  2. 2
  3. 3 dir ./tmp
  4. 4
  5. 5 sentinel monitor mymaster 127.0.0.1 6379 1
  6. 6 sentinel down-after-milliseconds mymaster 5000
  7. 7 sentinel parallel-syncs mymaster 1
  8. 8 sentinel failover-timeout mymaster 15000

第1行,指定sentinel使用的端口,不能与redis-server运行实例的端口冲突

第3行,指定工作目录

第5行,显示监控master节点10.6.144.155,master节点使用端口7030,最后一个数字表示投票需要的"最少法定人数",比如有10个sentinal哨兵都在监控某一个master节点,如果需要至少6个哨兵发现master挂掉后,才认为master真正down掉,那么这里就配置为6,最小配置1台master,1台slave,在二个机器上都启动sentinal的情况下,哨兵数只有2个,如果一台机器物理挂掉,只剩一个sentinal能发现该问题,所以这里配置成1,至于mymaster只是一个名字,可以随便起,但要保证5-8行都使用同一个名字

第6行,表示如果5s内mymaster没响应,就认为SDOWN

第8行,表示如果15秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master

第7行,表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。

另:一个sentinal可同时监控多个master,只要把5-8行重复多段,加以修改即可。

各自启动redis主备和sentinal哨兵,查看redis的master

./redis-cli -p 26389 sentinel masters 可通过该命令查看当前的master节点情况

模拟当master挂掉,是否slave switch为master.

切换成功,将挂掉master启起来,是否该redis变幻为slave.

2、sentinel和shard redis保证redis 集群的高可用。

Sentinel&Jedis看上去是个完美的解决方案,这句话只说对了一半,在无分片的情况是这样,但我们的应用使用了数据分片-sharing,数据被平均分布到4个不同的实例上,每个实例以主从结构部署,Jedis没有提供基于Sentinel的ShardedJedisPool,也就是说在4个分片中,如果其中一个分片发生主从切换,应用所使用的ShardedJedisPool无法获得通知,所有对那个分片的操作将会失败。 
本文提供一个基于Sentinel的ShardedJedisPool,能及时感知所有分片主从切换行为,进行连接池重建..........

3\监控..

目前针对redis的监控比较少见,主要有redis-live、dredis等。但这些工具对redis性能消耗比较严重,实时监控比较困难。

redis的监控可以简单分为安全监控和性能监控。安全监控可以通过redissentinel的输出日志判断Master和Slave的状态;性能监控需要收集redis的性能参数进行评估。因此二者并不冲突,通过shell脚本可以实现轻量级的监控,缺点是没有可视化的实时图表。

1、安全监控

Redis sentinel的输出日志简洁而且内容很丰富,包含redis的实时状态、故障切换时间以及sentinel自身的状态,并且针对故障消除也有详细的记录。通过对sentinel日志挖掘,找出故障时刻进行及时报警,并通知管理员。

由于sentinel默认不启用日志记录,可以通过以下方法记录日志:

启动输入日志:

src/redis-sentinel sentinel.conf >>sentinel.log &

时间: 2024-10-12 02:57:22

redis HA高可用方案Sentinel和shard的相关文章

redis 学习笔记(4)-HA高可用方案Sentinel配置

上一节中介绍了master-slave模式,在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然不能接受.幸好redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,可监控master/slave的运行状态,基本原理是:心跳机制+投票裁决 每个sentinel会向其它sentinal.master.slave定时发送消息,以确认对方是否“活”着,如果发现对方在指

Codis3.2集群HA高可用方案

Codis高可用方案官方推荐使用Sentinel Redis 本身就是最终一致性的.Master 挂了,Promote Slave 成为新的 Master 需要时间(测试15秒内).其实 Sentinel 就是这个逻辑.Codis3.2 自己没有实现 HA,而是直接依赖 Sentinel 的. 注意事项: Sentinel需要使用原生的Redis-server,版本要等于或高于Codis3.2里面的3.2.8版本, 这里是在Redis3.2.9的下配置测试的,另外Protected-mode n

redis分布式高可用方案

1.主从复制 说到分布式高可用,必然少不了复制,一来是为了做个冗余备份防止数据丢失,二来还可以达到分流来提高性能的目的.下面全部用M来表示Master(主服务器),用S来表示Slave(从服务器) 那么redis的复制是怎么实现的呢?啥也不说了,先看图: Replication ID, offset 不好意思,没有图~哈哈~~看个表凑合吧 每个M都有上面这两个属性,Replication ID是M的唯一标识.offset是要发送命令流的字节数,简单来说,只要客户端有更新操作,这个offset就会

HA高可用方案之heartbeat v1的安装配置

配置前提: 1.时间必须同步,建议使用ntp协议 2.节点之间必须要通过主机名互相通信:通信中使用的名字必须与其节点上"uname -n"命令展示出的名字一致 3.需要仲裁设备 4.双方root用户能基于ssh密钥方式进行通信 5.本地资源必须能够正常运行,本文将使用httpd作为案例 注意:定义为集群服务中的任意资源都不能开机自动启动,因为他们将由CRM启动 安装方法: [[email protected] heartbeat1]# yum -y install net-snmp-l

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 http://www.tuicool.com/articles/naeEJbv 基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 时间 2014-02-21 15:15:17  IT社区推荐资讯 原文  http://itindex.net/detail/48192-redis-sentinel-redis Redis Sentinel是一个分布式系统,可以部署多个Se

(转)基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Re

基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常

Redis Sentinel(哨兵)主从高可用方案

环境搭建 三台服务器: 192.168.126.100(master) 192.168.126.110(slaver) 192.168.126.120(slaver) 拷贝192.168.126.100(主)服务器中的Redis到从机,保证Redis版本.环境一致: scp -r redis-3.2.0/ [email protected]192.168.126.110:/usr/local/ // 安装目录 scp -r redis/ [email protected]192.168.126.

基于Sentinel的Redis高可用方案

数据存储我们在应用设计过程中非常重要的一部分,无论是关系型数据库,还是Redis.MongoDB等非关系型数据库,都有很多的高可用方案,还有一些针对不同业务设计的中间件,使其性能更有特色,更能保证数据存储的稳定和安全. 目前主流的Redis的数据存储架构有Redis单点,Redis主从,基于Sentinel的Redis主备.基于keepalive的redis主备,以及Redis集群Cluster,还有豌豆荚开源的Codis等是目前业内比较流行的解决方案,不同的存储架构,是若干个技术工程师,根据自