kubernetes - 谷歌云集群上的 McRouter。节点升级如何处理?
问题描述
我们在 Google Cloud 集群上运行 3 节点mcrouter
/memcached
kubernetes
部署(通过)。helm
我们使用集群而不是单个 VM 来使我们的 Web 应用程序(使用 memcache 进行会话)对节点故障具有弹性。
更新节点时,kubernetes 会逐个逐出 pod 并生成新的。由于 memcache 是内存中的存储,因此这些新的 pod 是在没有数据的情况下创建的。我们目前使用的 mcrouter 路由对于这种情况并不是最佳的,升级期间的间歇性会话失败就是证明。
据我了解,有两种方法可以解决这个问题:
- 利用
WarmUpRoute
- 利用
MissFailoverRoute
如果我想使用,WarmUpRoute
那么我需要这样做:
- 在节点升级之前,将当前配置切换到将其中一个节点指定为“暖”服务器而将另外两个节点指定为“冷”服务器的配置。
- 在两台冷服务器上执行节点升级。
- 允许客户端查询缓存几天,这将慢慢导致冷服务器镜像暖服务器,因为缓存未命中导致同步。
- 用另一个 WarmUpRoute 配置切换此 WarmUpRoute 配置,其中先前指定为“暖”的服务器被指定为“冷”,反之亦然。
- 重复步骤 3
- 最后,当所有服务器同步恢复到我原来的配置。
如果我想使用 aMissFailoverRoute
那么我需要这样做:
- 使用将其中一个 memcache 节点指定为故障转移节点的配置。
- 更新两个非故障转移节点
- 更新故障转移节点
我理解正确吗?似乎第二种选择要简单得多。WarmUpRoute
该方法有什么优点吗?有没有比这两个更好的第三种选择?
解决方案
推荐阅读
- javascript - 如何在具有NULL值的angularjs中实现Excel Like Filter?
- android - Kotlin - 通过 Intent 将函数作为参数传递
- r - R: which() 函数是如何运作的
- vba - VBA:如何选择与变量值匹配的行中的单元格?
- java - SpringBoot CommandLineRunner run() 方法未被调用
- swift - 从标准视图构建的自定义视图的 Target-Action 问题
- r - 将R中组的中位数分别乘以条件
- angular - 无法在 Angular 应用程序中安装 flex 模块
- php - PHP -- 为 SQL 表设置样式
- javascript - Concat 与合并的对象