Redis高可用架构(1)—Keepalive+VIP

最近整理一下Redis高可用架构的文档,也准备分享出来,虽然这些架构也不是很复杂。
Redis的高可用方案目前主要尝试过5种方式,其中2种方式已经在线上使用。

1)Redis Master-Slave + Keepalive + VIP。
这是很经典的db架构,也可以用与mysql的主从切换。
基本原理是:Keepalive通过脚本检测master的存活,然后通过漂移VIP(Virtual IP)完成主从切换。

2)Redis Master-Slave + DNS Service + Sentinel。
基本原理是Sentinel集群进行Redis的存活检测和Redis M-S状态切换。
完成切换之后,sentinel调用notification-script参数制定的配置文件,通知DNS Server更改DNS配置,master dns解析执行新的master。

3)Redis Master-Slave + Configure Center(Zookeeper) + Sentinel.
基本原理和第三种方案相似,只是notification-script通知的是配置中心完成redis连接配置的修改,比如Zookeeper实现的配置中心。

4)Redis Master-Slave + Sentinel + Twemproxy + Lvs.
这种方案层次比较多,sentinel通知twemproxy进行redis m-s的配置更改。

5)Redis Cluster,目前redis3.0接近发布stable版本了。

1、基本架构图
1.png

2、基本构建与原理
1)Keepalive + VIP : 在redis master-slave上部署keepalived、redis instance存活检测脚本、以及告警通知脚本。
2)当redis master失效的时候,VIP从master上漂移到slave上,完成m-s角色和配置更改。
3)客户端连接redis的参数中host设置的是VIP,整个切换过程对客户端透明。

3、优缺点与适用场景。
优点:实现简单,成本低。
缺点:整个集群的最大吞吐量受限于redis单实例的处理能力,除非一个应用使用多套这种Keepalive+VIP方案。
因而扩展能力较差,而且不适合目前单机部署多个redis实例的部署场景,而我们的一个物理机上至少部署8个redis实例。
目前我们DBA已经否定了这种架构,不再支持部署这种集群。
适合场景:并发请求不是很高的应用。

4、Keepalive配置和检测脚本
下面keepalive的简单配置、检测和通知脚本。
1)keepalive.conf
master和slave使用相同的配置脚本,其中要注意的地方state的配置都是backup状态,而且都是非抢占方式nopreempt。

vrrp_script chk_redis {
        script "/etc/keepalived/redis_check.sh"  
        interval 2                                      
} 
 
vrrp_instance VI_1 { 
        state BACKUP                                 
        interface bond0                             
        virtual_router_id 51 
        priority 100                      
        nopreempt
 
        authentication { 
                     auth_type PASS 
                     auth_pass redis     
        } 
        track_script { 
                chk_redis               
        } 
        virtual_ipaddress {
             10.203.31.216         
        }
 
        notify_master  "/etc/keepalived/notify.sh master" 
        notify_backup  "/etc/keepalived/notify.sh backup" 
}

2)redis_check.sh,redis实例存活检测脚本。

当master检测到redis处于failed状态,将会释放VIP,slave机器将会获取VIP。

#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
REDIS_MASTER_HOST='127.0.0.1'
REDIS_MASTER_PORT=6379
 
ALIVE=`$REDIS_BIN/redis-cli -h $REDIS_MASTER_HOST -p $REDIS_MASTER_PORT  PING`
 
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0 
else
  echo $ALIVE
  exit 1 
fi

3)master-slave状态切换通知脚本,包括推送告警短信。

#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
MASTER_IP='192.168.0.216' # virtual ip
MASTER_PORT=6379
 
status=$1
echo $status
 
if [ "$status" = "master" ]
then
   # promoting slave to master
   echo " config set slave-read-only no " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " slaveof no one "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " config rewrite "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   # pushing simple message to mobile or email
 
elif [ "$status" = "backup" ]
then
   # degrading master to slave
   echo "config set slave-read-only yes " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo "slaveof $MASTER_IP $MASTER_PORT" | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
   echo " config rewrite "                | $REDIS_BIN/redis-cli -h 127.0.0.1 -p  $MASTER_PORT 
 
   # pushing simple message to mobile or email
fi
 
exit 0

notify.sh转自:http://mdba.cn/?p=745

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/2466

(2)
s19930811s19930811
上一篇 2016-04-12 22:51
下一篇 2016-04-13 11:54

相关推荐

  • 系统基础之shell脚本编程详解2

    shell脚本编程2:   在上节我们介绍了shell脚本编程,但只是介绍了基础的内容,下面将为大家介绍shell的脚本的高级用法,判断与循环.判断分为两种:if语句和case语句;循环分为三种:for语句,while语句,until语句,select语句 判断语句:  在脚本的编写中,我们要使用大量的数据和命令,但对于使用的数据,我们要…

    Linux干货 2016-08-19
  • RPM程序包管理器及其前端工具YUM

    RPM:     RPM,Redhat Package Manager,RPM is Package Manager 功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作 1)RPM包的命名 2)RPM包文件的组成   &nb…

    Linux干货 2016-08-21
  • LAMP运行环境搭建及部署php程序软件

    前言     Linux+Apache+MySQL+PHP是大多数web服务器的运行环境,能熟练配置此运行环境是每个运维的必备基本技能,本文以安装MySQL管理工具PHPmyadmin以及博客软件wordpress为例,演示编译安装LAMP运行环境的过程。 一、实验拓扑图 二、安装步骤 2.1 编译安装Apache h…

    2015-11-26
  • Linux进程与作业1

    Linux进程与作业 操作系统的组成部分:硬件,kernel,lib, 系统调用–>调用kernel lib调用–> 库调用,kernel调用 运行用户代码–>用户模式–>用户空间; 运行kernel–>内核模式–>内核空间; 内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能 C…

    Linux干货 2016-08-02
  • Nginx常用配置详解

    Nginx常用配置详解(一) 本文依照nginx官方站点文档介绍常用的nginx各种常用配置,未经过校对,如有错误还望海涵。 Nginx配置通用语法 Nginx最基本的配置语法 配置项名 配置项值1 [配置项值2 ….]; 配置项名位于行首,配置项值与配置项名之间用空格隔开,多个配置项值之间也用空格隔开,每行配置结尾必须加上分号。 #配置项名 配置项值1…

    Linux干货 2017-06-20
  • 关于nginx状态监控字段的个人见解(求真相)

    今天看到了马哥视频其中一节对nginx状态监控信息的介绍,对视频ppt上的监控字段解析产生了一些疑问,ppt内容如下: active connections – 活跃的连接数量server accepts handled requests — 总共处理了xxx个连接 , 成功创建xxx次握手, 总共处理了xxx个请求reading — 读取客户端的连接数.w…

    Linux干货 2016-07-12