1. 程式人生 > >我的redis+keepalived主從自動切換配置指令碼

我的redis+keepalived主從自動切換配置指令碼

echo "192.168.0.246 redismaster" >> /etc/hosts
echo "192.168.0.249 redisslave" >> /etc/hosts


echo 1 > /proc/sys/vm/overcommit_memory 
echo 511 > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled


$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz
$ tar xzf redis-3.2.0.tar.gz
$ cd redis-3.2.0
$ make




cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-rdb /usr/local/bin


cp redis.conf /etc/


修改 /etc/redis.conf裡面可以把  daemonize no 修改為daemonize yes




vi /etc/init.d/redis-server
==========================服務指令碼
vi /etc/init.d/redis-server


#!/usr/bin/env bash


#


# redis start up the redis server daemon


#


# chkconfig: 345 99 99


# description: redis service in /etc/init.d/redis \


#            chkconfig --add redis or chkconfig --list redis \


#            service redis start  or  service redis stop


# processname: redis-server


# config: /etc/redis.conf


PATH=/usr/local/bin:/sbin:/usr/bin:/bin
 
REDISPORT=6379


EXEC=/usr/local/bin/redis-server


REDIS_CLI=/usr/local/bin/redis-cli


PIDFILE=/var/run/redis.pid


CONF="/etc/redis.conf"


#make sure some dir exist


if [ ! -d /var/lib/redis ] ;then


    mkdir -p /var/lib/redis


    mkdir -p /var/log/redis


fi
 


case "$1" in


    status)


        ps -A|grep redis


        ;;


    start)


        if [ -f $PIDFILE ]


        then


                echo "$PIDFILE exists, process is already running or crashed"


        else


                echo "Starting Redis server..."


                $EXEC $CONF


        fi


        if [ "$?"="0" ]


        then


              echo "Redis is running..."


        fi


        ;;


    stop)


        if [ ! -f $PIDFILE ]


        then


                echo "$PIDFILE does not exist, process is not running"


        else


                PID=$(cat $PIDFILE)


                echo "Stopping ..."


                $REDIS_CLI -p $REDISPORT SHUTDOWN


                while [ -x ${PIDFILE} ]


              do


                    echo "Waiting for Redis to shutdown ..."


                    sleep 1


                done


                echo "Redis stopped"


        fi


        ;;


  restart|force-reload)


        ${0} stop


        ${0} start


        ;;


  *)


    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2


        exit 1


esac


[email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
chmod +x /etc/init.d/redis-server
chkconfig --add redis-server
service redis-server restart


從機配置=========================================
從伺服器,配置一樣,只不過 修改/etc/redis.conf 中


slaveof <masterip> <masterport>修改為


slaveof 192.168.0.246 6379
===========================================================================================
分別keepalived    =====================================master
! Configuration File for keepalived


vrrp_script chk_redis {
    script "/etc/keepalived/scripts/redis_check.sh"
    interval 2
    }
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.0.246
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }


track_script {
    chk_redis
    }
virtual_ipaddress {
        192.168.0.239
    }
        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
}


vi /etc/keepalived/keepalived.conf ===========================slave


! Configuration File for keepalived
vrrp_script chk_redis {
    script "/etc/keepalived/scripts/redis_check.sh" 
    interval 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
mcast_src_ip 192.168.0.249
    priority 10
advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
    chk_redis     
    }
virtual_ipaddress {
        192.168.0.239
    }
        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
}


在Master和Slave上建立監控Redis的指令碼
mkdir /etc/keepalived/scripts
vi /etc/keepalived/scripts/redis_check.sh


#!/bin/bash 
ALIVE=`/usr/local/bin/redis-cli PING` 
if [ "$ALIVE" == "PONG" ]; then
echo $ALIVE 
exit 0 
else
echo $ALIVE 
exit 1 
fi


===============Master上編寫========================================
vi /etc/keepalived/scripts/redis_master.sh


#!/bin/bash
REDISCLI="/usr/local/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 192.168.0.249 6379 >> $LOGFILE  2>&1
sleep 10 #延遲10秒以後待資料同步完成後再取消同步狀態 
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1




vi /etc/keepalived/scripts/redis_backup.sh


#!/bin/bash 
REDISCLI="/usr/local/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 192.168.0.249 6379 >> $LOGFILE  2>&1




[email protected]
@@@@@@@@@@@@@@@@@@


vi /etc/keepalived/scripts/redis_master.sh


#!/bin/bash 
REDISCLI="/usr/local/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 192.168.0.246 6379 >> $LOGFILE  2>&1
sleep 10 #延遲10秒以後待資料同步完成後再取消同步狀態 
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1


vi /etc/keepalived/scripts/redis_backup.sh


#!/bin/bash 
REDISCLI="/usr/local/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 192.168.0.246 6379 >> $LOGFILE  2>&1




然後在Master與Slave建立如下相同的指令碼:===============
vi /etc/keepalived/scripts/redis_fault.sh


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


vi /etc/keepalived/scripts/redis_stop.sh


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