Redis Cluster迁移遇到的各种运维坑及解决方案

  • 时间:
  • 浏览:2
  • 来源:uu快3电脑版_uu快3和值_礼金

都都可以看出来,非常传统的法律土办法 。开使英文英文英文里都都可以 另有有三个多Default集群,PHP 所有功能获取Redis句柄还会这个 ,流量增长后开使英文英文英文按功能划分。

某天8点40左右,还在地铁的我接到电话,Redis 连接报错,貌似几块实例的连接数被打满。这个 故障持续时间较长,PHP Redis 扩展直连 Redis Cluster,连接持续增长,直到打满全版连不上。

故障的图找都都可以 了,截图一张正常网卡流量图 -_^

3.停掉老 Twemproxy 集群,完成迁移。

3.增加网卡流量监控,到达60 %报警。

高度剖析

针对网卡最后引出另有有三个多外理方案:

5.应用端分不清 Cache/Storage,无缘无故 都都可以做成 Cache 的 Key,不加ttl愿因着无效内存占用。

大间题2:你这该死的连接数

反思:

大间题很典型了,非常严重的故障愿因着Redis OOM(Out of Memory)。

脑裂在所谓的分布式系统中很常见,大伙什么都我陌生,做为DBA最怕的什么都我Mysql keepalived 脑裂,造成主库双写。难道 Redis Cluster中也会有脑裂么?

3.混布,愿因着部份产品线消耗资源发生问题,影响其它所有实例。

反思:

午夜5点接到电话,发现应用都看数据不一致,偶尔是无数据,偶尔有数据,很像读到了脏数据。

另外:还有同去网卡故障,是应用层 Bug,频繁请求大 Json Key 打满网卡。当时QPS稳定保持在20W左右,千兆网卡被打满。临时外理方案直接干掉这个 Key,后后再由 RD 排查。

此方案中的Smart Proxy 是大伙此人 写的,事实证明很有必要,其作为Redis Cluster 的前端,用来屏蔽Redis Cluster 的僵化 性。

嘴笨 写在最后,但远这么刚开使英文英文,征程才后后开使英文英文英文。

考虑不周,备份时,只在 Slave 上 Bgsave。主库并且 并且 愿因着重启,立马被 systemd 拉起,时间远短于 Cluster 选举时间。

3.做为”世界上最好的语言”,偶尔还是并且 大间题,最好在 Redis 和 PHP 间隔层 Proxy,将后端 Redis 保护在安全的位置。

◆集中部署,N台机器专职负责某个产品线。

2.PHP Redis 扩展 Bug,连接不释放,线下稳定复现。

◆针对这类大间题,有另有有三个多想法:QPS 报警,比如阀值定在2W。还有另有有三个多在Proxy上做文章,对 Key 的访问做限速或增加 Key 的屏蔽功能。

1.公司使用 Redhat7,所有的应用还会由 systemd 管理,启动这么指定Limit NOFILE,愿因着 Redis maxclients 限制死在60 0左右。

2.屏蔽细节,在Redis Cluster上层做 Proxy 的重要性再一次得到验证。

登上Redis,Cluster Nodes,Cluster Config,嘴笨 发现不同 Redis 实例配置了不同的Cluster Nodes。想起了昨天有对该集群迁移,下掉了几块实例,并且 在 PHP 配置端这么推送配置,愿因着 PHP 并且 读到了旧实例数据,马上重新推送一遍配置,大间题外理。

引子

◆删除指定Key

◆统计Redis内存分布

方案看似简单,实际使用要慎重。大伙都知道 Redis Rdb Bgsave 会使线上卡顿,什么都需要在低峰期做,并且 轮流 Redis Master 同步,千万都都可以 同去用 Redis Port 做 Sync。

好的,敬请欣赏。

1.架构改动这么经过充分测试,线下稳定复现的Bug这么仔细测试直接上线。

大伙Redis 部署特点如下:

2.使用 Redis 做计数器,占用过大内存空间。这个 Redis 官网有外理方案,利用 hash/list 的线性存储,很有效。并且 并且 mget 无法改造,大伙没采用。

2.所有 Redis 产品线散开,混合部署打散。

◆……

Mysql 在多个从库上做读负载均衡很常见,Redis Cluster也会么?

5.主库重启 Flush 掉从库

3.疑似 Cluster 脑裂?

迁移方案如下:

周六上午10点,市场运营推送消息,愿因着人为打造了小高峰,又是如坐针毡的波峰图,服务立马报警,紧急之下立马再次抛掉60 %请求。

并且经过排查,确认是扩展 Bug,愿因着老连接不释放。同去,并且 愿因着也什么都:

1.网卡故障

1.有任务配置的变更,一定考虑好所有环境的连动。这也是当前配置无自动发现的弊端。

◆监控报警都都可以 位,对于创业公司比较常见,发生同去外理同去。

1.Redis Master => Redis-Port => Smart Proxy => Redis Cluster

外理方案:

