知识卡片
Codis生产环境实践经验合集
内容
Codis作者在分享中给出的多条一线运维经验,共同的主题是”分布式系统的可用性不只由核心算法决定,大量细节决定了系统能不能扛住真实故障”:第一,多产品线共用同一套Codis集群时,必须用product_name做逻辑隔离,让不同业务的元数据、监控和迁移互不干扰,避免一个业务的误操作波及其他业务;第二,ZooKeeper必须和使用它的Codis组件部署在同一机房,跨机房访问ZooKeeper是明确的反模式(作者原话是”跨机房,想都别想”),因为ZooKeeper对网络延迟和分区极其敏感,跨机房会显著放大不可用的概率;第三,Codis采用了两层高可用设计——Proxy层的HA用Jodis(基于ZooKeeper的客户端库,能感知Proxy节点的增减)实现,底层Redis本身的HA则用专门的Codis-ha组件实现,两层职责分开、互不耦合;第四,Dashboard作为集中管理组件,必须保证和集群内所有Proxy、Redis节点的网络连通性,一旦连通性出问题,集群的元数据变更和监控会立即失效;第五,队列型数据结构的设计要避免”把所有消息都塞进一个key对应的List”这种反模式,一旦某个业务量暴涨,单个key会成为热点、拖垮所在分片,应当提前做好分片打散;第六,主从Redis做Bgsave(RDB持久化)时会瞬间占用大量内存和CPU,如果主从的Bgsave时间点没有错开,容易造成同时抖动,需要在运维策略上主动错峰调度。这些经验的共同价值在于:它们大多不是Codis特有的问题,而是任何”多组件协同+分片+持久化”的分布式存储系统都会遇到的通用运维陷阱。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.1 Codis作者细说分布式Redis架构设计"节,"2.1.5 问答环节"(源文件:_epub-src/OEBPS/Text/Chapter2_1_6.xhtml)
- 结论依据:原文问答环节中作者逐条回应了多产品线隔离、ZooKeeper跨机房问题("跨机房,想都别想")、Jodis/Codis-ha两层HA设计、Dashboard连通性、队列反模式和主从Bgsave错峰等具体运维建议,共同支撑本卡片的经验合集。
- 原始内容:多个产品线共用集群时,要用product_name做隔离……ZooKeeper一定要和使用它的组件在同一个机房,跨机房,想都别想……Proxy层的HA用Jodis,Redis层的HA用Codis-ha……主从的Bgsave最好错开时间,否则容易同时抖动。