线上升级Redis纪实

QPS相关

QPS,每秒处理请求数。可以在一定程度上反映某个服务此时的压力情况。下面可以通过一个案例来分析下如何大致的估算一个服务的QPS。

背景:昨天上线的一个活动,会根据唱歌时间来进行送券行为,计算下此送券行为的QPS。

分析:每隔送券行为都会有一条日志进行记录,如下。

2017-10-27 15:10:16 songtime=355 userid=56135899 giftid=20331 addednumbers=1

因此计算出每秒的songtime请求就可以作为目标值了。

因此可以使用如下命令:

developer@hosttx:~$ sudo devpssh -i -h /opt/iplist.all.svn 'grep songtime /home/log/baofang-yanzhishengdian.log' | grep 10-27 | cut -d " " -f 2  | uniq -c

由于访问人数比较少,所以基本上QPS为2~3。

解释:也许你会好奇,这是怎么计算出来的呢?下面来解释一下,我们的目标就是查看某一秒下有songtime日志的条数。

  • 判断一条日志中是否包含songtime ,可以使用grep命令。
  • 在线上多台GET机之间查找日志记录,可以使用sudo devpssh -i -h /opt/iplist.all.svn 'grep songtime /home/log/baofang-yanzhishengdian.log'
  • 切分出秒级日志可以使用cut命令,-d "delimiter"用于指定分隔字符, -fN用于显示哪一个field字段,默认从1开始计数。
  • uniq命令短小精悍,-c参数就是用于统计的,但是只有相邻的两行同样的日志才会被累加在第一条前面的序号上。

模拟一下Redis的同步流程

先看看目前电脑上有没有启动redis服务:

看来是没有,那么我们就可以启动几个redis-server,因为是在一台机器上,所以指定不同的端口就好了。

同样,使用redis-server --port 7777 再开启一个redis服务。

最后再来看下服务到底有没有启动吧。

好了,现在是两个全新的redis服务了,在开始准备具体的主从复制,同步操作前,先指定下主从关系。
- 端口为6666的作为master
- 端口为7777的作为slave

然后通过一个redis-cli的monitor命令监视下slave,看看在master中的某些key发生变化的时候,slave会做出什么样的反应。

下面让7777作为6666的slave。

同时在7777server的终端下会出现其作为6666的slave的一些输出。

而同时刻作为master的6666也会对7777发来的同步请求做出相应的反应。

模拟同步,这个时候只需要在master中随便set几个key,看看slave的monitor窗口中的输出即可。

可以看出,slave会实时将master上的数据同步过来,达到数据的一致性。这样,简单的主从同步,就算是完成了。

但是需要注意的是,作为slave的redis是不能被写入的。比如我们随便在slave上set几个key,看看能否成功,不出意外的话,你会看到如下结果。

这是因为redis的从slave-read-only默认是yes即只读状态的,所以同步完成后要修改这个变量,config set slave-read-only no就可以。

对slave的操作不会对master产生影响,这是必须的了。

最后同步完成之后,如果不想让7777作为6666的slave了,就可以使用slaveof no one来实现。

线上升级redis

线上跑的redis一般为了稳定性,版本都不会很高。但是也不能太低了不是,因此有时候升级redis是很有必要的,这也是不可避免的。但是线上的redis通常会包含大量的数据,有可能多达N个多G,而且不能直接进行主从同步,这样来自slave的同步请求会挤垮来自外部的用户请求。导致服务出现报警。

通常对线上Redis做升级的话,有这样的思路: 找个替身,然后做如下步骤。

  • 让替身slave成为线上机器,同步完成后,将slave-read-only 设置为no
  • 将线上流量引入到slave上, 此时slave成为线上机器,查看线上机器的QPS,直至为0。
  • 趁此时,卸载线上的旧Redis,然后安装新版本的Redis
  • 新版本的Redis作为slave同步线上Redis的数据,同步完成后同样将slave-read-only设置为no, 然后将线上流量引回来,此时查看刚才的替身RedisQPS为0即可。

在这个过程中,查看redis请求的QPS最好的方法就是通过monitor来实现。

redis-cli -h 127.0.0.1 -p 6379 monitor | cut -d "." -f1 | uniq -c

而在升级线上Redis的时候,尤其要注意外部连接数,有时是正常的业务请求,有时是crontab统计数据跑的脚本,反正情况多样,可以通过ss -anp | grep redis:port 命令 查看连接情况。

需要注意的是要使用root权限,才能看得到具体的PID信息。

然后可以通过ps aux命令找到具体是那条命令在跑着。然后对症下药,完成整个操作。


总结

回顾一下,这篇文章主要是为了谈谈对线上redis升级的体会,以及一些常识性的内容的叙述。为了循序渐进,讲了QPSRedis的主从同步的具体操作步骤,最后引出升级的步骤和过程。

其实步骤什么的不重要,重要的在于整体的思路,还有对工具的使用的熟练程度。

时间: 2024-12-25 12:41:46

线上升级Redis纪实的相关文章

全球拍卖巨头 扩张升级线上拍卖

全球拍卖巨头苏富比日前宣布,将联手eBay合作发展网上平台,让全球用户能在线上发掘.浏览及竞投顶尖艺术品.古董及各式收藏品.这也是苏富比在自家官网之外,对线上拍卖业务的一次扩张和升级. 苏富比历史悠久,每年拍卖无数世界级艺术品及珍贵藏品,专业知识享誉全球:而eBay的技术平台与综合付款方案则精密卓越,有利吸引藏家网上竞投,并为全球1.45亿eBay活跃用户提供轻松.简便的网上购物体验.合作双方实力雄厚,为计划带来相得益彰的非凡优势. 计划率先在苏富比位于纽约的全球总部展开,多场精选拍卖会将提供全

Java服务化系统线上应急和技术攻关,你必须掌握的Linux命令

上一篇文章<Java服务化系统线上应急和技术攻关,你必须拥有的那些应用层脚本和Java虚拟机命令>介绍了笔者在互联网公司里线上应急和技术攻关过程中积累的应用层脚本和Java虚拟机命令,这些脚本和命令在发现问题和定位问题的过程中起到关键作用,然而,经常会遇到一些深层次的问题,仅仅通过应用层和JVM虚拟机层的信息无法定位问题和解决问题,这时需要深入研究系统级的各种参数和信息,才能确定问题的根源原因,例如:网络超时.机器负载过高.JVM OOM.JVM和内核Bug等,这篇文章介绍那些重要的Linux

如何从开发环境直连线上(IPTables)

假如你在生产环境有一个内网可访问的端口,Let's say: 80,而且有生产机器的应用管理员权限.在这样的情况下,其实是可以做到从内网直接连接到线上环境任意端口的.链接SSH,链接数据库都不在话下.当然,安全性和便利性永远是不可调和的一对矛盾.为了避免有人用它来干坏事,我们也至少应当对这种方式有所了解. x00 环境描述 假设有生产环境机器10.x.x.1.可在内网通过VIP:123.123.123.1访问80端口. 坏蛋拥有线上环境sudo权限,现在希望在生产环境中直接访问任意端口. x01

杨彪 | 一次线上游戏卡死的解决历程(文末赠书福利)

题图:StartupStock@Pixabay 编辑:冷锋 作者:杨彪 本文首发于简书云时代构架杨彪 http://www.jianshu.com/p/7885bbf153f5 事故的发生详细过程 故事是发生在几个月前的线上真实案例,我将在本文中以故事形式为大家还原这次解决游戏卡死的经历过程,其中有很多线上实战经验和技巧都值得分享借鉴的,也有作者自创的处理线上问题"四部曲"--望问闻切,还有最经典的"甩锅"秘诀. 不管白猫黑猫,能立马解决线上问题的就是好猫,线上问题

【已更新视频回顾入口】MySQL金融版线上发布会:它为什么是金融企业的首选,技术大佬、产品和神秘嘉宾本位“演绎”

视频回顾入口:https://yq.aliyun.com/webinar/play/269 本文原标题:MySQL金融版线上发布会:它为什么是金融企业的首选,技术大佬.产品和神秘嘉宾本位"演绎" 2017年8月10日下午14:00,将迎来一场特殊的直播--阿里云数据库MySQL金融版线上发布会. 届时,我们不仅请到了阿里金融云总经理九河.阿里云数据库总负责人,阿里云研究员褚霸以及阿里云数据库产品专家乙休来一起宣布这个好消息,同时还邀请到一位在金融界绝对是重磅级人物的神秘嘉宾,一起来聊一

【云和恩墨大讲堂】Oracle线上嘉年华第二讲

编辑手记:Oracle线上嘉年华,正在持续分享中.本次的主题是系统割接中的SQL解析问题和结合业务的SQL优化改写技巧. 1嘉宾介绍 小鱼(邓秋爽) 云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化.SQL优化和troubleshooting 新系统割接的library cache问题 这是我们在做系统割接的时候的一个案例,可能并不是很常见,这个案例是将Oracle 11g升级到12c的时候遇到的问题,出现了大量的library cache的问题.具体情况是: 新系

双11线上“无人店铺”来了!

"根据尺寸,您适合M号哦.""这款黑色已经卖完了,可以推荐给您蓝色的." 网购时,与你对话聊天的可能并不是位客服妹子或客服小哥,而是个"机器人客服". 这是王云的第5个双11,5年她从一个小小的客服变成了客服主管.如今,良品铺子电商客服已成长为一个有四五百人的团队. 但今年的双11尤为不同,原本大战在即,客服的压力不言而喻,团队会各种请外援.招兵买马,可今年王云们十分淡定. 2017年8月,千牛智能客服平台正式版上线,良品铺子成了新科技的试用者,

利用硬链接和truncate降低drop table对线上环境的影响

作者简介 肖鹏 微博研发中心数据库技术负责人,主要负责微博数据库(MySQL/Reids/HBase/Memcached)相关的业务保障,性能优化,架构设计以及周边的自动化系统建设.10年互联网数据库架构和管理经验,专注于数据库的高性能和高可用技术保障方向. 众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常. 首先,我们看一下为什么drop容量大的table会影响线上服务 直接执行drop table,mysql会将表定义和表数据

中望3D免费线上培训 一个课时解决一个月的苦恼

由于三维CAD(计算机辅助设计)软件具有形象直观.设计变更容易.设计效率高等优势,传统二维CAD设计正快速迈进三维CAD时代,全三维CAD正逐步成为设计软件的主流.因此,除现有的3D设计从业者以外,一大批的2D设计师也开始尝试着了解三维CAD学习三维CAD.但目前网络上3D设计的入门教程鱼龙混杂,互动性差,又没有该领域专业的导师指导,问题无处释放并得到合理解答:更因为一些国外软件的付费培训课程价格昂贵,内容复杂讲解过于深奥,且对于零起点入门的学员来讲并不实用.这些窘境让不少2D.3D设计从业者和