我正在使用分布式计算框架 Bacalhau[0]。设置集群的模式如下:
$ curl -sL https://get.bacalhau.org/install.sh | bash
[...output...]
$ bacalhau serve
To connect another node to this private one, run the following command in your shell:
bacalhau serve --node-type compute --private-internal-ipfs --peer /ip4/10.158.0.2/tcp/1235/p2p/QmeEoVj8wyxMxhcUSr6p7EK1Dcie7PvNeXCVQny15Htb1W --ipfs-swarm-addr /ip4/10.158.0.2/tcp/46199/p2p/QmVPFmHmruuuAcEmsGRapB6yDDaPxhf2huqa9PhPVEHK8F
(以生产友好的格式执行此操作涉及使用 systemd - 我已将其排除在外)。
我想做的是拥有一个 Google 托管的实例组,它监视 Cloud Pub/Sub(此处未介绍)以在发出信号时创建一个新实例。问题是对等字符串只有在第一个实例启动后才知道。我最初的想法是启动一个实例,捕获输出,并将其写入一个公共位置,所有内容都可以从中读取。
我考虑过以下模式:
我读过这篇关于使用 GCS 选举领导者的文章[1],但我可以强制 GCS 作为锁定机制吗?还是我需要使用整个图书馆[2]?或者还有其他解决方案吗?我可以使用 GCP 上的任何托管服务来完成此任务。
我的偏好不是使用 golang,而是使用非编译语言(例如 Python)来完成此任务。
[0] https://docs.bacalhau.org/quick-start-pvt-cluster
[2] https://pkg.go.dev/github.com/hashicorp/vault/physical/gcs
您可以采用的一种方法是使用元数据服务器来存储对等字符串。 *GCP 文档。
GCP 提供了一个实例元数据服务器,允许您存储和检索实例的元数据。创建新实例时,您可以使用 gcloud 命令行工具或 Google Cloud API 将对等互连字符串设置为实例的元数据:
gcloud compute instances add-metadata INSTANCE_NAME --metadata PEERING_STRING=VALUE
从 Bacalhau 启动脚本中读取元数据:
curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/PEERING_STRING"
如果您特别想要一个 python 脚本,请使用请求库向此 curl 链接发出 api 请求。