Redis以其高效的访问速度著称。但由于官方还未发布redis-cluster,而redis的replica又有诸多不便:比如一组master-slave的机器,如果之间有链接瞬段,或者对slave重新执行slaveof命令,会导致slave机器从头开始同步一次master的数据,造成较大的开销。

 
以下描述了使用keepalived+redis主从的一种高可用方法。安装方法在这里就不赘述了,google之则可。
1. redis服务配置
主机     端口   角色
redis0 6379   master
redis1 6379   slave
 
2. keepalived的配置
redis0和redis1使用一个虚拟ip
 
并使用如下脚本监控redis服务是否存活。监控脚本:
  1. #!/bin/bash  
  2. /usr/local/bin/redis-cli -h 192.168.1.53 -p 6379 info > /dev/null  
  3. if [ $? -eq 0 ]; then  
  4. echo "redis OK"  
  5. exit 0  
  6. else  
  7. echo "no redis service found!"  
  8. /usr/local/bin/redis-server /path/to/redis.conf  
  9.   
  10. # try to start it again  
  11. /usr/local/bin/redis-cli -h 192.168.11.53 -p 6380 info > /dev/null  
  12. if [ $? -eq 0 ]; then  
  13. exit 0  
  14. else  
  15.   
  16. # restart failed  
  17. killall keepalived  
  18. echo "error"  
  19. fi  
  20. fi  
要实现redis故障恢复,可以使用keepalived配置的notify_master, notify_backup这两个方法执行特有的脚本。实际上只要在slave(即redis1)上有2个脚本,第一个用于在redis1接管虚拟ip之后,执行slaveof no one把自己变成master。第二个用户在redis1交出虚拟ip之后,在redis0执行slaveof no one确保redis0恢复为主的状态,并对自己执行slaveof redis0 6379开始重新从master同步数据,如果自己已经是slave就没必要同步了。
 
redis1上keepalived的配置方法如下,redis0只要去掉notify_master, notify_backup两行即可。
  1. ! Configuration File for keepalived  
  2. global_defs {  
  3. router_id redis1  
  4. }  
  5. vrrp_script Monitor_Redis {  
  6.  script "/opt/redis_keepalive.sh"  
  7.  interval 10  
  8.  weight 2  
  9. }  
  10. vrrp_instance 360 {  
  11.  state BUCKUP #(主机为MASTER,备用机为BACKUP)  
  12.  interface eth0 #(HA监测网络接口)  
  13.  virtual_router_id 110 #(主、备机的virtual_router_id必须相同)  
  14.  mcast_src_ip 192.168.11.53 #(多播的源IP,设置为本机外网IP,与VIP同一网卡)此项可不设置  
  15.  priority 70 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)  
  16.  advert_int 1 #(VRRP Multicast广播周期秒数)  
  17.  authentication {  
  18.   ......  
  19. }  
  20.  notify_master /opt/redis_2master.sh  
  21.  notify_backup /opt/redis_2backup.sh  
  22.  track_script {  
  23.  Monitor_Redis #(调用nginx进程检测脚本)  
  24. }  
  25.  virtual_ipaddress {  
  26.  192.168.11.4 #(VRRP HA虚拟地址)  
  27.  }  
  28. }  

Redis之高可用方案的更多相关文章

  1. Redis Sentinel 高可用方案

      redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...

  2. Redis+Keepalived高可用方案详细分析

    背景 目前,Redis集群的官方方案还处在开发测试中,未集成到稳定版中.且目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或http://www.redisdoc.com/ ...

  3. 深入了解Redis(8)-高可用方案

    生产环境中的redis基本都是多节点部署,本文只讨论redis高可用的三种方案,不涉及实际操作. 一.主从复制(一主一从,一主多从,级联结构) (图来源于网络) 一个Master,两个Slave,Sl ...

  4. redis HA高可用方案Sentinel和shard

    1.搭建redis-master.redis-slave以及seninel哨兵监控 在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的” ...

  5. 深入理解Redis高可用方案-Sentinel

    Redis Sentinel是Redis的高可用方案.是Redis 2.8中正式引入的. 在之前的主从复制方案中,如果主节点出现问题,需要手动将一个从节点升级为主节点,然后将其它从节点指向新的主节点, ...

  6. Sentinel-Redis高可用方案(一):主从复制

    引言 大概是因为Redis是个人开发的产品,所以Redis的高可用方案是被分成了几块来实现:主从复制.主从切换以及虚拟IP或客户端方案. 从Redis 2.8开始加入对Sentinel机制从而实现了服 ...

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

    转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedi ...

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

    本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在 ...

  9. 理解redis高可用方案

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. zabbix监控tomcat

    服务端配置修改 编译zabbix的时候需要添加参数--enable-java --enable-java 修改zabbix_java配置文件 vim /usr/local/zabbix-2.4.6/s ...

  2. tomee 第一个 远程调用 Message-driven bean(MDB)

    MDB 整体结构 HelloMDB.java package cn.zno; import javax.jms.Connection; import javax.jms.ConnectionFacto ...

  3. Magcodes.WeiChat——通过CsvFileResult以及DataAnnotations实现导出CSV文件

    我们先来看看效果图: 从上图中可以看出,导出的文件中列名与表格名称保持一致,并且忽略了某些字段. 相关代码实现 我们来看相关代码: 页面代码: @using (Html.BeginForm(" ...

  4. 从C#到Objective-C

    Objective-C 程序设计语言采用特定的语法,来定义类和方法.调用对象的方法.动态地扩展类,以及创建编程接口,来解决具体问题.Objective-C 作为 C 程序设计语言的超集,支持与 C 相 ...

  5. [Xamarin] 客製化的ListView之章 (转帖)

    上次我們說到簡單的的SimpleExpandableListItem1 來做選單 老闆不會因為這樣而滿足的,因為總是希望一個獨一無二,而且漂亮的List 選單 這篇我們來看看如何實作最後結果為自訂每一 ...

  6. WPF快速入门系列(4)——深入解析WPF绑定

    一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...

  7. .net 架构师/经理招聘,长期有效

    岗位职责: 1.参与项目的需求分析和业务评审 2.负责项目的技术架构: 3.负责指导开发小组完成开发以及单元测试: 4.负责解决开发人员的技术问题,并对开发人员的代码进行Review. 任职要求: 1 ...

  8. Chrome浏览器在Windows8/8.1下显示模糊的解决办法

    刚刚换了一台新电脑,安装完Windows 8.1,屏幕分辨率被自动设置为1920 X 1080,打开Chrome浏览器却发现内容显示非常模糊,不论如何改变Chrome的设置均没有效果,开启或关闭Chr ...

  9. java5 Lock用法

    锁是控制多个线程对共享资源进行访问的工具.通常,锁提供了对共享资源的独占访问.一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁.不过,某些锁可能允许对共享资源并发访问,如 ReadWri ...

  10. paip.语义相关是否可在 哈米 的语义分析中应用

    paip.语义相关是否可在 哈米 的语义分析中应用 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn. ...