为什么很多人用keepalived来实现redisredis 故障转移移

一步一步搭建Redis + Keepalived主从高可用之Redis主从配置(二) - 简书
一步一步搭建Redis + Keepalived主从高可用之Redis主从配置(二)
【张三从小就感觉自己不是亲生的。一次他在外面玩,不小心掉粪坑里了,她妈看到了说:“这孩子我们不要了吧!回去再生一个吧。”后来长大点,一次发高烧了,她妈用手摸了下他的额头,立刻把手缩回去了说:“好烫啊!”他爸立马一个大嘴巴子抽了过去说:“看把你妈烫的!”这是亲的吗?????】
提出问题**
Redis主从如何安装配置???
1.1 安装前提
IT资源管理系统的安装、配置步骤,涉及到的相关软件主要有:Linux操作系统,REDIS相关版本要求如下:
Linux版本:Red Hat Enterprise Linux Server release 6.7
REDIS版本:rredis-3.0.0.tar.gz
REDISGEM版本:redis-3.3.0.gem
OPENSSL版本:openssl-1.0.1e-42.el6.x86_64
环境准备如下:
操作系统:安装Linux操作系统
语言环境:安装中文字符集(UTF-8)
Redis Master: 192.68.3.67(主机)
Redis Slave: 192.68.3.68(从机)
Keepalived VIP: 192.68.3.69(对外IP,keepalived使用 VIP, VIP 可以在 - - redis1 , redis2 上漂移 )
1.2 REDIS安装(主从)
Redis的安装请参考这篇文章。
redis配置主从关系
redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port既可以。
从机修改内容
slaveof 192.168.3.67 6379 (是主机的ip地址)
masterauth 888888 如何有密码新增
修改如下内容(主从都要修改):
daemonize no 改为 yes
# 是否后台运行
以rascache用户登录RASDISCACHE-SVR和RASDISCACHE-BAK ,分别启动2个redis服务
sh startredis.sh
启动之后使用命令查看redis的启动情况
ps -ef|grep redis
1.3 测试redis的主从复制
以rascache用户登录RASDISCACHE-SVR,主机上读写:
cd /rasdis/redis/bin
./redis-cli -h 192.168.3.67 -p 6379 -a 888888 set fristkey LookBack
./redis-cli -h 192.168.3.67 -p 6379 -a 888888 get fristkey
以rascache用户登录RASDISCACHE-BAK,从机上读写:
cd /rasdis/redis/bin
./redis-cli -h 192.168.3.68 -p 6379 -a 888888 set fristkey LookBack
./redis-cli -h 192.168.3.68 -p 6379 -a 888888 get fristkey
以rascache用户登录RASDISCACHE-SVR和RASDISCACHE-BAK ,查看主从redis的log:
来自老舍《离婚》
爱是个最热,同时又是最冷的东西。
假如人人有个满意的妻子,世界上绝不会闹共产党。
天下哪有完全不自私的愉快呢?
平庸的出奇也能引人注意。
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!
### CSDN博客专家,CSDN签约讲师,51CTO签约讲师。我已委托“维权骑士”()为我的文章进行维权行动1051人阅读
Redis(22)
Redis + Keepalived主从集群的搭建及故障转移
设计思路:
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。
&&&&需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
集群可以是单台机器的不同端口,也可以是多台机器,通常实际应用是,多台机器。假设目前已经安装好了2台机器,IP和端口分别是
主Redis服务器IP:192.168.1.148
主Redis服务器端口号:6379
从Redis服务器IP:192.168.1.158
从Redis服务器端口号:6379
设定一个虚拟IP
192.168.1.200
进入root用户
xiaoyao@xiaoyao-virtual-machine:~$ su
root@xiaoyao-virtual-machine:/home/xiaoyao#
主从两个机器上分别安装Keepalived
root@xiaoyao-virtual-machine:/home/xiaoyao# apt-get install keepalived
主从服务器分别修改hosts文件
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/hosts
在文件末尾添加
192.168.1.148 redis148
192.168.1.158 redis158
主服务器创建配置文件
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/keepalived.conf
配置内容:
! Configuration File for keepalived
global_defs {
router_id redis148
vrrp_script chk_redis
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
vrrp_instance redis {
state MASTER # master set to SLAVE also
interface eth0
virtual_router_id 50
nopreempt # no seize,must add
advert_int 1
authentication {
#all node must same
auth_type PASS
auth_pass 1111
virtual_ipaddress {
192.168.1.200/24
track_script {
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.158 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.158 6379"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
这里可能会出错,一般虚拟机配置成:interface eth0,但是有的机器可能是em1,这个要根据情况来配置,否则创建虚拟IP会失败。
举个例子:
查看IP后是下面的样子
root@ubuntu:/etc/init.d# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
iface em1 inet static
address 192.168.0.33
netmask 255.255.255.0
gateway 192.168.0.1
那么就应该配置成
interface em1
从服务器创建配置文件
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/keepalived.conf
配置内容:
! Configuration File for keepalived
global_defs {
router_id redis158
vrrp_script chk_redis
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
vrrp_instance redis {
state BACKUP
interface eth0
virtual_router_id 50
advert_int 1
authentication {
#all node must same
auth_type PASS
auth_pass 1111
virtual_ipaddress {
192.168.1.200/24
track_script {
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.148 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.148 6379"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
在主服务器和从服务器上分别创建监控Redis的脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# mkdir /etc/keepalived/scripts
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_check.sh
脚本内容:
#!/bin/bash
ALIVE=`/usr/local/bin/redis-cli -h $1 -p $2 PING`
LOGFILE="/var/log/keepalived-redis-check.log"
echo "[CHECK]" && $LOGFILE
date && $LOGFILE
if [ $ALIVE == "PONG" ]; then :
echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" && $LOGFILE 2&&1
echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " && $LOGFILE 2&&1
Keepalived在转换状态时会根据状态来呼叫:
当进入Master状态时会呼叫redis_master
当进入Backup状态时会呼叫redis_backup
当发现异常情况时进入Fault状态呼叫redis_fault
当Keepalived程序终止时则呼叫redis_stop
下面在主从服务器分别创建下列脚本
在主服务器上创建redis_master脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" && $LOGFILE
date && $LOGFILE
echo "Being master...." && $LOGFILE 2&&1
echo "Run MASTER cmd ..." && $LOGFILE 2&&1
$REDISCLI SLAVEOF $2 $3 && $LOGFILE
sleep 10 #delay 10 s wait data async cancel sync
echo "Run SLAVEOF NO ONE cmd ..." && $LOGFILE
$REDISCLI SLAVEOF NO ONE && $LOGFILE 2&&1
在主服务器上创建redis_backup脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /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 "Run SLAVEOF cmd ..." && $LOGFILE
$REDISCLI SLAVEOF $2 $3 && $LOGFILE 2&&1
# echo "Being slave...." && $LOGFILE 2&&1
sleep 15 #delay 15 s wait data sync exchange role
在主服务器上创建redis_fault脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" && $LOGFILE
date && $LOGFILE
在主服务器上创建redis_stop脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" && $LOGFILE
date && $LOGFILE
在从服务器上创建redis_master脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
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 $2 $3 && $LOGFILE
#echo "SLAVEOF $2 cmd can't excute ... " && $LOGFILE
sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." && $LOGFILE
$REDISCLI SLAVEOF NO ONE && $LOGFILE 2&&1
在从服务器上创建redis_backup脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /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
echo "Run SLAVEOF cmd ..." && $LOGFILE 2&&1
$REDISCLI SLAVEOF $2 $3 && $LOGFILE
sleep 100 #delay 10 s wait data async cancel sync
在从服务器上创建redis_fault脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" && $LOGFILE
date && $LOGFILE
在从服务器上创建redis_stop脚本
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" && $LOGFILE
date && $LOGFILE
主服务器和从服务器分别给脚本添加可执行权限
root@xiaoyao-virtual-machine:/home/xiaoyao# chmod +x /etc/keepalived/scripts/*.sh
启动服务测试
启动主服务器上的Redis
root@xiaoyao-virtual-machine:/home/xiaoyao# service redis start
启动从服务器上的Redis
root@xiaoyao-virtual-machine:/home/xiaoyao# service redis start
启动主服务器上的Keepalived
root@xiaoyao-virtual-machine:/home/xiaoyao# /etc/init.d/keepalived start
启动从服务器上的Keepalived
root@xiaoyao-virtual-machine:/home/xiaoyao# /etc/init.d/keepalived start
通过虚拟ip连接Redis
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.200 INFO
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.158,port=6379,state=online,offset=15,lag=1
master_repl_offset:15
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:14
通过虚拟ip插入一条数据
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.200 SET Hello Redis
主从服务器均能读到此条数据
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.200 GET Hello
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.148 GET Hello
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.158 GET Hello
在主服务器上杀死redis进程
root@xiaoyao-virtual-machine:/home/xiaoyao# killall -9 redis-server
查看主服务器上的Keepalived日志
root@xiaoyao-virtual-machine:/home/xiaoyao# tailf /var/log/keepalived-redis-state.log
查看从服务器上的Keepalived日志
root@xiaoyao-virtual-machine:/home/xiaoyao# tailf /var/log/keepalived-redis-state.log
查看从服务器上的信息
root@xiaoyao-virtual-machine:/home/xiaoyao# redis-cli -h 192.168.1.158 INFO
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:0
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30719次
排名:千里之外
原创:52篇
(1)(4)(6)(3)(4)(5)(21)(1)(7)(1)Redis双机热备(keepalived实现) -
- ITeye博客
博客分类:
一 :场景:
server1:192.168.1.142
redis,keepalived
server2: 192.168.1.143
redis,keepalived
VIP:192.168.1.42
用户只要访问通过集群VIP访问redis服务。要求这个架构在服务端保证HA
两个redis server主从备份。提供redis 服务HA;
两个keepalived 服务主从备份,提供VIP 服务的HA;
1)每台redis server分别有主,从两个配置文件(redis.conf, redis_slave.conf),通过启动脚本启动服务,启动脚本会检测这个redis集群中的其他服务器的角色,如果有master 服务存在,则以slave角色启动,否则将自己以master服务器启动;
2) keepalived 监控脚本,定时(频率:每秒一次)检测当前服务器是否获取集群VIP,如果获取集群VIP,则将本服务器上的redis服务器设置为master。同时将远端的其他redis服务器设置为slave;保证获取集群VIP的redis 服务器角色为master,其他的设置为slave。
3) keepalived 监控脚本,还会自动检测当前redis服务器是否正常,如果连续两次检测异常,则停掉本本机的keepalived服务,释放集群VIP,让去漂移到其他可以提供redis 服务的服务器上;
四:redis 安装配置
1. redis的安装目录
# /usr/local/redis-2.8.3
2:redis 启动脚本配置
#!/bin/bash
REDISPATH=/usr/local/redis-2.8.3
REDISCLI=$REDISPATH/bin/redis-cli
LOGFILE=$REDISPATH/logs/redis-state.log
LOCALIP=192.168.1.142
REMOTEIP=192.168.1.152
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" &&& $REMOTEREDISROLE ; then
#start as slave
echo "slave" && $LOGFILE
$REDISPATH/bin/redis-server $REDISPATH/conf/redis_slave.conf
#start as master
echo "master" && $LOGFILE
$REDISPATH/bin/redis-server $REDISPATH/conf/redis.conf
这里是142的配置,另外一台服务器只要修改IP地址,其他不变
LOCALIP=192.168.1.152
REMOTEIP=192.168.1.142
3:redis 配置文件,按照正常的主从配置。
五: keepalived安装配置
keepalived的安装目录
# /usr/local/keepalived-1.2.9
2. keepalived.conf 配置
! Configuration File for keepalived
vrrp_script chk_redis {
script "/usr/local/keepalived-1.2.9/etc/keepalived/chk_redis.sh"
interval 3
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 2
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
virtual_ipaddress {
192.168.1.42
track_script {
3:chk_redis.sh 监控脚本配置
#!/bin/bash
REDISPATH=/usr/local/redis-2.8.3
REDISCLI=$REDISPATH/bin/redis-cli
LOGFILE=$REDISPATH/logs/redis-state.log
LOCALIP=192.168.1.152
REMOTEIP=192.168.1.142
VIP=192.168.1.42
VIPALIVE=`ip a | grep "$VIP"`
if [ "$VIPALIVE" == "" ]; then
echo "[info]:"`date`" keepalived server is pengding or stop" && $LOGFILE
echo "bbb" && $LOGFILE
#check local service is running
if [ "`$REDISCLI PING`" == "PONG" ]; then
# check local redis server role.
REDISROLE=`$REDISCLI info | grep "role"`
if grep "role:slave" &&& $REDISROLE ; then
#change local redis server as master
echo "[info1]:"`date`" Run SLAVEOF NO ONE cmd ..." && $LOGFILE
$REDISCLI SLAVEOF NO ONE && $LOGFILE 2&&1
#change remoting redis server as slave
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" &&& $REMOTEREDISROLE ; then
echo "[info2]:"`date`" Run remote server SLAVEOF cmd ..." && $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 && $LOGFILE
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" &&& $REMOTEREDISROLE ; then
echo "[info3]:"`date`" Run remote server SLAVEOF cmd ..." && $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 && $LOGFILE
echo "[warn]:"`date`"
redis server($LOCALIP) is not health..." && $LOGFILE
if [ "`$REDISCLI PING`" != "PONG" ]; then
echo "[error]:"`date`"
redis server($LOCALIP) will be stop..." && $LOGFILE
service keepalived stop
这里是152的配置,另外一台服务器只要修改IP地址,其他不变。如上代码,这里不贴出来了。
只要任何一台keepalived正常,就可以提供vip服务。 redis的master会随着vip的漂移而改变,谁获得了vip,谁就具有redis 的master角色,其他都会置为slave角色
shiguanghui
浏览: 120357 次
非常感谢你提供的jars。
tomcat启动是没报错,不过,session无法保存到red ...
我也是这样配置了, 但是配置
&Valve class ...
我检测到这个redis访问不正常。我肯定会停掉keepaliv ...
非常感谢你的贡献,但是我发现个错误chk_redis.sh 脚 ...Redis主从配置及通过Keepalived实现Redis自动切换高可用_服务器应用_Linux公社-Linux系统门户网站
你好,游客
Redis主从配置及通过Keepalived实现Redis自动切换高可用
来源: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
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /usr/local/bin
cd /usr/local/bin
然后将源码中的 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
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
& & & & ;;
& & & & 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
chmod o+x /etc/init.d/redis-server
chkconfig --add redis-server
service redis-server start
--------------------------------------分割线 --------------------------------------
14.04下Redis安装及简单测试
Redis集群明细文档
Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis
Redis系列-安装部署维护篇
6.3安装Redis
Redis配置文件redis.conf 详解
CentOS 6.3下Haproxy+Keepalived+Apache配置笔记
Haproxy + KeepAlived 实现WEB群集 on CentOS 6
Keepalived+Haproxy配置高可用负载均衡
Haproxy+Keepalived构建高可用负载均衡
--------------------------------------分割线 --------------------------------------
五:从发服务器配置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
redis-cli -p 6379 set hello world2
redis-cli -p 6379 get hello
redis-cli -p 6379 set hello world
(error) READONLY You can't write against a read only slave.
成功配置主从redis服务器,由于配置中有一条从服务器是只读的,所以从服务器没法设置数据,只可以读取数据。
更多详情见请继续阅读下一页的精彩内容:
相关资讯 & & &
& (04月03日)
& (03月09日)
& (07月09日)
& (03月27日)
& (02月09日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款1&& Redis简介及安装
Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。
Redis从它的许多竞争继承来的三个主要特点:
Redis数据库完全在内存中,使用磁盘仅用于持久性。
相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。
Redis可以将数据复制到任意数量的从服务器。
1.1 REDIS优势
异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。
操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。
多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。
1.2 REDIS安装
在redis官网下载最新的源码包
http://download.redis.io/releases/redis-2.8.3.tar.gz
# tar xzf redis-3.0.0.tar.gz
# mv redis-3.0.0 /usr/local/redis
# cd /usr/local/redis
# make && make install
查看命令运行结果,如果是0则是成功
1.3 REDIS启动
# redis-server
第一次启动时可能会有提示的warning信息;可以忽略,但最好是按照提示的处理办法修改。
1.4 REDIS客户端启动
# redis-cli
1.5 验证客户端操作
# redis& set iom dtsoft
# redis& get iom
2&& 主从自动切换原理
2.1 场景描述
假设有两台服务器A,B,A为主节点,B为从节点,每台上都装有keepalived和redis,并且已为keepalived分配一个VIP,下面分两种情况讨论:
B-redis挂掉
VIP仍为A服务器占用,用户读写不受任何影响,B-keepalived检测到B-redis挂掉后自动关掉本身服务(其实也可以不关掉keepalived服务,此处是为了尽量保持和A-keepalived相同的配置);问题修复后,以从机配置文件启动B-redis,启动B-keepalived, A、B两节点回到初始状态。
A-redis挂掉
A-keepalived检测到A-redis挂掉后自动关掉本身服务,VIP被B服务器占用,B-redis设置为主节点;问题修复后,A-redis以从机配置文件重启并自动同步B-redis数据,同步完成后开启A-keepalived, VIP重回A 服务器,A-redis设置成主节点, B-redis设置为A-redis的从节点,A、B两节点回到初始状态
2.1 切换要求
A,B上的keepalived要能在本服务器上的redis挂掉后关掉本身服务。
不论A-redis还是B-redis,都是以从机配置文件重启(第一次安装,或两个服务都宕掉重启等特殊情况例外);
A-reids必须在同步完成后才能开启keepalived;
A-redis必须在本服务器获得VIP后,设置为主节点;
丢失VIP的服务器要将本机上的redis置为从节点(如果redis还没挂)。
1,4,5可以用keepalived的配置脚本解决,2,3可以自己编写主从启动脚本控制。
3&& keepalived配置
3.1 A-keepalived配置
红字为手工加的备注,原文件里没有。
vi /etc/f文件
global_defs {
router_id LVS_MASTER
vrrp_script monitor_redis {
script &/etc/keepalived/script/redis_monitor.sh& &检查redis服务状态脚本;
interval 3
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
track_script {
monitor_redis&&&&& &检查redis服务状态脚本;
virtual_ipaddress {
192.168.10.251&&&& #virtual server
notify_backup /etc/keepalived/script/redis_backup.sh &keepalived变为从节点(丢失VIP)后执行的脚本
notify_master /etc/keepalived/script/redis_master.sh & keepalived变为主节点(获得VIP)后执行的脚本
3.2 B-keepalived配置
vi /etc/f文件
global_defs {
router_id LVS_BACKUP
vrrp_script monitor_redis {
script &/etc/keepalived/script/redis_monitor.sh& &检查redis服务状态脚本;
interval 3
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
track_script {
monitor_redis&&&&& &检查redis服务状态脚本;
virtual_ipaddress {
192.168.10.251&&&& #virtual server
notify_backup /etc/keepalived/script/redis_backup.sh &keepalived变为从节点(丢失VIP)后执行的脚本
notify_master /etc/keepalived/script/redis_master.sh & keepalived变为主节点(获得VIP)后执行的脚本
4&& REDIS配置
我们是根据keepalived自动切换VIP的原理来实现redis主从切换,每次切换,主从角色都会调换,因此两台两台机子上都要编写主从配置文件。
4.1 编辑主节点配置文件
# vim redis.conf
daemonize yes&&&&&&&&&&&&&&&&&&& &进程后台启动
logfile /usr/local/redis/redis.log&&&&&& &日志文件
syslog-enabled no&&&&&&&&&&&&&&& &日志不写进系统日志
dir /usr/local/redis/data&&&&& &数据文件存放
requirepass system&&&&&&&& &&&&&&&&&&&&&&认证密码
slave-server-stale-data no&&&&&&&&&&&&&& &同步未完成从机不能接收除slaveof和info之外的命令,相当重要
4.2 编辑从节点配置文件
# vim redis_slave.conf
daemonize yes
logfile /usr/local/redis/redis.log
syslog-enabled no
dir /usr/local/redis/data
slaveof 192.168.10.3 6379&&&&&&&&&& &主服务器的IP(两台机器不同)地址和端口
masterauth system&&&&&&&&&&&&&&&&&&&&&& &主服务器上的认证密码
slave-server-stale-data no&&&&&&&&&&&&&& &同步未完成从机不能接收除slaveof和info之外的命令,相当重要
5&& 编写脚本
5.1 A服务器redis启动脚本:
#!/bin/bash
export CONFIGPATH=/usr/local/redis/redis_slave.conf
export REDISPATH=/usr/local/redis/src
export REDISPASS=system
export result=123
export RESULT=0
export VIP=192.168.10.251
export SLAVEIP=192.168.10.3
killall -9 redis-server
#scp $REDISPATH/flag xf7023@$SLAVEIP:$REDISPATH
echo &start redis-server with $CONFIGPATH&
nohup $REDISPATH/redis-server $CONFIGPATH& 2&nohup.out
until [ &$result& = &$RESULT& ]
export RESULT=`redis-cli -a $REDISPASS&&EOF
echo &RESULT=$RESULT,SYNC&, wait 10s&&
killall -9 keepalived
echo &start keepalived&
service keepalived start
echo &VIP get?&
ip a|sed -n &/inet addr/p&|grep $VIP
#until [ &$?& = &0& ]
#ip a|sed -n &/inet/p&|grep $VIP
if [ &$?& == &0& ];then
echo $(ip a)
echo &set slaveof master&
redis-cli -a $REDISPASS &&EOF
slaveof no one
5.2 redis_monitor.sh
#/bin/bash
export LOGFILE=/etc/keepalived/log/alive_state.log
export ALIVE=$(/usr/local/redis/src/redis-cli -a system PING)
echo &ALIVE=$ALIVE& &&$LOGFILE
if [ &$ALIVE& = &PONG& ]; then
echo $ALIVE
echo &killall -9 keepalived&&&$LOGFILE
echo $ALIVE
killall -9 keepalived
5.3 redis_master.sh
#!/bin/bash
export REDISPATH=/usr/local/redis/src
export REDISPASS=system
export LOGFILE=&/etc/keepalived/log/alive_state.log&
date && $LOGFILE
echo &set master & && $LOGFILE
echo &run slaveof no one cmd &&
$REDISPATH/redis-cli -a $REDISPASS slaveof no one
5.4 redis_backup.sh
#!/bin/bash
export REDISPATH=/usr/local/redis/src
export REDISPASS=system
export REDISMASTER=&192.168.10.3 6379&P&& &redis主节点地址,A,B两服务器不同,注意区别
export LOGFILE=&/etc/keepalived/log/alive_state.log&
date && $LOGFILE
echo &set back up & && $LOGFILE
echo &MASTER:$REDISMASTER&&&$LOGFILE
echo &run slaveof cmd &&
$REDISPATH/redis-cli -a $REDISPASS slaveof $REDISMASTER
6&& 系统测试
6.1.1&& 测试环境
VIP:192.168.10.251
A机器IP:192.168.10.2
B机器IP:192.168.10.2
客户机IP:192.168.10.1
6.1.2&& 测试过程
A机器启动redis和keepalived
# redis-server redis.conf
# service keepalived start
B机器启动redis和keepalived
# redis-server redis_slave.conf
# service keepalived start
&&&&&&&&&&& 测试客户机与A,B集群连接
客户机运行redis客户端:
# redis-cli &h 192.168.10.251 &p 6379
redis:6379& auth system &第一次需要输入密码
客户机上做些写(增,删,改)操作,看A-redis和B-redis是否数据同步。
&&&&&&&&&&& 测试A-redis(主节点)挂掉后客户机业务
关掉redis主机,查看A-keepalived是否自动停止
# ps &ef|grep keep
B机器是否获得VIP
B-redis是否变为主机状态
客户机上做些写(增,删,改)操作,看B-redis是否数据同步。
&&&&&&&&&&& 测试A-redis重启后客户机业务
用命令脚本启动A-redis主机
# sh ./script/redis_start.sh
查看A-redis是否将B-redis数据同步完全,分别在A,B redis运行
# keys * 看数量是否相等
查看A机器是否或得VIP
查看A-redis是否变为主节点(keepalived获得VIP会执行命令,将A-redis变为主节点),登陆A-redis,运行命令
查看B-redis是否变为从节点(keepalived丢失VIP会执行命令,将B-redis变为从节点),登陆B-redis,运行命令
客户机连接redis客户端,测试业务是否正常
# redis-cli &h 192.168.10.251 &p 6379
6.1.3&& 测试注意
redis节点不能开启从节点只读模式,也就是slave-read-only要设置为 no。
如果AB服务器keepalived都挂掉,VIP有可能长久固定在某个上面。
keepalived的配置文件里的脚本要注意执行权限,配置文件格式要完全正确,否则可能会无法绑定VIP。
A,B服务器各脚本里的变量要注意区别,尤其是IP。
A-redis挂掉后启动要用启动脚本,B-redis不需要。
阅读(...) 评论()}

我要回帖

更多关于 redis集群故障 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信