我在 AWS 上运行一个网站,该网站有许多 Web 服务器(比如说 4 个)在负载均衡器后面运行。对于这个特定的网站,我有一个 New Relic 许可证密钥用于进行检测。在任何时候,我只希望 4 个 Web 服务器中的一个使用该密钥。如果该服务器离线,我希望剩余的 Web 服务器中的一个能够开始使用该许可证密钥。
有谁知道有什么服务可以让我管理这个过程吗?该服务不需要存储密钥本身,而只需管理只有一个 Web 服务器可以随时租出使用密钥的权利。Web 服务器必须每隔几分钟回来续订租约,如果不续订,则其他人可以使用该密钥。
我刚刚意识到我也许可以使用 S3 上的文件来实现这个破解版本,但这并不能防止竞争条件等,而且绝对是黑客行为。
欢迎提出任何想法。仅供参考,本网站基于 Ruby on Rails 构建。谢谢!
J.P
答案1
令人惊讶的是,提出问题后答案经常会弹出。我很确定我可以通过将这些许可证密钥存储在这些 Web 服务器已经共享的数据库中来实现这一点。数据库表将有
- 许可证密钥
- 当前已签出的 Web 服务器的 ID(这对于特定的正在运行的实例必须是唯一的,例如其名称 + PID)
- 上次续订的时间戳
我可以制作一个 ruby gem / rails 引擎,所有 Web 服务器都使用它来与此表交互。当它们访问表时,它们可以使用锁定和事务来防止竞争条件 / 并发问题。如果拥有密钥租约的 Web 服务器发生故障,它将不会续订其租约。其他服务器将定期检查许可证,当其中一个服务器发现许可证最近没有续订时,它将检查并开始使用它。