keepalived + redis高可用方案

前言

主機(jī):
172.17.209.25
172.17.209.26

軟件版本:
keepalived-1.2.19.tar.gz
redis-2.8.1.tar.gz

一、安裝Redis

(1)安裝

tar -xvf redis-2.8.1.tar.gz
cd redis-2.8.1
make
mkdir -p /usr/local/redis/var
cd src
cp redis-server redis-sentinel redis-cli redis-check-dump redis-check-aof redis-benchmark /usr/local/redis/

(2)配置成系統(tǒng)服務(wù)

vi /etc/init.d/redis

#!/bin/bash 
# 
# init file for redis 
# 
# chkconfig: - 80 12
# description: redis daemon 
# 
# processname: redis 
# config: /usr/local/redis/redis.conf
# pidfile: /usr/local/redis/var/redis.pid
source /etc/init.d/functions 
    
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
    
PIDFILE=/usr/local/redis/var/redis.pid
CONF="/usr/local/redis/redis.conf"
    
case "$1" in
    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|reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|reload}" >&2
        exit 1
esac

(3)配置redis

vi /usr/local/redis/redis.conf

daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel notice
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes  
dbfilename dump.rdb
dir /usr/local/redis/var/
#8g memory 32*1024*1024*1024
maxmemory 34359738368
appendonly no

(4)配置自啟動(dòng)

chkconfig nginx on

(5)相關(guān)命令

啟動(dòng):service redis start
關(guān)閉:service redis stop

(6)查看服務(wù)

ps -ef | grep redis

(7)拷貝redis到另一臺(tái)器機(jī)9.26

scp -r /usr/local/redis/ root@172.17.209.26:/usr/local/
scp -r /etc/init.d/redis root@172.17.209.26:/etc/init.d/

二、安裝keepalived

(1)安裝

tar -zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir -p /etc/keepalived
mkdir -p /usr/local/keepalived/var/log
mkdir -p /usr/local/keepalived/scripts/redis

備注:在9.26上也要?jiǎng)?chuàng)建目錄:/etc/keepalived,/usr/local/keepalived/var/log,/usr/local/keepalived/scripts/redis

(3)配置keepalived.conf

vi /etc/keepalived/keepalived.conf

vrrp_script chk_redis {
                script "/usr/local/keepalived/scripts/redis/redis_check.sh"   ###監(jiān)控腳本
                interval 2                                        ###監(jiān)控時(shí)間
                fall 3   ###失敗嘗試3次
                rise 1   ###成功嘗試1次
}
vrrp_instance VI_1 {
        state MASTER                            ###設(shè)置為MASTER、BACKUP
        interface eth0                          ###監(jiān)控網(wǎng)卡,網(wǎng)卡必須有接網(wǎng)線,可以對(duì)外網(wǎng)通信的
        virtual_router_id 55                    ###主從需要在同一路由編號(hào)
        priority 101                            ###權(quán)重值
        authentication {
                     auth_type PASS             ###加密
                     auth_pass redis            ###密碼
        }
        track_script {
                chk_redis                       ###執(zhí)行上面定義的chk_redis
        }
        virtual_ipaddress {
             172.17.209.20 dev eth0 scope globa                         ###Keppalived虛擬出來的VIP
        }
        notify_master "/usr/local/keepalived/scripts/redis/redis_master.sh 172.17.209.26 6379"
        notify_backup "/usr/local/keepalived/scripts/redis/redis_backup.sh 172.17.209.26 6379"
        notify_fault  "/usr/local/keepalived/scripts/redis/redis_fault.sh"
        notify_stop   "/usr/local/keepalived/scripts/redis/redis_stop.sh"
}

備注:拷貝到9.26后,要改一下notify_master和notify_backup參數(shù)中的172.17.209.26為172.17.209.25;

(4)配置自啟動(dòng)

chkconfig keepalived on

(5)相關(guān)命令

啟動(dòng):service keepalived start
關(guān)閉:service keepalived stop

(6)查看服務(wù)

ps -ef | grep keepalived

(7)配置keepalived相關(guān)redis檢查腳本

(1)redis_master.sh

#!/bin/bash
REDISCLI="/usr/local/redis/redis-cli"
LOGFILE="/data/keepalived/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF $1 $2 >> $LOGFILE  2>&1
sleep 10 #延遲10秒以后待數(shù)據(jù)同步完成后再取消同步狀態(tài)
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

(2)redis_backup.sh

#!/bin/bash
REDISCLI="/usr/local/redis/redis-cli"
LOGFILE="/data/keepalived/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 $1 $2 >> $LOGFILE  2>&1

(3)redis_fault.sh

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

(4)redis_stop.sh

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

(5)redis_check.sh

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

將以上shell拷貝到目錄:/usr/local/keepalived/scripts/redis/,
然后賦權(quán):chmod 755 /usr/local/keepalived/scripts/redis/*.sh

(8)拷貝redis到另一臺(tái)器機(jī)9.26

scp -r /usr/sbin/keepalived root@172.17.209.26:/usr/sbin/
scp -r /etc/sysconfig/keepalived root@172.17.209.26:/etc/sysconfig/
scp -r /etc/init.d/keepalived root@172.17.209.26:/etc/init.d/
scp -r /usr/local/keepalived/scripts/redis/* root@172.17.209.26:/usr/local/keepalived/scripts/redis

三、測(cè)試方案

查看日志命令:tailf -500 /data/keepalived/log/keepalived-redis-state.log
查看redis主從角色命令:/usr/local/redis/redis-cli -p 6379 info replication
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容