如何在不停机的情况下更改redis passwd

How to change redis passwd without downtime

出于安全考虑,我们计划定期(比如每 4 周)更改我们的 redis 密码。问题是如何在没有外部停机时间或很短的时间内更改它。

我的计划是:

  1. 清除redis服务器上的密码并重启。
  2. 鉴于不需要密码,即使使用过时的密码,客户端仍然可以重新连接到 Redis 服务器
  3. 客户端定期从配置中心重新加载新密码,不久之后,所有客户端都将更新为新密码。
  4. 将redis服务器更改为新密码并重新启动。
  5. 客户端使用新密码重新连接到 redis 服务器

但是当我尝试它时(我正在使用 redigo),我在第 2 步得到了 ERR Client sent AUTH, but no password is set。如果没有,似乎我们无法使用额外的密码连接到 redis需要密码。但是当我使用redis-cli时,它可以!我想知道 redis-cli 是如何做到这一点的,我该如何使用 redigo 做到这一点?

密码轮换的常见解决方案是:

  • 在密码轮转期间,让配置提供商提供两个密码:当前密码和以前的密码。
  • 客户端尝试使用当前密码。
  • 如果失败,它会重试上一个。

在轮转期结束时,服务器将使用新密码重新启动,旧密码将从配置中删除。

为什么不使用 Redis ACL https://redis.io/topics/acl

  1. 使用密码 1 创建当前用户 user1
  2. 时间段创建后 user2/password2
  3. 为应用程序留出重新连接的宽限期(某些客户端允许您在 go 中设置 MaxConnAge)
  4. 删除user1/password1