公司重度依赖Redis,除了图片其它所有数据还会Redis中。在稳定为主的前提下,还在向Redis Cluster迁移,其暗含几块大间题还待外理:

1.应用设计大间题,主次 hset 过大,一度超过48W条记录,Redis频繁卡顿感。

为啥儿 要睡觉?而还会连夜迁移?做为运维人员,危险意识发生问题足。

这个 7月注定不平凡,通过7月连续的Redis故障,细心如你,还会对技术、公司、同事、职业有了更深刻的认识和反思,先回忆下吧……

1.Redis 实例级别高可用,机柜级别高可用。

反思:

2.这该死的连接数

其它典型故障/大间题

◆传统 Twemproxy 法律土办法 ,额外会有此人 定制几套 Twemproxy 。

好在有@goroutine Redis-Port,非常感谢原 Codis 作者刘奇大大。

每次故障还会一次反思,但大伙拒绝活在过去,生活需要继续。

这个 迁移方案下,原Redis 无需停业务。

大间题4:Bgsave传统的典型大间题

◆跨机房同步

如前文所说,公司集中部署 Redis,此业务是线上 Cache 此人 详情页登陆相关的,一共4台机器,每台20实例,无法做到立刻扩容,紧急之下 RD 同学降级,抛掉前端60 %的请求。什么都我恢复后,高峰期已过。

2.修改 PHP Config, Gitlab 发布上线,使用新集群配置。

4.Redis 集群 build 和交付,缺少配置集中管理。

外理方案:

在 PHP 前面部署基于 Cluster 的 Smart Proxy,这是非常必要的,后文会说到。并且 公司有自定义 Redis 和 Twemproxy 版本,什么都为了做到无缝迁移,需要使用实时同步工具。

想起《东京感情的说说故事》主题曲,突如其来的感情的说说,不知该从何说起。

1.备份的同去,将 dump.rdb rsync 到主库 datadir 目录下面一份。

最终公司线上发生另有有三个多版本,Twemproxy 开启 auto_reject_host 做 Cache 集群,Redis Cluster + Smart Proxy做存储。

并且 ,紧急搭建两套不同功能的 Redis Cluster 集群,采用冷启动的法律土办法 ,并且 点将 Cache 流量打到新集群中,Mysql 几台从库 QPS 一度冲到8K。

千兆网卡在某个周五23:00业务高峰期被打满,愿因着线上请求失败—如坐针毡的波峰图。

4.机房IDC故障,单个机柜不通,中间所有混布的产品线无法提供请求,数据请求失败。

2.混布的资源隔离,都看 hunantv CMGS 的分享,Docker是另有有三个多方案。

◆QPS报警后运维人员排查,并且 并且 产生影响了,在Proxy层做对性能会有影响。

大间题1:还是网卡故障

集群模式不利于做到自动扩容,都都可以把机器当成资源池使用

也即,Redis-Port 从原Redis Master 读取数据,再通过Smart Proxy 写入到 Redis Cluster。

注意:

3.隔离上层语言与 Redis,提供稳定的 Smart Proxy接口。

基于Redis-Port,修改代码都都可以把 Redis 玩出各种花样,如同七巧板一样,里都都可以 你在身边身边想都都可以 的这么他做都都可以 的,都都可以不夸张的说是 Redis 界的瑞士军刀

单台机器不同端口轮流 Bgsave,内存发生问题时先释放 Cache,释放失败拒绝再 Bgsave 并报警。

3.运维意识发生问题,严重的人为故障。

1.所有Redis 机器做双网卡 Bonding,变成60 0Mbps。

大间题3:疑似 Cluster 脑裂?

中间什么都我普通 Redis Master/Slave 之间的故事了,Master 加载空 dump.rdb,replicate 到 Slave,刷掉 Slave数据。

这几块连续故障很严重,Leader 直接决定全版回退到老的 Twemproxy 版本,最后回退了另有有三个多最重要的产品线。

在实施过程中,遇到多种大间题,现在简要阐述如下:

本文主要涉及到的故障包括:

大间题5:主库重启 Flush 掉从库

Leader要求周六个人加班去迁移,But,2点多大伙睡了,嗯,就这么 睡了ZZZZ~~ 故障暂时外理,但故事依然继续……

2.运维意识发生问题,对 systemd 了解发生问题深入,这么对所有配置做严格检查。

◆同步主次指定Key

◆实时同步两套集群

Redis Cluster 的迁移之路

2.根据 Redis 用途,做存储使用的 Redis systemd 再加 Auto Restart 配置。

5月中旬,我来到公司,开使英文英文英文推进 Redis Cluster,争取替换掉 Twemproxy,制定了如下方案:

写在最后

5.什么都集群 QPS 不须高,内存浪费严重,急需持久化 Redis 协议存储,基于 ardb/ledisdb 的 sharding 是个方案,此人 开发需要同事的信任,这点有点痛 要。

4.Bgsave传统的典型大间题