我需要实例组管理器创建多个实例,然后让每个实例运行启动脚本。但我希望此实例创建有一定的顺序或间隔。因为如果多个节点同时运行相同的启动脚本。这将产生一些冲突结果。并且只有一个节点可以加入我的分布式集群。我想在我的启动脚本中添加一些随机睡眠,让不同的实例可以在不同的时间戳触发启动脚本。但这对我们的基础设施来说太过黑客和不可预测。
我还尝试在本地启动脚本中更改 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
这将强制您的脚本在继续之前获取锁。一旦一个进程完成,另一个进程将获取锁并继续。