現網環境中有兩個數據庫主機,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
用redis-cli客戶端連接redis-slave數據庫,查看replication
安裝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>