GCS 容错性#

全局控制服务 (GCS) 是一个管理集群级别元数据的服务器。它还提供一些集群级别的操作,包括 actor放置组 和节点管理。默认情况下,GCS 不是容错的,因为所有数据都存储在内存中,其故障意味着整个 Ray 集群的失败。要使 GCS 容错,需要 HA Redis。然后,当 GCS 重新启动时,它会从 Redis 实例加载所有数据并恢复常规功能。

在恢复期间,以下功能不可用:

  • 角色创建、删除和重建。

  • 放置组的创建、删除和重建。

  • 资源管理。

  • 工作节点注册。

  • 工作进程创建。

然而,Ray 任务和参与者仍然保持活动状态,任何现有的对象将继续可用。

设置 Redis#

如果你正在使用 KubeRay,请参考 KubeRay 关于 GCS 容错的文档

如果你使用 ray start 来启动 Ray 头节点,请将操作系统环境 RAY_REDIS_ADDRESS 设置为 Redis 地址,并在调用 ray start 时使用 --redis-password 标志提供密码:

RAY_REDIS_ADDRESS=redis_ip:port ray start --head --redis-password PASSWORD

如果你使用 ray up 来启动 Ray 集群,修改 head_start_ray_commands 字段,添加 RAY_REDIS_ADDRESS--redis-passwordray start 命令中:

head_start_ray_commands:
  - ray stop
  - ulimit -n 65536; RAY_REDIS_ADDRESS=redis_ip:port ray start --head --redis-password PASSWORD --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml --dashboard-host=0.0.0.0

如果你在使用 Kubernetes 但没有使用 KubeRay,请参考 此文档

一旦 GCS 由 Redis 支持,当它重新启动时,它将通过从 Redis 读取来恢复状态。当 GCS 从失败状态恢复时,raylet 将尝试重新连接到 GCS。如果 raylet 在 60 秒内未能重新连接到 GCS,raylet 将退出,相应的节点将失败。此超时阈值可以通过操作系统环境变量 RAY_gcs_rpc_server_reconnect_timeout_s 进行调整。

如果GCS的IP地址在重启后会改变,最好使用一个合格的域名,并在启动时将其传递给所有raylet。Raylet将解析域名并连接到正确的GCS。你需要确保在任何时候,只有一个GCS是活动的。

备注

仅当你使用 KubeRay 进行 Ray 服务容错 时,官方才支持使用外部 Redis 的 GCS 容错。对于其他情况,你可以自行承担风险使用,并且需要实现额外的机制来检测 GCS 或头节点的故障并重启它。