自动故障转移机制

  • redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,还得想办法,当主redis挂了,让从redis升级成为主redis。
  • 这就需要自动故障转移,redis sentinel带有这个功能,当一个主redis不能提供服务时,redis sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让他们使用新的主redis进行复制备份。
  • Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。它的主要功能有以下几点
  • 实时地监控redis是否按照预期良好地运行;
  • 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
  • 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其他的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。

sentinel 互相监控架构                        redis一主两从架构  

redis的主从复制部署

这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为8000,redis-sentinel的端口为7000,修改默认端口是安全的第一步。

redis-server 说明 redis-sentinel
192.168.50.168: 8000 redis-master 192.168.50.168:7000
192.168.50.166: 8000 redis-slave1 192.168.50.166:7000
192.168.50.169 :8000 redis-slave2 192.168.50.168:7000

redis.conf配置文件修改

#redis-master 配置文件:
port 8000            #设置端口号
daemonize yes         #是否后台运行
bind 0.0.0.0          #允许访问IP
pidfile /var/run/redis-.pid    #PID文件存放位置
logfile /var/log/redis/redis-.log    #log日志存放位置
#redis-slave 配置文件:
port
daemonize yes
bind 0.0.0.0
pidfile /var/run/redis-.pid
logfile /var/log/redis/redis-.log
slaveof 192.168.200.132 #比redis主多这行 指定主masterIP及端口
masterauth #验证master端的redis密码

启动三台redis

redis-server /usr/local/redis/conf/redis.conf

redis的高可用部署(redis-sentinel)

修改sentinel.conf配置文件  三个服务端配置文件一样,启服务后每个配置文件都有变动,会生成唯一的内容

vim /usr/local/redis/conf/sentinel.conf
port 7000      #sentinel端口              
sentinel monitor master7000 192.168.50.168
sentinel down-after-milliseconds master7000
sentinel parallel-syncs master7000
sentinel failover-timeout master7000

配置文件说明

    • sentinel monitor master8000 192.168.200.132 8000 2

      • master8000:监控的主节点名字(随便写)
      • 192.168.200.132 8000 :主节点的IP和端口
      • 2:一共有两台Sentinel发现有问题就会发生故障转移
    • sentinel down-after-milliseconds master8000 5000(5秒) 
      • 当master8000节点宕机后多久进行检查
    • sentinel parallel-syncs master8000 1 
      • 设定sentinel并发还是串行,1代表每次只能复制一个,可以减轻master压力
    • sentinel failover-timeout master8000 15000(15秒) 
      • 表示故障转移的超时时间

启动redis-sentinel

#三台都启动
redis-sentinel /usr/local/redis/conf/sentinel.conf &
#启动以后,查看sentinel信息
redis-cli -p info sentinel #sentinel的端口号启动
# Sentinel
sentinel_masters: #1个master
sentinel_tilt:
sentinel_running_scripts:
sentinel_scripts_queue_length:
sentinel_simulate_failure_flags:
master0:name=master7000,status=ok,address=192.168.50.168:,slaves=,sentinels=
#master ip 端口 2个slaves 3个sentinel

redis-sentinel的VIP漂移

我们可以使用redis sentinel的一个参数client-reconfig-script,这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>,<role>,<state>,<from-ip>,<from-port>,<to-ip>,<to-port>,其中`<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作.

#在sentinel.conf里增加一句话
[root@localhost ~]# sed -n '170,175p' /usr/local/redis/conf/sentinel.conf
# CLIENTS RECONFIGURATION SCRIPT
#
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script master7000 /usr/local/redis/notify_master6800.sh
#指定漂移脚本的位置
# When the master changed because of a failover a script can be called in #写一个漂移脚本
vim /usr/local/redis/notify_master6800.sh
#!/bin/bash
MASTER_IP=$6       #第六个参数就是sentinel传入进行来的新master的IP
LOCAL_IP="192.168.50.168"        #本地IP
VIP="192.168.50.244"      `    #VIP
NETMASK=""               #子网掩码
INTERFACE="eth0"             #网卡名
if [[ "${MASTER_IP}" == "${LOCAL_IP}" ]];then
/usr/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
/usr/sbin/arping -q -c -A ${VIP} -I ${INTERFACE}
exit
else
/usr/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
exit
fi
exit 1
#给脚本加x权限
chmod +x /usr/local/redis/notify_master6800.sh
#重新启动所有的redis-sentinel进程
pkill redis-sentinel
redis-sentinel /usr/local/redis/conf/sentinel.conf
#第一次时手动给master添加VIP
ip addr add 192.168.50.244/ dev eth0
#让ip地址即刻生效
arping -q -c -A 192.168.50.244 -I eth0

redis-Sentinel持续高可用的更多相关文章

  1. Redis Sentinel主从高可用方案

    Redis Sentinel主从高可用方案 本文介绍一种通过Jed和Sentinel实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上 ...

  2. Redis Sentinel实现高可用配置

    一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...

  3. redis-3.0.1 sentinel 主从高可用 详细配置

    最近项目上线部署,要求redis作高可用,由于redis cluster还不是特别成熟,就选择了redis sentinel做高可用.redis本身有replication,实现主从备份.结合sent ...

  4. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  5. Redis主从配置及通过Keepalived实现Redis自动切换高可用

    Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区  作者:fuquanjun [字体:大 中 小]   一:环境介绍: M ...

  6. Redis服务之高可用组件sentinel

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13419690.html:今天我们来聊一下redis ...

  7. Redis入门到高可用(十九)——Redis Sentinel

    一.Redis  Sentinel架构     二.redis sentinel安装与配置 四.客户端连接Sentinel            四.实现原理—— 故障转移演练(客户端高可用) 五.实 ...

  8. Redis 复制技术和高可用sentinel(哨兵模式)

    redis的复制技术和高可用(哨兵模式) 1 复制 为什么要复制 实现数据的多副本存储,从而可以实现服务的高可用 提供更好的读性能复制技术的关键点及难点 如何指定被复制对象 增量还是全量以及如何实现增 ...

  9. CentOS7下使用Sentinel实现Redis集群高可用

    Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master ...

  10. 【Linux】【Services】【Cache】使用Sentinel搭建高可用Redis

    1. 简介 1.1. 一些基础概念请参考 http://www.cnblogs.com/demonzk/p/7453494.html 1.2. 几种常用的集群方式. -- Redis Sentinel ...

随机推荐

  1. Redis和MemCache静态Map做缓存区别

    本地缓存和分布式缓存 本地缓存:使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不 ...

  2. CHD-5.3.6集群上hive安装

    解压过后: [hadoop@master CDH5.3.6]$ ls -rlttotal 8drwxr-xr-x. 17 hadoop hadoop 4096 Jun  2 16:07 hadoop- ...

  3. 阿里云Ubuntu下tomcat8.5配置SSL证书

    环境 阿里云ubuntu(18.04)服务器 阿里云申请的域名 Tomcat8.5.7 jdk1.8 免费型SSL证书 SSL证书申请 登录阿里云的官网,登录后在菜单中选择SSL证书(应用安全) 进入 ...

  4. C#验证控件使用方法及常用正则表达式例析(转)

    ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效.这些控件如下: 1.RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交 ...

  5. web开发:Bootstrap应用及内存管理

    一.栅格系统 二.移动端适配 三.栅格系统案例 四.表格 五.表单 六.循环应用 一.栅格系统 <!DOCTYPE html> <html> <head> < ...

  6. PMM 监控 MySQL

    Percona Monitoring and Management (PMM)是一款开源的用于监控 MySQL 和 MongoDB 性能的开源平台,通过 PMM 客户端收集到的 DB 监控数据用第三方 ...

  7. Jmeter中间件处理-ActiveMQ

    消息队列是目前的主流中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况.本文以Activemq的Topic为例,说明如何基于Jmeter实现消息队列数据的发送和 ...

  8. linux命令 - nohup

    nohup command & nohup scrapy crawl eeo > /home/wangliang/eeo.log & nohou 需要后台的命令 打印的日志位置 ...

  9. Java&Selenium处理页面Table以及Table中随机位置的数据

    一.摘要 前一段时间公司小伙伴刚刚接触自动化,遇到的一个问题,页面新创建的数据保存后,出现在table中的某个位置,并不一定是第一行还是第几行,这种情况下如何去操控它 本篇博文将介绍处理这个问题的一种 ...

  10. python_函数参数

    1.参数的基本知识 任意个数 任意类型 def func(a1,a2,a3): print(a1,a2,a3) # 参数可以是任意个数和任意类型 func(1,'waf',True) 2.位置传参数( ...