Memcached与AWS Classic Load Balancer配合异常问题求助
问题排查与解决思路
问题根源
- Memcached是单机缓存服务,两台EC2上的Memcached各自维护独立的缓存数据,没有自动同步机制
- 绑定CLB后,请求会被分发到不同实例:比如在实例A写入的缓存,当请求落到实例B时无法读取,直接导致缓存相关功能失效;仅单台实例时所有请求都走同一节点,缓存逻辑自然正常
可行解决方案
1. 改用分布式缓存(最优方案)
替换为AWS ElastiCache(兼容Memcached协议),所有EC2实例统一连接这个分布式缓存集群,缓存数据全局共享。代码层面仅需将Memcached的连接地址改为ElastiCache的端点,几乎无需修改业务逻辑。
2. 开启CLB会话粘性
在Classic Load Balancer中开启Cookie会话粘性,让同一用户的所有请求固定分发到同一台EC2实例:
- 操作步骤:
- 打开CLB控制台,选中目标负载均衡
- 切换到「Stickiness」标签,启用「Enable load balancer generated cookie stickiness」
- 根据业务需求设置Cookie过期时间
- 注意:该方案仅为规避问题,无法实现缓存共享,且单实例故障时,用户请求切换到另一实例会丢失之前的缓存,容错性较差。
3. 自行搭建Memcached同步(不推荐)
使用第三方工具(如memcached-replicator)配置两台实例的缓存数据同步,但会大幅增加运维复杂度,还可能出现同步延迟导致的数据不一致问题,故障恢复成本高,一般不建议采用。
内容的提问来源于stack exchange,提问作者Dipak Panchal
相关产品推荐
相关产品推荐

