Redis Sentinel 模拟故障迁移
什么是redis sentinel
参考文档:https://redis.io/topics/sentinel
简单的来说,就是Redis Sentinel 为redis 提供高可用性,主要体现在下面几个方面:
1.监控:redis sentinel会不间断的监控主服务器和从服务器是否正常工作
2.通知:当出现问题时,sentinel可以通过API通知系统管理员以及另外的服务器
3.自动故障转移:如果主服务器出现故障,sentinel可以启动故障转移,将其中一台从服务器升级为主服务器,其他的从服务器会重新配置为新主服务器 4.提供配置:sentinel充当客户端发现权限来源,客户端连接到sentinel询问负责给定服务器当前redis主服务器地址,如果发生故障,sentinel将报告新地址
redis sentinel 模拟环境
模拟环境为:1主2从
========redis=================sentinel==========
master:127.0.0.1 6379 127.0.0.1 26379
slave1:127.0.0.1 6380 127.0.0.1 26380
slave2:127.0.0.1 6381 127.0.0.1 26381
环境搭建
redis.conf配置
6379
# .conf | grep -Ev "^$|^#" bind 127.0.0.1 port daemonize yes pidfile /var/run/redis_6379.pid logfile "/root/redis/redis-6379.log" dbfilename dump-.rdb dir /root/redis ... #
6380
# .conf | grep -Ev "^$|^#" bind 127.0.0.1 port daemonize yes pidfile /var/run/redis_6380.pid logfile "/root/redis/redis-6380.log" dbfilename dump-.rdb dir /root/redis ... #
6381
# .conf | grep -Ev "^$|^#" bind 127.0.0.1 port daemonize yes pidfile /var/run/redis_6381.pid logfile "/root/redis/redis-6381.log" dbfilename dump-.rdb dir /root/redis ... #
sentinel.conf配置
6379/6380/6381
# cat sentinel-*.conf | grep -Ev "^#|^$" port daemonize yes logfile "/root/redis/sentinel-6379.log" dir "/tmp" sentinel monitor mymaster sentinel down-after-milliseconds mymaster sentinel parallel-syncs mymaster sentinel failover-timeout mymaster #
启动redis server 和 sentinel
redis: # redis-server /etc/redis_6379.conf # redis-server /etc/redis_6380.conf # redis-server /etc/redis_6381.conf sentinel: # redis-sentinel /etc/sentinel-.conf # redis-sentinel /etc/sentinel-.conf # redis-sentinel /etc/sentinel-.conf
配置主从复制
# redis-cli -p > SLAVEOF OK > exit # redis-cli -p > SLAVEOF OK > exit
模拟故障迁移
首先,kill 掉redis master进程
# | $n ;done;
分析log
首先,redis 从服务器首先发现redis master 服务器无法连接,报错如下:
# *.log ==> redis-.log <== :S Nov ::54.235 # Connection with master lost. :S Nov ::54.235 * Caching the disconnected master state. ==> redis-.log <== :S Nov :: :S Nov ::54.466 * MASTER <-> SLAVE sync started :S Nov ::54.467 # Error condition on socket for SYNC: Connection refused ==> redis-.log <== :S Nov :: :S Nov ::54.782 * MASTER <-> SLAVE sync started :S Nov ::54.782 # Error condition on socket for SYNC: Connection refused ...
紧接着,redis sentinel 完成故障切换,从log来看,当6379主节点挂了之后,redis重新提了一个从节点6380为主节点,log 如下:
# *.log ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: #quorum / :X Nov :: :X Nov :: ==> sentinel-.log <== :X Nov :: #quorum / :X Nov :: :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: ==> sentinel-.log <== :X Nov :: :X Nov :: :X Nov :: @ mymaster :X Nov :: @ mymaster :X Nov :: @ mymaster :X Nov :: @ mymaster :X Nov :: :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: @ mymaster :X Nov :: :X Nov :: @ mymaster :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: @ mymaster :X Nov :: :X Nov :: @ mymaster :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: :X Nov :: @ mymaster :X Nov :: @ mymaster :X Nov :: :X Nov :: :X Nov :: @ mymaster :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: @ mymaster ==> sentinel-.log <== :X Nov :: @ mymaster
再返回过来看redis server的log,此时可以看到6381为从节点已经向主节点6380请求并且完成了复制操作
==> redis-.log <== :M Nov :: asks for synchronization :M Nov :: accepted. Sending bytes of backlog starting from offset . ==> redis-.log <== :S Nov ::25.823 * Successful partial resynchronization with master. :S Nov ::25.823 # Master replication ID changed to 0288d040464ebccbb56dc56d54455434a406bcb2 :S Nov ::25.823 * MASTER <-> SLAVE sync: Master accepted a Partial Resynchronization.
当我们再启动6379服务器时,sentinel会让6379成为从库并且连接6380服务器,log如下:
启动6379服务器 # redis-server /root/redis/redis-.conf # *.log ... ==> sentinel-.log <== :X Nov :: @ mymaster ... # *.log ... ==> redis-.log <== :S Nov :: bytes from master :S Nov ::00.566 * MASTER <-> SLAVE sync: Flushing old data :S Nov ::00.566 * MASTER <-> SLAVE sync: Loading DB in memory :S Nov ::00.566 * MASTER <-> SLAVE sync: Finished with success ==> redis-.log <== :S Nov :: changes seconds. Saving... :S Nov :: :C Nov ::36.486 * DB saved on disk :C Nov :: MB of memory used by copy-on-write :S Nov ::36.569 * Background saving terminated with success ...
未完待续。。。
Redis Sentinel 模拟故障迁移的更多相关文章
- Redis(九)哨兵:Redis Sentinel
Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理的方式是无法接受的. Redis从2.8开始正式 ...
- Redis源码阅读(六)集群-故障迁移(下)
Redis源码阅读(六)集群-故障迁移(下) 最近私人的事情比较多,没有抽出时间来整理博客.书接上文,上一篇里总结了Redis故障迁移的几个关键点,以及Redis中故障检测的实现.本篇主要介绍集群检测 ...
- Redis源码阅读(五)集群-故障迁移(上)
Redis源码阅读(五)集群-故障迁移(上) 故障迁移是集群非常重要的功能:直白的说就是在集群中部分节点失效时,能将失效节点负责的键值对迁移到其他节点上,从而保证整个集群系统在部分节点失效后没有丢失数 ...
- Redis Sentinel高可用配置及C#访问
本文环境如下: 操作系统:ubuntu-14.04.1-desktop-amd64 Redis:2.8.19 如果使用虚拟机则将每台的网络设置为桥接,否则他们之间能连上,局域网连不上. 系统设计如图: ...
- Redis的同步(主从复制)和Redis Sentinel
Redis的同步可以让其他服务器拥有一个不断更新的数据副本,从而使拥有数据副本的服务器可以处理客户端发出的读请求. 1.Redis同步的方法: 我们可以通过发送SLAVEOF host port命令来 ...
- Redis sentinel 哨兵模式集群方案配置
第一个方案是创建 redis cluster,第二种方案就是用哨兵模式来进行主从替换以及故障恢复.兵模式集群方案配置 一.sentinel介绍 Sentinel作用: 1):Master状态检测 2) ...
- Redis Sentinel配置小记
Sentinel是一个管理多个redis实例的工具,它可以实现对redis的监控.通知.自动故障转移.sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redis的状态 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- Redis sentinel & cluster 原理分析
1. Redis集群实现分析 1.1 sentinel 1. 功能 Sentinel实现如下功能: (1)monitoring--redis实例是否正常运行. (2)notification-- ...
随机推荐
- HTML翻转菜单练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vmdk转qcow2格式
关闭vm 多文件格式转换成单文件格式vmdk 进入cmd命令行模式的窗口 进入VMware workstations的安装路径下 vmware-vdiskmanager.exe -r "E: ...
- doi
doi是指数字对象唯一标识符,是云计算背景下最佳的“大数据”样本存储和应用技术,用于IKE进行协商SA协议统一分配. doi的优点有唯一性.持久性.兼容性.互操作性.动态更新. 外文名 doi 概 ...
- 手把手教你如何用 OpenCV + Python 实现人脸识别
下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文. 必备知识 Haar-like 通俗的来讲,就是作为人脸特 ...
- 面试回顾——kafka
关于消息队列的使用场景:https://www.cnblogs.com/linjiqin/p/5720865.html kafka: Topic Kafka将消息种子(Feed)分门别类 每一类的消息 ...
- Android APK反编译(一)
apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP.反编译apk则是将该安卓工程的源码.资源文件等内容破解出来进行分析. 一.APK反编译基本原理 1.APK分析 apk文 ...
- python——位运算之进制转化
>>> a=0b001100 >>> a 12 >>> b=0o001100 >>> b 576 >>> c= ...
- Citrix XenApp登录服务器过程详解
详细流程: 1. 客户端上的receiver负责解析ICA文件,并根据ICA文件的内容发起连接请求.若是外网访问,则ICA文件中记录的是NetScaler的AG FQDN信息,连接请求发至NetSca ...
- jquery.validate和jquery.form配合实现验证表单后AJAX提交
基础代码其实很简单,之后一点一点扩充.最终代码写在最后. 表单: <form action="@Url.Action("AddColumns","Cont ...
- SpringJDBC :jdbcTemplate在连接是出现 org/springframeworkbc/core/JdbcTemplate : Unsupported major.minor version 52.0 异常解决
原因是这个在jdk9版本才能使用,需更新jdk版本. 更新jdk9之后在idear的配置: 第一步:File---->Project Structure---->Project 第二步: ...