keepalived + redis 主備容災部署


keepalived + redis 主備容災部署

現網環境中有兩個數據庫主機,master, 和slave。以及一個vip

Master: 192.168.11.149

Slave:192.168.11.150

Vip:192.168.200.200

節點A Redis-Master 主節點,節點B Redis-Slave 備用節點,虛擬IP是對外提供訪問的IP。虛擬IP在某個時刻只能屬於某一個節點,另一個節點作為備用節點存在。當主節點不可用時,備用節點接管虛擬IP,提供正常服務。

安裝redis

redis master安裝

下載redis-3.0.3.tar.gz 創建redis 賬戶

<code>#useradd  -d /home/cin_redis –s /bin/bash –m cin_redis

# passwd cin_redis
/<code>

上傳redis-3.0.3.tar.gz 解壓

<code># tar –xzvf redis-3.0.3.tar.gz

#cd rediis-3.0.3/src

#mak MALLOC=libc

#make PREFIX=$HOME install
/<code>

在redis的解壓目錄下有一個redis.conf 文件,編輯redis.conf文件

<code>daemonize yes	後臺模式運行

port 15093		端口

logfile “/home/cin_redis/redis-15093.log”

pidfile “/home/cin_redis/redis-15093.pid”
/<code>

可以把該配置文件拷貝到bin目錄下修改;啟動redis

<code># redis-server redis.conf
/<code>

redis slave 安裝

redis slave機器上同樣安裝redis 數據庫,安裝步驟同2.1安裝,修改redis.conf 文件

<code>#後臺模式運行
daemonize yes	

port 15093

logfile “/home/cin_redis/redis-15093.log”

pidfile “/home/cin_redis/redis-15093.pid”

slaveof 192.168.11.149 15093 
/<code>

可以把該配置文件拷貝到bin目錄下修改;啟動redis

<code>#redis-server redis.conf
/<code>

用redis-cli 客戶端連接redis-master數據庫,查看replication

keepalived + redis 主備容災部署

用redis-cli客戶端連接redis-slave數據庫,查看replication

keepalived + redis 主備容災部署

安裝keepalived

下載keepalived-1.2.2 創建keepalived 賬戶

<code>#useradd –m keepalived –d /home/keepalived –s /bin/bash

#passwd keepalived
/<code>

上傳keepalived-1.2.23.tar.gz

<code>#tar –xzvf keepalived-1.2.23.tar.gz

#cd keepalived-1.2.23

#./configure –prefix=$HOME/keepalive

# make &make install

# cp  -r  /home/keepalived/keepalive/etc/keepalived  /etc 

# cp  /home/keepalived/keepalive/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d

#cp /home/keepalived/keepalive/etc/sysconfig/keepalived  /etc/sysconfig

#ln –s /home/keepalived/keepalive/sbin/keepalived  /usr/sbin/

#chkconfig –add keepalived
/<code>

按照以上步驟分別在redis-master 和 redis-slave 主機上安裝keepalived工具

配置keepalived

redis master 配置

按照上面的步驟安裝完keepalived,vim 打開/etc/keepalived下面的keepalived.conf 文件配置

<code>! Configuration File for keepalived

vrrp_script chk_redis {
   >

在/etc/keepalived 目錄下創建scripts,

<code>#cd /etc/keepalived/scripts

#touch redis_master.sh

#touch redis_backup.sh

#touch redis_fault.sh]

#touch redis_stop.sh

#touch redis_check.sh
/<code>

redis_master.sh : 當keepalived切換成master時,會觸發執行此腳本

redis_backuo.sh : 當keepalived 切換成slave時,會觸發執行此腳本

redis_fault.sh : 當keepalived 出錯時,會觸發執行此腳本

redis_stop.sh : 當keepalived 停止時,會觸發執行次腳本

redis_check.sh : keepalived定時調用此腳本檢測redis 數據庫是否連接正常

redis_master.sh文件內容:

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.149"
REMOTEIP="192.168.11.150"
PORT="15093"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Beging master..." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF NO ONE >> $LOGFILE 2>&1
/<code>

redis_backup.sh文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.149"
REMOTEIP="192.168.11.150"
PORT="15093"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PROT  SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_fault.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.149"
REMOTEIP="192.168.11.150"
PORT="15093"

echo "[ERROR]-----keepalived is fault,change local redis to slave-----" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_stop.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.149"
REMOTEIP="192.168.11.150"
PORT="15093"

echo "[ERROR]-----keepalived is stop,change local redis to slave-----" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_check.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.149"
REMOTEIP="192.168.11.150"
PORT="15093"

ALIVE=`$REDISCLI -h $LOCALIP -p $PORT PING`

if [ "$ALIVE" == "PONG" ];then
   echo "[INFO] `date +'%Y-%m-%d:%H:%M:%S'` :$LOCALIP local redis is health." >> $LOGFILE
   exit 0
else
   service keepalived stop
   echo "[ERROR] `date +'%Y-%m-%d:%H:%M:%S'` :$LOCALIP local redis is not health." >> $LOGFILE
   exit 1
fi

/<code>

redis slave 配置

按照上面的步驟安裝完keepalived,vim 打開/etc/keepalived下面的keepalived.conf 文件配置

<code>! Configuration File for keepalived

vrrp_script chk_redis {
   >

在/etc/keepalived 目錄下創建scripts,

<code>#cd /etc/keepalived/scripts

#touch redis_master.sh

#touch redis_backup.sh

#touch redis_fault.sh

#touch redis_stop.sh

#touch redis_check.sh
/<code>

redis_master.sh : 當keepalived切換成master時,會觸發執行此腳本

redis_backuo.sh : 當keepalived 切換成slave時,會觸發執行此腳本

redis_fault.sh : 當keepalived 出錯時,會觸發執行此腳本

redis_stop.sh : 當keepalived 停止時,會觸發執行次腳本

redis_check.sh : keepalived定時調用此腳本檢測redis 數據庫是否連接正常

redis_master.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.150"
REMOTEIP="192.168.11.149"
PORT="15093"

echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Beging master..." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF NO ONE >> $LOGFILE 2>&1

/<code>

redis_backup.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.150"
REMOTEIP="192.168.11.149"
PORT="15093"

echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_fault.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.150"
REMOTEIP="192.168.11.149"
PORT="15093"

echo "[ERROR]-----keepalived is fault,change local redis to slave-----" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_stop.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.150"
REMOTEIP="192.168.11.149"
PORT="15093"

echo "[ERROR]-----keepalived is stop,change local redis to slave-----" >> $LOGFILE
date >> $LOGFILE
echo "Beging slave..." >> $LOGFILE 2>&1
sleep 10
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1

/<code>

redis_check.sh 文件內容

<code>#!/bin/bash

KPATH=/home/keepalived
RPATH=/home/cin_redis

REDISCLI=$RPATH/bin/redis-cli

LOGFILE=$KPATH/log/keepalived-redis-state.log

LOCALIP="192.168.11.150"
REMOTEIP="192.168.11.149"
PORT="15093"

ALIVE=`$REDISCLI -h $LOCALIP -p $PORT PING`

if [ "$ALIVE" == "PONG" ];then
   echo "[INFO] `date +'%Y-%m-%d:%H:%M:%S'` :$LOCALIP local redis is health." >> $LOGFILE
   exit 0
else
   service keepalived stop
   echo "[ERROR] `date +'%Y-%m-%d:%H:%M:%S'` :$LOCALIP local redis is not health." >> $LOGFILE
   exit 1
fi
/<code>


分享到:


相關文章: