如何设置实例组管理器不同时创建实例?

如何设置实例组管理器不同时创建实例?

我需要实例组管理器创建多个实例,然后让每个实例运行启动脚本。但我希望此实例创建有一定的顺序或间隔。因为如果多个节点同时运行相同的启动脚本。这将产生一些冲突结果。并且只有一个节点可以加入我的分布式集群。我想在我的启动脚本中添加一些随机睡眠,让不同的实例可以在不同的时间戳触发启动脚本。但这对我们的基础设施来说太过黑客和不可预测。

我还尝试在本地启动脚本中更改 instance_group_manager 目标大小,例如将 target_size 从 1 设置为 n。但这会花费太长时间销毁并创建一个实例,并且每次都会为每个实例刷新一个新的 ip。这会让我的主节点对数据节点 IP 产生混淆。

那么有人知道如何在 instance_group_manager 中设置依赖项来创建多个实例,尤其是通过使用 terraform?

答案1

这也许是一个更重量级的解决方案。但在更大的集群中可能更有意义。

您可以使用由外部存储控制的锁定机制。Consul 是一款内置于其客户端的软件:https://www.consul.io/docs/commands/lock.html

这还要求您作为脚本的一部分在实例上以客户端模式引导 Consul Agent。

然后,假设你的启动脚本做了类似的事情:

mybinary register

你也可以这样做:

consul lock mykeyprefix mybinary register

这将强制您的脚本在继续之前获取锁。一旦一个进程完成,另一个进程将获取锁并继续。

相关内容