標籤:
Redis主從配置及通過Keepalived實現Redis自動切換高可用
| [日期:2014-07-23] |
來源:Linux社區 fuquanjun |
[字型:大 中 小] |
一:環境介紹:
Master: 192.168.1.4
Slave: 192.168.1.5
Virtural IP Address (VIP): 192.168.1.253
二:設計思路:
當 Master 與 Slave 均運作正常時, Master負責服務,Slave負責Standby;
當 Master 掛掉,Slave 正時, Slave接管服務,同時關閉主從複製功能;
當 Master 恢複正常,則從Slave同步資料,同步資料之後關閉主從複製功能,恢複Master身份,於此同時Slave等待Master同步資料完成之後,恢複Slave身份。
然後依次迴圈。
需要注意的是,這樣做需要在Master與Slave上都開啟本地化策略,否則在互相自動切換的過程中,未開啟本地化的一方會將另一方的資料清空,造成資料完全丟失。
三:安裝配置前準備工作
1.在主伺服器192.168.1.4上面做下面操作
echo "192.168.1.4 test01" >> /etc/hosts
echo "192.168.1.5 test" >> /etc/hosts
2.在從伺服器192.168.1.5上面做下面操作
echo "192.168.1.4 test01" >> /etc/hosts
echo "192.168.1.5 test" >> /etc/hosts
四:主伺服器配置redis
1.下載安裝redis軟體包
wget http://download.redis.io/releases/redis-2.8.12.tar.gztar xf redis-2.8.12.tar.gz
cd redis-2.8.12
make && make install
cd src/
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /usr/local/bin
cd /usr/local/bin
ls -ll
然後將源碼中的 redis.conf 複製到 /etc/redis.conf
cp /root/redis-2.8.12/redis.conf /etc/redis.conf
修改 /etc/redis.conf裡面可以把 daemonize no 修改為daemonize yes
就可以預設在後台執行redis-server了。
再製作一個 init.d 的啟動指令碼:
vim /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
chmod o+x /etc/init.d/redis-server
chkconfig --add redis-server
service redis-server start
--------------------------------------分割線 --------------------------------------
Ubuntu 14.04下Redis安裝及簡單測試 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis叢集明細文檔 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis系列-安裝部署維護篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3安裝Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis設定檔redis.conf 詳解 http://www.linuxidc.com/Linux/2013-11/92524.htm
CentOS 6.3下Haproxy+Keepalived+Apache配置筆記 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 實現WEB群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Keepalived+Haproxy配置高可用負載平衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
Haproxy+Keepalived構建高可用負載平衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
--------------------------------------分割線 --------------------------------------
五:從發伺服器配置redis
從伺服器,配置一樣,只不過 修改/etc/redis.conf 中
slaveof <masterip> <masterport>修改為
slaveof 192.168.1.4 6379
然後開啟從伺服器的redis服務。
start redis-server start
六:進行redis主從測試
#主伺服器
redis-cli -p 6379 set hello world
#從伺服器
redis-cli -p 6379 get hello
"world"
#主伺服器
redis-cli -p 6379 set hello world2
#從伺服器
redis-cli -p 6379 get hello
"world2"
redis-cli -p 6379 set hello world
(error) READONLY You can‘t write against a read only slave.
成功配置主從redis伺服器,由於配置中有一條從伺服器是唯讀,所以從伺服器沒法設定資料,只可以讀取資料。
Redis主從配置及通過Keepalived實現Redis自動切換高可用