ycache中redis主备功能设计及使用说明
方案概述:

实现说明:
- redis版本升级为3.0.1(也可以使用2.8.*的版本,但需要确保主、备版本是相同的)
- 打包新的redis rpm包
- redis使用开源的3.0.1的源码包
- 将https://github.com/zwChan/remirepo/tree/master/redis 拷贝到rpmbuild的source目录(/root/rpmbuild/SOURCES/),然后执行rpmbuild -bb redis.spec.
- 更新缺省的redis配置文件,支持aof(?)
- 检查命令的兼容情况
- yagent适配
- 读取自己管理的slave,定时更新一次这个信息(缺省10s,可配置)
- 定时检查一下slave对应的master是否正常,如果不正常,将自己设置为master,将原来的master设置为slave(缺省间隔为1s,连续检查5次失败后才算失败,所以延时5秒)
- 定时检查当前的master实例是否在zk上被配置为slave,如果是,将它转换为slave状态(5秒间隔)
- 每次一个redis实例重启后,如果它有slave且正常,都将正在起的实例变更为slave,将它原来的slave变更为master。这样做是为了避免redis实例快速重启导致数据丢失。详细的问题见: http://redis.io/topics/replication “Safety of replication when master has persistence turned off”
- 如果redis实例的主备状态和zk上的状态不一样,修改为与zk上的一样。(5秒间隔)
- yconsole适配
- 添加slaveof命令,配置和删除redis之间的主从关系;yconsole { slaveof } slave master
- 添加slaves命令,显示主从关系;同时检查zk上的主从关系是否与redis真实的主从关系一致。
- 主从关系发生变化时,通过命令行slaveof动态通知redis做出对应改变;
- add命令计算容量时不计算slave
- add/app/mod命令将slave也自动写到cache id的内容里
- list命令显示主从关系
- ycache-client适配
- slaveof目录的子节点增加和删除时,要进行重新初始化pool的处理
- 初始化pool时,将slaveof下的slave状态的实例去除
- 当slave的master变化时,不需要处理
- 每个pool只初始化一个zkproxy
- 限制:
- 每个master最多只能有一个slave,slave不能作为master;
使用方法:
- ycache-client:此功能对ycache-client使用者透明,仅须升级为2.2.0及以上版本的;
- yconsole:添加了slaves和slaveof命令,请查看 yconsole help命令获取命令格式。
- slaves: 查看slave和master对应的关系,后面的状态“ok”标识现在zk上的主备关系与redis本身主备关系的是一致的。

- slaveof:添加或删除slave/master关系(master参数为‘none’时删除关系)

刚配置后的几秒内,zk状态和redis状态可能不一致。等几秒后状态就一致了。
- 添加cache id时,如果一个redis实例已经被指定为slave,它所占用的资源不被计算到命令行指定的资源中;但如果分配后才配置slave/master关系的,cache id的容量会变少(因为slave是不参与使用)

将master添加到test中,它的slave会自动加到test中。但是,如果你单独将slave添加到test中,不会带着master加到test。 这是一种错误的配置,slave不应该直接被使用(尽管没有被禁止)
- yagent:升级版本大于等于‘2015-06-02';升级redis版本为2.8.*。 使用方法不变。redis新的rpm包在svn上。
问题与改进
- 所有的redis 的client都监听slaveof目录,很容易造成惊群问题;
- 老版本的client不能在主从环境的redis上用。所以要确保client升级后,才能用yconsole设置主从关系。
这两个问题是可以避免的,只要在cache id的内容中不记录从节点的信息即可。/redis/pools/cache-id的内容仅是master的节点,/redis/slaveof下记录slave对应的slave->master关系。每次主从关系变化时,都要确保/redis/pools/cache-id下的内容都是master,不包含slave(而且cache实例排列顺序也不能改变,之前的设计主要是考虑到这个因素)。这样就能够使得老版本的client也能使用主从关系了。同时,由于每个pool只依然仅监听自己的cache-id,不会会有惊群的现象。yagent和yconsole要确保上面提到的关系转换正确。
ycache中redis主备功能设计及使用说明的更多相关文章
- 搭建和测试 Redis 主备和集群
本文章只是自我学习用,不适宜转载. 1. Redis主备集群 1.1 搭建步骤 机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.10 ...
- 如何在DCS管理控制台将两个Redis主备实例建立全球灾备。
华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备. 建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例 ...
- 阿里云ECS部署Redis主备哨兵集群遇到的问题
一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...
- Redis主备自动切换
Sentinel(哨兵)是用于监控redis集群中Master状态的工具. 一.Sentinel作用 1.Master状态检测 2.如果Master异常,则会进行Master-Slave切换,将 ...
- 分布式Redis主备复制
当数据落在不同节点上时,如何保证数据节点之间的一致性是非常关键的 Redis采用主备复制的方式保证一致性,所有节点中,只有一个节点为主节点(master),它对外提供写服务,然后异步的将数据复制到其他 ...
- Redis - Keepalived + redis 主备热备切换
1. 热备方案 硬件:server两台,分别用于master-redis及slave-redis 软件:redis.keepalived 实现目标: 由keepalived对外提供虚拟IP(VIP)进 ...
- Redis主备复制
Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据.特殊的,一个从机同样可以设置为一个 ...
- haproxy配置监控redis主备切换(转)
环境前提: redis sentinel配置,三台主机,且配置运行良好 配置文件中添加: frontend ft_redis bind 0.0.0.0:6379 name re ...
- 请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】
本文来自:http://www.woqutech.com/?p=1116 MySQL 本身通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之 ...
随机推荐
- java Spring boot项目简单说明
前言 一直从事.NET开发,但一直有种想去探索Java世界的冲动,今天终于有时间来尝试一下,以下是自己探索过程的简要记录. 一.开发工具 开发工具选用 IntelliJ IDEA社区版(免费),安装教 ...
- 智能指针原理及实现(1)shared_ptr
0.异常安全 C++没有内存回收机制,每次程序员new出来的对象需要手动delete,流程复杂时可能会漏掉delete,导致内存泄漏.于是C++引入智能指针,可用于动态资源管理,资源即对象的管理策略. ...
- 二、MySQL介绍
目录 一.MySQL背景 二.MySQL的优点 三.MySQL安装 四.MySQL服务的启动和停止 五.MySQL登录和退出 六.MySQL常用命令 (一)常用命令 (二)语法规范 (三)SQL语言细 ...
- Java中各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
PO:持久对象 (persistent object),po(persistent object)就是在Object/Relation Mapping框架中的Entity,po的每个属性基本上都对应数 ...
- ShedLock日常使用
首发于个人博客:ShedLock日常使用 场景模拟 定时器Scheduler在平时使用比较频繁,比如定时数据整理,定时向客户发送问候信息等...,定时任务的配置比较简单,比如在springboot中, ...
- Ubuntu 18.04实现实时显示网速
1.添加源 sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor 2.更新源 sudo apt-get update 3.安装sys ...
- 【bzoj2141】排队 [国家集训队2011]排队(树套树)
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...
- QT 设置应用程序图标和可执行程序图标
1, 首先准备个ICO图标.例如:myappico.ico 在工程目录下新建images文件夹并你的图标myappico.ico(只能用ico格式的图片)放到工程目录下的images文件夹下 2, 用 ...
- [2019牛客多校第二场][G. Polygons]
题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保 ...
- macOS上更顺手的终端
安装iTerm2.下载地址 https://iterm2.com/downloads/stable/latest 安装Nerd Fonts.下载地址 https://github.com/ryanoa ...