主: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

global_defs {
   router_id test
}
vrrp_script chk_redis 

     script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456" 
     interval 2 
     timeout 2
     fall 3
}
vrrp_instance redis {
    state BACKUP # 主也配置为SLAVE
    interface eth0  
    virtual_router_id 51 
    priority  150       
    nopreempt # 不抢占,注意加上
    advert_int 1        
    authentication {   
        auth_type PASS   
        auth_pass 123456
    }
    virtual_ipaddress {  
     172.16.0.107
    }
    track_script { 
         chk_redis 
    } 
    notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
    notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.105 6379"
    notify_fault /etc/keepalived/scripts/redis_fault.sh 
    notify_stop /etc/keepalived/scripts/redis_stop.sh  
}

redis_master.sh

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

redis_backup.sh

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

Slave(105)实例

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

redis_backup.sh

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

公共配置

redis_check.sh

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

redis_fault.sh

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

redis_stop.sh

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

启动keepalived:keepalived -D

查看ip漂移情况:ip a

配置要点:

双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. Xpath学习笔记

    最近复习自己上一年的课本,想起来刚学那个时候想做一个写日记的软件. 想不如做,用控制台瞎写了一个,一做就成了,没什么bug,期间使用Xpath来读数据,所以就稍微学了一下. 学习过程就这样做一点笔记, ...

  2. SqlServer创建数据表描述及列描述信息

    SqlServer创建数据表描述及列描述信息 Intro Q: 为什么要创建描述信息? A: 鼠标悬停在对应表和列上时,会出现描述信息,可以提高工作的效率,借助工具我们根据数据表可以生成Model,可 ...

  3. 700多个PHP版本随时切换,PHPWAMP共生模式与多档位综合教程。

    最近有学生向我咨询如何同时建立多个不同PHP版本站点,并自定义任意版本,软件是否可以多开,PHPWAMP如何设置才能与其他的环境同时使用等问题,本文将一一解决. 简单介绍一下PHPWAMP 你们应该会 ...

  4. 删除style的样式JQuery

      有些页面样式不规范,没有写在一个class里,例如:<div id="show" style="width:100px; padding-top:10px; f ...

  5. shell -- yes or no

    read -p "Do you want to .... [Y/N]? " yn while true; do case $yn in [Yy]|[Yy][Ee][Ss] ) br ...

  6. Windows离开模式(AwayMode)

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Man ...

  7. Lua 中的string库(字符串函数库)总结

    (字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...

  8. web前端入门

    看到很多同学在咨询:学习前端该怎么入门啊.推荐一下前端入门书籍啊什么的,作为一个过来人,我想告诉你一些小小技巧,避免走弯路: 1.先敲再学.如果你是零基础,就不要去每个标签,每个属性地去抠,因为里面有 ...

  9. 130道C#面试题

    C#/.Net/数据库笔试资料C#资料(一)1.静态成员和非静态成员的区别?答:静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做 ...

  10. 关于Kafka使用IBM Java报错解决方案

    安装环境 Ubuntu 14.04 Java IBM Java 1.7.0_79 Kakfa 2.10-0.8.2.1 使用bin/kafka-server-start.sh config/serve ...