redis+keepalived实现高可用

Redis简介:

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

设计思路:
redis 主和 redis从  正常同步;

redis主keepalived 启动,执行redis_master.sh脚本,vip在自己身上;

redis 从keepalived 启动,执行redis_slave.sh脚本;

redis主服务关闭,则redis主执行redis_fault.sh脚本, vip落在redis 从上,redis从执行redis_master.sh脚本,变成主;

redis主服务开启,则redis主执行redis_slave.sh脚本变成从,vip还在redis 从上,还是主;

redis从服务关闭,则redis从执行redis_fault.sh脚本, vip落在redis主上,redis主执行redis_master.sh脚本,变成主;

redis从服务开启,则redis从执行redis_slave.sh脚本变成从, vip还在redis主上,redis主继续做主,此时为redis初试主从状态;

环境:

192.168.1.100 redis

192.168.1.101 redis-slave

192.168.1.111 VIP

一、安装keepalived

(redis和redis-slave两台服务器都安装)

yum install ipvsadm -y

yum install gcc kernel-devel openssl-devel popt-devel libnl-devel -y

tar xf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure --prefix=/ --with-kernel-

dir=/usr/src/kernels/2.6.32-279.el6.i686/&&make&&make install

chkconfig --add keepalive

chkconfig --add keepalived

chkconfig keepalived on

二、安装redis

(redis和redis-slave两台服务器都安装)

wget http://download.redis.io/releases/redis-2.8.13.tar.gz

tar xf redis-2.8.13.tar.gz

cd redis-2.8.13

make

make install

cd src && make test

错误解决:

wget http://downloads.sourceforge.net/tcl/tcl8.6.4-src.tar.gz

mv tcl8.6.4-src.tar.gz /opt/

cd /opt/

tar xf tcl8.6.4-src.tar.gz

cd tcl8.6.4

cd unix/

./configure

make&&make install

cd redis-2.8.13

make test

redis-slve只需注意一点

[[email protected] bin]# pwd

/usr/local/bin

[[email protected] bin]# vim redis.conf

116  slaveof 192.168.1.100 6379

三、通过Keepalived实现Redis Failover自动故障切换

修改Master和Slave的/etc/hosts文件

[[email protected] rc.d]# cat /etc/hosts

192.168.1.100  redis

192.168.1.101   redis-slave

Master上是

[[email protected] rc.d]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=redis

Slave上是

[[email protected] linux]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=redis-slave

修改完主机名重启机器生效

默认安装完成keepalived之后是没有配置文件的,因此我们需要手动创建:

首先,在Master上创建如下配置文件:

[[email protected]  linux]# vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {

Y[email protected]

}

notification_email_from [email protected]

router_id redis

}

vrrp_script chk_redis {

script "/etc/keepalived/scripts/redis_check.sh"

interval 1

}

vrrp_instance mes_Redis {

state MASTER

interface eth0

garp_master_delay 10

smtp_alert

virtual_router_id 3

priority 100

nopreempt

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.111

}

track_script {

chk_redis

}

notify_master /etc/keepalived/scripts/redis_master.sh

notify_backup /etc/keepalived/scripts/redis_slave.sh

notify_fault  /etc/keepalived/scripts/redis_fault.sh

notify_stop   /etc/keepalived/scripts/redis_stop.sh

}

然后,在Slave上创建如下配置文件:

[[email protected] linux]# vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {

Y[email protected]

}

notification_email_from [email protected]

router_id redis-salve

}

vrrp_script chk_redis {

script "/etc/keepalived/scripts/redis_check.sh"

interval 1

}

vrrp_instance mes_Redis {

state BACKUP

interface eth0

garp_master_delay 10

smtp_alert

virtual_router_id 3

priority 90

nopreempt

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.111

}

track_script {

chk_redis

}

notify_master /etc/keepalived/scripts/redis_master.sh

notify_backup /etc/keepalived/scripts/redis_slave.sh

notify_fault  /etc/keepalived/scripts/redis_fault.sh

notify_stop   /etc/keepalived/scripts/redis_stop.sh

}

在Master和Slave上创建监控Redis的脚本

mkdir /etc/keepalived/scripts

vim /etc/keepalived/scripts/redis_check.sh

#!/bin/bash

ALIVE=`/usr/local/bin/redis-cli PING`

if [ "$ALIVE" == "PONG" ]; then

echo $ALIVE

exit 0

else

echo $ALIVE

exit 1

fi

编写以下负责运作的关键脚本:

