主:172.16.0.104

备:172.16.0.105

VIP:172.16.0.107

客户端直接连VIP,当master 104的redis挂掉后,105作为master。当104重启后,104作为105的slave。当105又挂掉之后,104作为master......

1、安装redis并配置主从同步

安装过程省略

   1.1 配置104的redis实例:/etc/redis/redis.conf

requirepass 123456 #生产环境千万不要配置这么简单的密码

masterauth 123456 #备库密码,这里没有配置slaveof却配置masterauth是因为主备切换时需要用到密码

    1.2 配置105的redis实例

requirepass 123456 #生产环境千万不要配置这么简单的密码

masterauth 123456 #主库密码

slaveof 172.16.0.104 6379

2、安装keepalived

安装过程省略

3、配置keepalived

  Master(104)实例:

keepalived.conf

  1. global_defs {
  2.    router_id test
  3. }
  4. vrrp_script chk_redis 
  5. { 
  6.      script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456" 
  7.      interval 2 
  8.      timeout 2
  9.      fall 3
  10. }
  11. vrrp_instance redis {
  12.     state BACKUP # 主也配置为SLAVE
  13.     interface eth0  
  14.     virtual_router_id 51 
  15.     priority  150       
  16.     nopreempt # 不抢占,注意加上
  17.     advert_int 1        
  18.     authentication {   
  19.         auth_type PASS   
  20.         auth_pass 123456
  21.     }
  22.     virtual_ipaddress {  
  23.      172.16.0.107
  24.     }
  25.     track_script { 
  26.          chk_redis 
  27.     } 
  28.     notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
  29.     notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.105 6379"
  30.     notify_fault /etc/keepalived/scripts/redis_fault.sh 
  31.     notify_stop /etc/keepalived/scripts/redis_stop.sh  
  1. }

redis_master.sh

  1.  #!/bin/bash
  2.   REDISCLI="redis-cli -h $1 -p $2 -a $3"
  3.   LOGFILE="/var/log/keepalived-redis-state.log"
  4.   echo "[master]" >> $LOGFILE
  5.   date >> $LOGFILE
  6.   echo "Being master...." >> $LOGFILE 2>&1
  7.   echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
  8.   $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

redis_backup.sh

  1.  #!/bin/bash
  2.   REDISCLI="redis-cli -h $1 -p $2 -a $3"
  3.   LOGFILE="/var/log/keepalived-redis-state.log"
  4.   echo "[backup]" >> $LOGFILE
  5.   date >> $LOGFILE
  6.   echo "Being slave...." >> $LOGFILE 2>&1
  7.   echo "Run SLAVEOF cmd ..." >> $LOGFILE
  8.   $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1

Slave(105)实例

keepalived.conf
  1. global_defs {
  2.     router_id redis
  3. }
  4. vrrp_script chk_redis {
  5.     script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456"   ###监控脚本
  6.     interval 2                  ###监控时间
  7.     timeout  2                                  ###超时时间
  8.     fall     3                  ###重试次数
  9. }
  10. vrrp_instance redis {
  11.   state BACKUP                  ###设置为MASTER
  12.   interface eth0              ###监控网卡
  13.   virtual_router_id 51
  14.   priority 100              ###权重值
  15.   nopreempt # 不抢占,注意加上
  16.   advert_int 1
  17.   authentication {
  18.          auth_type PASS          ###加密
  19.          auth_pass 123456        ###密码
  20.   }
  21.   track_script {
  22.     chk_redis              ###执行上面定义的chk_redis
  23.   }
  24.   virtual_ipaddress {
  25.        172.16.0.107            ###VIP
  26.   }
  27.    notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
  28.    notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.104 6379"
  29.    notify_fault /etc/keepalived/scripts/redis_fault.sh
  30.    notify_stop /etc/keepalived/scripts/redis_stop.sh
  31. }
 
redis_master.sh
  1.  #!/bin/bash
  2.   REDISCLI="redis-cli -h $1 -p $2 -a $3"
  3.   LOGFILE="/var/log/keepalived-redis-state.log"
  4.   echo "[master]" >> $LOGFILE
  5.   date >> $LOGFILE
  6.   echo "Being master...." >> $LOGFILE 2>&1
  7.   echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
  8.   $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 
  1.  

