Redis 高可用 基于Sentinel + keepalived 实现

1  概述

redis作为缓存工具,如果仅仅单机,一旦挂掉,将对业务造成严重的影响,因此建议生产环境上部署redis高可用环境,本文将基于Sentinel + keepalived 实现redis的高可用。

本文主要介绍实现的步骤和配置文件,不做原理上的介绍

注意,redis的Sentinel高可用有一个很关键的点,只有master节点可以写入,其他节点都只能读,不能写,所以,vip必须配置在master节点上

三台redis ip 分别为

主节点: 192.168.70.32

备节点1:192.168.70.33

备节点2:192.168.70.34

VIP:192.168.70.35

2  部署keepalived

这里采用编译安装来实现。

服务包:keepalived-1.4.3.tar.gz

步骤如下

yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel popt-devel libnfnetlink-devel
tar xf keepalived-1.4.3.tar.gz -C /usr/local/
cd /usr/local/keepalived-1.4.3/
./configure --prefix=/app/keepalived
make
make install
mkdir /etc/keepalived
vim /etc/keepalived/keepalived.conf 
#注意,keepalived.conf的配置文件很关键,是实现高可用的关键环节,内容太多,这里把配置文件作为附件放着文章后面,配置文件里主要是 要对redis的主节点进行监控
cp /usr/local/keepalived-1.4.3/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived
cp /app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /app/keepalived/sbin/keepalived /usr/sbin/
chown root:root /etc/init.d/keepalived 
chmod u+s /app/keepalived/sbin/keepalived
chkconfig --add keepalived 
chkconfig keepalived on

到这里keepalived配置完成

3  redis部署

3.1 redis编译安装

服务包:redis-4.0.8.tar.gz

tar -xzf redis-4.0.8.tar.gz  -C /app

#添加make

cd /app/redis-4.0.8/src
make
make test

#如果以上步骤遇到 You need tcl 8.5 or newer in order to run the Redis test 的报错,安装tcl,命令yum install tcl -y

#设置开机启动

vim /etc/rc.d/rc.local
/app/redis-4.0.8/src/redis-server /app/redis-4.0.8/redis.conf

#添加PATH

vim /etc/profile.d/redis.sh 
export PATH=/app/redis-4.0.8/src:$PATH
source /etc/profile.d/redis.sh

#编辑配置文件

主节点配置修改如下:

vim /app/redis-4.0.8/redis.conf
bind 0.0.0.0
daemonize yes 
requirepass redis123456
dir "/appdata/redis"   #指定数据持久化保持的路径
appendonly yes  #是否持久化数据
appendfilename "appendonly.aof"  #持久化数据的文件名称
masterauth "redis123456"     #指定密码

备用节点

bind 0.0.0.0
daemonize yes 
requirepass redis123456
dir "/appdata/redis"   #指定数据持久化保持的路径
appendonly yes  #是否持久化数据
appendfilename "appendonly.aof"  #持久化数据的文件名称
masterauth "redis123456"     #指定密码
slave-priority 90       #和主节点的区别,主节点不需要配置这条命令

主备其他的配置选择默认即可

#启动redis服务

/app/redis-4.0.8/src/redis-server /app/redis-4.0.8/redis.conf

3.2  配置sentinel

主备节点都是一样的配置

vim  /app/redis-4.0.8/sentinel.conf 
protected-mode yes #很关键,如果protected-mode和bind两行没有配置,将导致redis的master节点故障后不会转移
bind 0.0.0.0
daemonize yes #后台运行
port 26379
dir "/tmp"
sentinel monitor mymaster 192.168.70.32 6379 2   #配置主节点的ip,另外2表示有3台sentinel,如果5台sentinel,这里配置5
sentinel down-after-milliseconds mymaster 3000  #故障转移时间,单位ms
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster redis123456

其他配置可以保持不变

另外,该文件,会跟进master故障转移,自动写入一部分配置,如下截图

启动sentinel
/app/redis-4.0.8/src/redis-sentinel  /app/redis-4.0.8/sentinel.conf 
写入配置自启动文件
vim /etc/rc.local
/app/redis-4.0.8/src/redis-sentinel  /app/redis-4.0.8/sentinel.conf

4  测试

所有的节点都启动后,就可以 测试高可用

从任意机器连接vip

[[email protected] ~]# redis-cli -a redis123456 -h 192.168.70.35

192.168.70.35:6379> get key

"abc"

192.168.70.35:6379> set key abcd

OK

192.168.70.35:6379> get key

"abcd"

192.168.70.35:6379>

假设,vip 配置在 192.168.70.32服务器上,把这台服务器的redis进程杀掉后,vip会转移到其他两台的任意一样,并且vip可以正常访问

则高可用实现

以上实现高可用,对vip的转移,还有bind的ip配置很关键,会成功环境不成功的问题所在

5  附件

keepalived配置文件

主从配置就四点不一样

router_id不一样

优先级不一样

state主从不一样

从节点配置不抢占ip ,nopreempt,可以 配置在 track_script配置段下

如下

    track_script {
            chk_redis_master
          }
        nopreempt

主配置文件如下

