前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis稳定性实践

Redis稳定性实践

作者头像
心平气和
发布2020-09-11 11:33:23
1.3K0
发布2020-09-11 11:33:23
举报

本文会讲述作者在线上环境使用redis遇到过的一些坑,主要是一些参数配置和选型,目的只有一个:如何让redis不挂,提高可用性;不涉及到集群方案的选型等内容。

一、持久化选rdb还是aof

rdb可以一次将内存中的数据以快照方式写入到磁盘,文件不会太大;

aof因为是不断的追加,所以越来越多,所以有aof rewrite的功能;

我们到底选rdb还是aof作为持久化的方式?

我的建议,如果数据量超过100M,就用aof;

我看到生产场景将1.7G数据的配置为rdb,save配置又是默认的,结果是一次写入1G多的文件,磁盘压力非常大经常报警。

二、大促时稳定性保障

大促的时候因为流量比往常高几倍,甚至是几十倍,更需要保证系统稳定性。

1、避免触发全量主、从同步

Redis主从机制分全量同步、增量同步2种,在大促的时候如果触发主、从同步全量同步是非常危险的,在主上可能会阻塞请求,从因为也要将数据加载到内存中,所以也可能导致客户端报错,所以我们要尽量避免在大促场景触发全量主从同步而导致Redis不可用。

我们先看下Redis主、从同步的过程:

1)主保存一个快照,保存到一个文件中;

2)主将1产生的文件发送给从;

3)从将RDB文件加载到内存中;

4)主在完成1的时候同时将每次的命令写入到一个缓冲区中;

5)从加载完文件到内存中后会告诉主当前复制的偏移量,如果这个偏移量在复制缓冲区中,则直接读取内存中的数据就行,否则需要再触发全量同步。

这里有几个关键参数:

1)、repl-backlog-size

即复制缓冲区的大小,这个参数默认只有1M,非常的小,生产场景可以自己根据以下公式计算:

1秒写入量占用空间*允许抖动时间

即如果1秒的写入量在100kb, 我们允许抖动的时间为5分钟,则这个设置为

100k*5*50=25M

注意这个在主和从上都要设置,因为主挂了,一个从切主后也可保持一致。

2)、repl-timeout

主从之间的复制超时时间,默认为60s,可以根据情况自己调整。

3、client-output-buffer-limit slave

限制从分配的缓冲区的大小,因为一个从也是主的一个客户端。

这个配置有3个参数

hard limit: 缓冲区大小的硬性限制。

soft limit: 缓冲去大小的软性限制。

soft seconds:缓冲区大小达到了(超过)soft limit值的持续时间。

1) client buffer的大小达到了soft limit并持续了soft seconds时间,将立即断开和客户端的连接。

2) client buffer的大小达到了hard limit,server也会立即断开和客户端的连接。

在大促的时候,为了防止主从连接断开,这个也可以适当调整大小,具体参数自己的业务场景可以容忍的断开时间,这个涉及到数据一致性问题,一般不建议设为3个0,即永不超时并且缓冲区不限制大小。

2、aof rewrite

如果持久化方式配置为aof的话,大促的时候需要注意不要触发aof rewrite,因为这个也会阻塞用户的请求。

推荐配置如下

no-appendfsync-on-rewrite yes

no-appendfsync-on-rewrite 0

3、aof持久化的配置

aof刷磁盘有每次写操作写一次、1s刷新1次、不主动刷新3种,根据业务可以接受宕机数据丢失多久来配置,一般来说1s刷新基本上满足大部分的场景。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员升级之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档