关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785

功能ip地址安装软件
主redis10.13.6.13redis,keepalived
从redis10.13.6.16redis,keepalived
VIP10.13.6.17
一、redis主从搭建

    1.redis安装

    本文通过yum源的安装方式来安装(需要配置epel源),也可以通过源码编译的方式来安装  

[root@P2Pp_Red01 ~]# yum install -y redis
[root@P2Pp_Red02 ~]# yum install -y redis

    2.修改配置文件

        ①、主redis需要修改的文件及内容

[root@P2Pp_Red01 ~]# vi /etc/redis.conf
bind 0.0.0.0
其余都可以安装默认状态

        ②、从redis需要修改的文件及内容

[root@P2Pp_Red02 ~]# vi /etc/redis.conf
bind 0.0.0.0
slaveof 10.13.6.13 6379 //指定主redis的地址与端口

    3.查看主从状态

[root@P2Pp_Red01 ~]# redis-cli INFO |grep role -A 3
role:master
slave0:10.13.6.16,45270,online
db0:keys=6,expires=0
[root@P2Pp_Red02 ~]#  redis-cli INFO |grep role -A 3
role:slave
master_host:10.13.6.13
master_port:6379
master_link_status:up

二、使用keepalived对redis做高可用

    1.安装keepalived,两台机器都需要安装

[root@P2Pp_Red01 ~]# yum install -y keepalived
[root@P2Pp_Red02 ~]# yum install -y keepalived

    2.准备配置文件

        ①、主redis的配置文件,关于各行代表的意思,请移步我的另外一篇文档,链接见文章开头

[root@P2Pp_Red01 scripts]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.13.4.17
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_redis {
    script "killall -0 redis-server"
    interval 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id  100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.13.6.17
    }
track_script {
    chk_redis
}
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
        notify_fault  /etc/keepalived/scripts/redis_fault.sh
        notify_stop   /etc/keepalived/scripts/redis_stop.sh

}
~[root@P2Pp_Red01 ~]# vi /etc/keepalived/scripts/redis_master.sh 

#!/bin/bash
REDISCLI="/usr/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.13.4.13 6379 >> $LOGFILE  2>&1
sleep 10
#延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
~
[root@P2Pp_Red01 ~]# vi /etc/keepalived/scripts/redis_backup.sh 

#!/bin/bash
REDISCLI="/usr/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1

sleep 15
#延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.13.4.13 6379 >> $LOGFILE  2>&1
[root@P2Pp_Red01 scripts]# vi /etc/keepalived/scripts/redis_stop.sh 

#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[stop]" >> $LOGFILE
date >> $LOGFILE
[root@P2Pp_Red01 scripts]# vi /etc/keepalived/scripts/redis_fault.sh 

#!/bin/bash
GFILE=/var/log/keepalived-redis-state.log

echo "[fault]" >> $LOGFILE
date >> $LOGFILE

~

        ②、准备从redis的配置文件

[root@P2Pp_Red02 ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 10.13.4.13
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_redis {
    script "killall -0 redis-server"
    interval 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.13.6.17
    }
#track_script {
#    chk_redis
#}
#        notify_master /etc/keepalived/scripts/redis_master.sh
#        notify_backup /etc/keepalived/scripts/redis_backup.sh
#        notify_fault  /etc/keepalived/scripts/redis_fault.sh
#        notify_stop   /etc/keepalived/scripts/redis_stop.sh

[root@P2Pp_Red02 ~]# vi /etc/keepalived/scripts/redis_master.sh 

#!/bin/bash
REDISCLI="/usr/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.13.6.13 6379 >> $LOGFILE  2>&1
sleep 10
#延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
~
[root@P2Pp_Red02 ~]# vi /etc/keepalived/scripts/redis_backup.sh 

#!/bin/bash
REDISCLI="/usr/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave....

sleep 15
#延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 10.13.6.13 6379 >> $LOGFILE  2>&1
其余的两个文件跟主redis是一样的

本处将不再给模拟故障,但是测试时通过的,现在已经在生产环境中使用