vim /etc/keepalived/keepalived.conf
#Keepalived配置文件
global_defs {
        router_id NodeA                 #路由ID, 主备的ID不能相同
}
vrrp_script chk_redis_master {
    script "/app/redis-4.0.8/src/redis-cli -a redis123456 info | grep role:master >/dev/null 2>&1"
#以上这个命令是整个高可用的关键,保证了当本节点不是master时,vip进行转移到role 为master的节点上,如果不成功,redis-cli需要写绝对路径
    interval 1
    timeout 2
    fall 2
    rise 1
}
vrrp_sync_group VG_1 {
    group {
        VI_1
    }
}
vrrp_instance VI_1 {
        state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
        interface eth0          #指定监测网卡
        virtual_router_id 35
        priority 100            #优先级,BACKUP机器上的优先级要小于这个值
        advert_int 1            #设置主备之间的检查时间,单位为s
        authentication {        #定义验证类型和密码
                auth_type PASS
                auth_pass Pass1234
        }
        virtual_ipaddress {     #VIP地址,可以设置多个:
                192.168.70.35
        }
        track_script {
            chk_redis_master
          }
}

原文地址:http://blog.51cto.com/ghbsunny/2154262

时间: 2024-10-10 11:11:53

Redis 高可用 基于Sentinel + keepalived 实现的相关文章

Redis高可用配置(Keepalived)

主:172.16.0.104 备:172.16.0.105 VIP:172.16.0.107 客户端直接连VIP,当master 104的redis挂掉后,105作为master.当104重启后,104作为105的slave.当105又挂掉之后,104作为master...... 1.安装redis并配置主从同步 安装过程省略    1.1 配置104的redis实例:/etc/redis/redis.conf requirepass 123456 #生产环境千万不要配置这么简单的密码 mast

基于Sentinel的Redis高可用方案

数据存储我们在应用设计过程中非常重要的一部分,无论是关系型数据库,还是Redis.MongoDB等非关系型数据库,都有很多的高可用方案,还有一些针对不同业务设计的中间件,使其性能更有特色,更能保证数据存储的稳定和安全. 目前主流的Redis的数据存储架构有Redis单点,Redis主从,基于Sentinel的Redis主备.基于keepalive的redis主备,以及Redis集群Cluster,还有豌豆荚开源的Codis等是目前业内比较流行的解决方案,不同的存储架构,是若干个技术工程师,根据自

redis HA高可用方案Sentinel和shard

1.搭建redis-master.redis-slave以及seninel哨兵监控 在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然不能接受.幸好redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决 每个sentinel会向其它sentinal.master.slave定时发送消息

利用redis-sentinel+keepalived实现redis高可用

目标.需求: 为上层应用提供高可靠.低延迟.低(无限接近0)数据损失的Redis缓存服务 方案概述: 采用同一网络内的三台主机(可以是物理主机.虚拟机或docker容器),要求三台主机之间都能相互访问,每一台主机上都安装redis-server.redis-sentinel和keepalived. redis-server负责提供Redis缓存服务,三台主机间的关系是master-slave-slave redis-sentinel负责提供Redis高可用,三台主机间的关系与redis-serv

Keepalived+Redis高可用部署(第二版)

更新 20150625 脚本由5个减少为4个,sh脚本指令做了精简. 修改了另外3个脚本,在日志里增加了日期显示. 新增redis数据类型,持久化,主从同步简介. 新增hiredis简介. 新增c语言客户端测试. Redis简介及安装 Redis是一个开源,先进的key-value存储,用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据

利用lvs keepalived配置redis高可用及负载均衡

需求 我们用ES做日志服务,架构是 上游数据来源=>redis=>logstash=>ES redis目前还是单点, 没有做高可用, 现在数据量越来越多, 如果下游消费不出问题还好, redis里面数据来了就走,但是下游一旦出问题, 分给redis的内存半小时就撑满了. 看到redis3.0 beta版本已经提供了集群功能, 但是需要client以集群模式接入, 我们这么多上游用户, 不太可能统一要求他们改造. 公司也有硬件的LB, 同事在E公司的时候就是用的硬件LB. 但接入还要申请,

(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https://blog.csdn.net/qq_28804275/article/details/80938659 下载redis镜像(不带tag标签则表示下载latest版本) docker pull redis 从github 下载最新的redis.conf,注意重要参数 # 端口 port 6379 #

搭建一个redis高可用系统

一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份(一般工业界认为比较安全的备份数应该是3份).当一台redis出现问题了,另一台redis可以继续提供服务. 备份 三.自动故障转移 虽然上面redis做了备份,看上去很完美.但由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务.所以

Redis 高可用实践

Sentinel 简介 如上图所示,Redis 高可用是通过Sentinel来实现的,是Redis官方推荐的高可用性(HA)解决方案,Sentinel英文含义是哨兵,放哨的,可以理解为它是Redis集群的监控者,监控着所有的master和slave机器的健康状况.首先我们来看下它提供了哪些功能. 1.监控(Monitoring):监控所有主从机的健康状态,当主从机连接出现问题时,会自动变更有问题机器的状态.2.通知(Notification):一旦集群的节点有问题,Sentinel可以通过API