redis_backup.sh

  1.  #!/bin/bash
  2.   REDISCLI="redis-cli -h $1 -p $2 -a $3"
  3.   LOGFILE="/var/log/keepalived-redis-state.log"
  4.   echo "[backup]" >> $LOGFILE
  5.   date >> $LOGFILE
  6.   echo "Being slave...." >> $LOGFILE 2>&1
  7.   echo "Run SLAVEOF cmd ..." >> $LOGFILE
  8.   $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1

公共配置

redis_check.sh

  1. #!/bin/bash 
  2. ALIVE=`redis-cli -h $1 -p $2 -a $3 PING` 
  3. LOGFILE="/var/log/keepalived-redis-check.log" 
  4. echo "[CHECK]" >> $LOGFILE
  5. date >> $LOGFILE
  6. if [ $ALIVE == "PONG" ]; then : 
  7.    echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
  8.    exit 0 
  9. else 
  10.    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
  11.    exit 1 
  12. fi 

redis_fault.sh

  1. #!/bin/bash 
  2. LOGFILE=/var/log/keepalived-redis-state.log 
  3. echo "[fault]" >> $LOGFILE
  4. date >> $LOGFILE 

redis_stop.sh

  1. #!/bin/bash 
  2. LOGFILE=/var/log/keepalived-redis-state.log 
  3. echo "[stop]" >> $LOGFILE 
  4. date >> $LOGFILE 

启动keepalived:keepalived -D

查看ip漂移情况:ip a

配置要点:

  1. BACKUP + nopreempt,优先级大的先启动作为master,当master挂掉后,slave被选中成为新的master

参考文章:http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

Redis高可用配置(Keepalived)的更多相关文章

  1. Redis Sentinel实现高可用配置

    一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...

  2. Keepalived+Redis高可用部署(第二版)

    更新 20150625 脚本由5个减少为4个,sh脚本指令做了精简. 修改了另外3个脚本,在日志里增加了日期显示. 新增redis数据类型,持久化,主从同步简介. 新增hiredis简介. 新增c语言 ...

  3. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  4. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  5. Redis高可用之集群配置(六)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  6. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  7. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  8. linux中keepalived实现nginx高可用配置

    linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...

  9. Redis高可用方案----Redis主从+Sentinel+Haproxy

    安装环境 这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为6379,redis-sentinel的端口为26379. ...

随机推荐

  1. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  2. php_Symfony_项目实战全过程记录

    今天是2017年1月8号,正式接收到一个Symfony 的项目,准备全程记录遇到的问题及解决方法,之前被通知学习该框架,只是一直没有机会做项目,今天终于可以做了,希望2017把Symfony学的能会使 ...

  3. Python2 基于urllib2 的HTTP请求类

    一个利用urllib2模块编写的下载器,虽然有了requests模块,但是毕竟标准库 import urllib2,random class strong_down(): def __init__(s ...

  4. Token注解防止表单的重复提交

    注解的一些基础: 参见http://blog.csdn.net/duo2005duo/article/details/50505884和 http://blog.csdn.net/duo2005duo ...

  5. Lintcode解题报告

    1. Num.196 寻找缺失的数 给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数. 注意事项 可以改变序列中数的位置. 您在真实的面试中是否遇到过这个题 ...

  6. LeetCode 476. Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  7. Windows 服务 Error 14001

    如果碰到 windows 服务安装不了或者启动不了,报14001的配置文件错误,那么 可以从.exe.config入手,我这次遇到的是配置中有中文注释导致的. 我把空行以及中文的注释去掉以后,整个世界 ...

  8. AndroidPullToRefresh拉动效果配置

    最近用了 开源的 AndroidPullToRefresh 库,但是发现拉动时的效果有个很奇怪的地方,无论上下拉动,当列表滚动到顶部或底部时,会瞬间弹出半个列表高度的拉动提示,感觉很不舒服,这种提示根 ...

  9. Another Array of Orz Pandas

    Another Array of Orz Pandas 题目链接:http://acm.xidian.edu.cn/problem.php?id=1187 线段树 线段树维护区间和以及区间内各个数平方 ...

  10. 大数据揭示的10个常见JAVA编程错误

    初学者最常犯的编程错误是什么呢?有可能他们总是混淆等值(==)与赋值(=),或者 & 和 &&:也有可能是他们在循环中使用错误的分隔符(for (int i = 0, i &l ...