notify_master /etc/keepalived/scripts/redis_master.sh

notify_backup /etc/keepalived/scripts/redis_slave.sh

notify_fault /etc/keepalived/scripts/redis_fault.sh

notify_stop /etc/keepalived/scripts/redis_stop.sh

因为Keepalived在转换状态时会依照状态来呼叫:

当进入Master状态时会呼叫notify_master

当进入Backup状态时会呼叫notify_backup

当发现异常情况时进入Fault状态呼叫notify_fault

当Keepalived程序终止时则呼叫notify_stop

首先,在Redis Master上创建notity_master与notify_backup脚本:

vim /etc/keepalived/scripts/redis_master.sh

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

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 192.168.1.101 6379 >> $LOGFILE  2>&1

sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

vim /etc/keepalived/scripts/redis_slave.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

sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF 192.168.1.101 6379 >> $LOGFILE  2>&1

接着,在Redis Slave上创建notity_master与notify_backup脚本:

vim /etc/keepalived/scripts/redis_master.sh

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

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 192.168.1.100 6379 >> $LOGFILE  2>&1

sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

vim /etc/keepalived/scripts/redis_slave.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

sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF 192.168.1.100 6379 >> $LOGFILE  2>&1

然后在Master与Slave创建如下相同的脚本:

vim /etc/keepalived/scripts/redis_fault.sh

#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[fault]" >> $LOGFILE

date >> $LOGFILE

vim /etc/keepalived/scripts/redis_stop.sh

#!/bin/bash

LOGFILE=/var/log/keepalived-redis-state.log

echo "[stop]" >> $LOGFILE

date >> $LOGFILE

在Master与Slave给脚本都加上可执行权限:

chmod +x /etc/keepalived/scripts/*.sh

四、脚本创建完成以后,我们开始按照如下流程进行测试:

1.启动Master上的Redis

[[email protected] bin]# pwd

/usr/local/bin

[[email protected] bin]# ./redis-server redis.conf

2.启动Slave上的Redis

[[email protected] bin]# pwd

/usr/local/bin

[[email protected] bin]# ./redis-server redis.conf

3.启动Master上的Keepalived

/etc/init.d/keepalived start

4.启动Slave上的Keepalived

/etc/init.d/keepalived start

5.尝试通过VIP连接Redis:

[[email protected] bin]#pwd

/usr/local/bin

[[email protected] bin]# ./redis-cli -h 192.168.1.111 info

role:master

slave0:192.168.1.101,6379,online

连接成功,Slave也连接上来了

6.尝试插入一些数据:

[[email protected] bin]# ./redis-cli -h 192.168.1.111 SET Hello Redis

从VIP读取数据

[[email protected] bin]# ./redis-cli -h 192.168.1.111 GET Hello

"Redis"

从Master读取数据

[[email protected] bin]# ./redis-cli -h 192.168.100  GET Hello

"Redis"

从Slave读取数据

[[email protected] bin]# ./redis-cli -h 192.168.1.100  GET Hello

"Redis"

下面,模拟故障产生:

将Master上的Redis进程杀死:

[[email protected] bin]# ./redis-cli shutdown

查看Master上的Keepalived日志

[[email protected] scripts]# tail /var/log/keepalived-redis-state.log

[fault]

Thu Sep 27 08:29:01 CST 2012

同时Slave上的日志显示:

[[email protected] scripts]# tail /var/log/keepalived-redis-state.log

[master]

Thu Nov 15 12:06:04 CST 2012

Being master....

Run SLAVEOF cmd ...

OK

Run SLAVEOF NO ONE cmd ...

OK

然后我们可以发现,Slave已经接管服务,并且担任Master的角色了。

./redis-cli -h 192.168.1.111 info

./redis-cli -h 192.168.1.101 info

role:master

然后我们恢复Master的Redis进程

主变成slave

然后把101redis停掉

100恢复主的角色,在把101redis开启

恢复100是主,101是备

自动切换成功!

五、Redis 常用命令之服务器相关命令

redis-cli -h 192.168.12.12    远程登录redis客户端

redis 127.0.0.1:6379> ping   测试连接是否存活

PONG

redis 127.0.0.1:6379> echo wilian 在命令行打印一些内容

"wilian"

redis 127.0.0.1:6379> select 1 选择数据库。Redis数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取

OK

redis 127.0.0.1:6379[1]> dbsize  返回当前数据库中key的数目。

(integer) 0

redis 127.0.0.1:6379[1]> select 0

OK

redis 127.0.0.1:6379> dbsize

(integer) 20

redis 127.0.0.1:6379> info 获取服务器的信息和统计

redis_version:2.4.5

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:32

multiplexing_api:winsock2

process_id:5956

uptime_in_seconds:100358

uptime_in_days:1

lru_clock:1957468

used_cpu_sys:4.70

used_cpu_user:4.99

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

connected_clients:1

connected_slaves:0

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

used_memory:684452

used_memory_human:668.41K

used_memory_rss:684452

used_memory_peak:684424

used_memory_peak_human:668.38K

mem_fragmentation_ratio:1.00

mem_allocator:libc

loading:0

aof_enabled:0

changes_since_last_save:0

bgsave_in_progress:0

last_save_time:1340763023

bgrewriteaof_in_progress:0

total_connections_received:1

total_commands_processed:199

expired_keys:3

evicted_keys:0

keyspace_hits:163

keyspace_misses:35

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:0

vm_enabled:0

role:master

db0:keys=20,expires=0

redis 127.0.0.1:6379> monitor 实时转储收到的请求。

OK

1340780669.110663 "monitor"

redis 127.0.0.1:6379> config get dir 获取服务器配置信息

1) "dir"

2) "D:\\mysoft\\redis-2.0.2"

flushdb 删除当前选择数据库中的所有key

flushall  删除所有数据库中的所有key

时间: 2024-10-09 06:18:08

redis+keepalived实现高可用的相关文章

SuSE11环境下Redis+Keepalived实现高可用技术

1.Redis配置信息Redis部署使用两台服务器,实现Redis+keepalived,提供redis服务高可用,当主redis进程或服务器宕机之后,备redis进程或服务器继续提供服务. 实现目的:主MASTER宕机后,从BACKUP接管VIP提供服务,升为MASTER,主MASTER恢复后状态变为从BACKUP,不抢占回VIP,待新MASTER宕机后继续接替VIP,重新升为MASTER MASTER-->BACKUP-->MASTER 依次轮询接管服务 服务器配置信息如下所示: 主机名/

redis主从配置及通过keepalived实现redis自动切换高可用

一:环境介绍: 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身份,于此同时Sl

Redis 之 主从复制 + Keepalived 实现高可用

一.Redis 主从复制 + Keepalived 实现高可用 作用:保证Redis高可用,首先搭建Redis 主从复制,然后在主从两台机器上分别安装keepalived服务,把VIP定位在主Redis上,以供对外提供服务,然后在主服务机器上,添加守护进程,判断redis进程是否正常,如不正常,把keepalived服务停止,使VIP漂移到从服务器上,并且在从服务器上添加相应的守护进程,实时判断VIP是否在本机上,如在,立刻执行从库提升为主库. 二.网络拓扑图 三.分别在两台机器安装Redis

Redis+Keeplived实现高可用

博文说明[前言]: 本文将通过个人口吻介绍Redis+Keeplived实现高可用的相关知识,在目前时间点[2017年6月23号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文为我编写的部署文档(word格式)中关于redis部分的内容复制粘贴而来,因此会存在一些格式问题,因不影响阅读和理解,也没有改的必要了,这样反而便于大家慢下来理解.发表此处,一来是有方便自己查看,二来是给

keepalived配置高可用集群

准备工作 1.设备分配 192.168.137.100    master 192.168.137.150    backup 192.168.137.254    vip 2.两台设备均安装keepalived yum install -y keepalived 3.两台设备均安装nginx yum install -y nginx 主设备配置 1.编辑keepalived配置文件 [[email protected] ~]# > /etc/keepalived/keepalived.conf

haproxy+keepalived实现高可用负载均衡web集群

haproxy+keepalived实现高可用负载均衡web集群 负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将"请求"."访问"的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些节点负载很小导致资源浪费.这样,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间的动态分配,以实现负载均衡,从而为企业提供更高性能,更加稳定的系统架构解决方案. 高可用集群的概念

keepalived实现高可用集群方案

一.keepalived和VRRP协议介绍 keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务. VRRP协议

Centos7 安装keepalived实现高可用

场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. 解决方法: yum -y install openssl-devel

基于Keepalived构建高可用集群配置实例(HA Cluster)

什么是集群 简单的讲集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统.并且集群系统的管理员可以随意增加和删改集群系统的节点. 关于更详细的高可用集群我们在后面再做详解,先来说说Keepalived Keepalived是什么 Keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbea