Redis Cluster 生产实践整理-程序员宅基地

技术标签: 网络  运维  数据库  

1、最佳实践

1.1 做好容错机制

  • 连接或者请求异常,进行连接retry和reconnect。
  • 做存储使用的 Redis systemd 去掉 Auto Restart 配置,避免Master加载空dump.rdb,replicate到Slave,刷掉Slave数据。
  • 重试时间应该大于cluster-node-time时间
    还是强调容错,这个不是针对cluster,所有的应用设计都适用。

1.2 制定开发规范

  • 慢查询,进程cpu 100%、客户端请求变慢,甚至超时。
  • 避免产生hot-key,导致节点成为系统的短板。
  • 避免产生big-key,导致网卡打爆、慢查询。
  • 应用端分不清Cache/Storage,经常可以做成 Cache的Key,不加TTL导致无效内存占用。
  • 避免大量key在同一时间段过期,会导致请求变慢。
  • 规范Key命名规则。
  • 避免使用阻塞操作,不建议使用事务。
  • 避免部分hset过大,超过几十万条记录,造成查询卡顿。

1.3 优化连接池使用

  • 主要避免server端维持大量的连接。
  • 合理的连接池大小。
  • 合理的心跳检测时间。
  • 快速释放使用完的连接。
  • Jedis一个连接创建异常问题(fixed):
    https://github.com/xetorthio/jedis/issues/1252

连接问题是redis开发使用中最常见的问题,connection timeout/read timeout,还有borrow connection的问题。

1.4 区分redis和cluster的使用

  • redis建议使用pipeline和multi-keys操作,减少RTT次数,提高请求效率。
  • redis cluster不建议使用pipeline和multi-keys操作,减少max redirect产生的场景。
  • redis cluster不支持事物操作。

区分redis和cluster的使用,一方面是数据分片引起的;另一方面与client的实现支持相关。

1.5 几个需要调整的参数

1)设置系统参数vm.overcommit_memory=1,可以避免bgsave/aofrewrite失败。

2)设置timeout值大于0,可以使redis主动释放空闲连接。

3)设置repl-backlog-size 64mb。默认值是1M,当写入量很大时,backlog溢出会导致增量复制不成功。

4)client buffer参数调整
client-output-buffer-limit normal 256mb 128mb 60
client-output-buffer-limit slave  512mb  256mb 180

2、运维经验总结

2.1 自动化管理

  • CMDB管理所有的资源信息。
  • Agent方式上报硬软件信息。
  • 标准化基础设置。机型、OS内核参数、软件版本。
  • Puppet管理和下发标准化的配置文件、公用的任务计划、软件包、运维工具。
  • 资源申请自助服务。

2.2 自动化监控

  • zabbix作为主要的监控数据收集工具。
  • 开发实时性能dashboard,对开发提供查询。
  • 单机部署多个redis,借助于zabbix discovery。
  • 开发DB响应时间监控工具Titan。
  • 基本思想来源于pt-query-degest,通过分析tcp应答报文产生日志。flume agent + kafka收集,spark实时计算,hbase作为存储。最终得到hotquery/slowquery,request source等性能数据。

2.3 自动化运维

  • 资源申请自助服务化。
  • 如果申请合理,一键即可完成cluster集群部署。
    能不动手的,就坚决不动手,另外,监控数据对开发开发很重要,让他们了解自己服务性能,有时候开发会更早发现集群的一些异常行为,比如数据不过期这种问题,运维就讲这么多了,后面是干货中的干货,由deep同学开发的几个实用工具。

2.4 redis开源工具介绍

1) redis实时数据迁移工具

1)在线实时迁移
2)redis/twemproxy/cluster 异构集群之间相互迁移。
3)github:https://github.com/vipshop/redis-migrate-tool

2) redis cluster管理工具

1)批量更改集群参数
2)clusterrebalance
3)很多功能,具体看github :
https://github.com/deep011/redis-cluster-tool

3) 多线程版本Twemproxy

1)大幅度提升单个proxy的吞吐量,线程数可配置。
2)压测情况下,20线程达到50w+qps,最优6线程达到29w。
3)完全兼容twemproxy。
4)github:
https://github.com/vipshop/twemproxies

4) 在开发的中的多线redis

1)Github:
https://github.com/vipshop/vire

2)欢迎一起参与协作开发,这是我们在开发中的项目,希望大家能够提出好的意见。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34220834/article/details/90593585

智能推荐

can't return outside function or method解决方法_return outside method-程序员宅基地

文章浏览阅读4.5k次。今天写web项目作业时,发现jsp中“Cannot return from outside a function or method” 提示return出错,百度了一下,网上说这是myeclipse的一个bug,去掉return就好了,去掉之后果然不报错,但是之后发现onSubmit()不能阻止表单提交,再百度之,原来这个return还真不能去掉。以下就是今天错误的解决方法 1_return outside method

python爬取研究生招生网招生信息_考研信息api-程序员宅基地

文章浏览阅读7.2k次,点赞3次,收藏64次。import requestsfrom bs4 import BeautifulSoupfrom pandas.core.frame import DataFrameimport reimport timeclass Graduate: def __init__(self, province, category): self.head = { ..._考研信息api

web结课作业的源码 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品简单页面-程序员宅基地

文章浏览阅读330次,点赞8次,收藏10次。HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐 【作者主页——获取更多优质源码】 【学习资料/简历模板/面试资料/ 网站设计与制作】 【web前端期末大作业——毕设项目精品实战案例】---@[TOC](文章目录)一、网页介绍1 网页简介:此作品为学生个人主

ICML2019|深度学习鼻祖之一Bengio提出并开源图马尔科夫神经网络-程序员宅基地

文章浏览阅读724次。Meng Qu,Yoshua Bengio,Jian TangMontreal Institute for Learning Algorithms (MILA), Uni..._马尔可夫 图神经网络

【Scikit-Learn】初试开源机器学习工具_# author: gael varoquaux <gael.varoquaux@normalesu-程序员宅基地

文章浏览阅读904次。啊好久没用Markdown以外的编辑器了,这次随性一点就用xhEditor吧~嘛,写的确实也挺随(luan)性(xie)的23333$ pip install -U scikit-learn$ wget http://scikit-learn.org/stable/_downloads/plot_spectral_biclustering.py$ wget http://sciki_# author: gael varoquaux

VMware vSphere 6 序列号大全-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏11次。转载自 http://www.i5i6.net/post/190.htmlvSphere 6 HypervisorHY0XH-D508H-081U8-JA2GH-CCUM24C4WK-8KH8L-H85J0-UHCNK-8CKQ8NV09R-2W007-08D38-CA956-33U28JU400-6EK4L-080V9-QT8EP-2KAQ2vSphere 6 Hypervisor for E..._esxi 6.0 序列号

随便推点

B-tree/B+tree/B*tree-程序员宅基地

文章浏览阅读528次。B~树 1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树 (Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么

一个文科生从零到进入大厂的感悟(3小时掌握一门编程语言)_文科生进在华为云工作需要学编程代码-程序员宅基地

文章浏览阅读527次。你学编程的方法对吗?你是否手写代码?你是否死记硬背?你是否把学文科的方法应用到编程上?你是否前面学后面忘?你是否在抱怨编程难学?如果你遇到上面这些问题,很遗憾的告诉你,你学习的方法错了。这些问题我都遇到过,我一开始学编程的时候,感觉可难了,当时就是照着别人的视频和教程一点点的学,一点点的敲代码,记忆,可是几个月过去了又忘光了,不断重复这种死循环。直到有一天,我认识了一位前辈,我发现,我错了,编程不是这么学的。1.不要看视频学习那编程应该怎么学呢?首先我不建议你去看视频学习,因为这种学_文科生进在华为云工作需要学编程代码

Echarts基础-安装语法高亮插件&less-rem转换动态适配大小_echarts无法rem转换-程序员宅基地

文章浏览阅读1k次,点赞33次,收藏13次。Echarts是一个功能强大的JavaScript开源可视化库,专门用于创建各种图表和数据可视化。丰富的图表类型:Echarts提供了包括折线图、柱状图、散点图、饼图、雷达图、地图等多种常见的图表类型,满足不同的数据展示需求。兼容性良好:它可以流畅运行在PC和移动设备上,并且兼容多种浏览器,如IE8/9/10/11,Chrome,Firefox,Safari等。底层依赖ZRender:Echarts底层依赖于矢量图形库ZRender,这使得其能够提供直观且交互性强的数据可视化效果。_echarts无法rem转换

Spring框架以及源码学习_spring框架源码-程序员宅基地

文章浏览阅读769次。一、Spring注解驱动开发1.容器—组件注册-@Configuration&@Bean给容器中注册组件—组件注册-@ComponentScan-自动扫描组件&指定扫描规则—组件注册-自定义TypeFilter指定过滤规则—组件注册-@Scope-设置组件作用域—组件注册-@Lazy-bean懒加载—组件注册-@Conditional-按照条件注册bean...................._spring框架源码

Vue播放器之vue-video-player及其问题_vue mp4编码-程序员宅基地

文章浏览阅读3k次。Vue播放器之vue-video-player及其问题一、使用vue-video-player1.安装 npm install vue-video-player --save2.main.js引入vue-video-playerimport VideoPlayer from 'vue-video-player'require('video.js/dist/video-js.css')require('vue-video-player/src/custom-theme.css')Vue.u_vue mp4编码

Qt 杂项(Qwt、样式等)_qwt 样式-程序员宅基地

文章浏览阅读608次。QwtDial 的指针是由QwtDialNeedle类绘制的,自定指针也就是实现QwtDialNeedle的子类继承QwtDialNeedle只需要实现drawNeedle函数i < 4;i++ )滑块是通过drawHandle函数绘制;可以通过一个函数指针,将外部绘制滑块的逻辑引入,替换默认绘制逻辑函数指针定义(qwt_slider.h):主要参数:handleRect,绘制滑块的区域,根据handleRect的坐标范围进行自定义绘制。_qwt 样式

推荐文章

热门文章

相关标签