GCS 容错#
全局控制服务 (Global Control Service),简称 GCS,负责管理集群级别的元数据。它还提供了一些集群级别的操作,包括 Actor、Placement Group 和节点管理。默认情况下,GCS 不具备容错能力,因为它将所有数据存储在内存中。如果 GCS 失败,整个 Ray 集群都会失败。要启用 GCS 容错,您需要一个高可用的 Redis 实例,称为 HA Redis。然后,当 GCS 重启时,它会从 Redis 实例加载所有数据并恢复正常功能。
在恢复期间,以下功能将不可用
Actor 的创建、删除和重建。
Placement Group 的创建、删除和重建。
资源管理。
Worker 节点的注册。
Worker 进程的创建。
然而,正在运行的 Ray 任务和 Actor 仍然存活,任何现有的对象仍然可用。
设置 Redis#
如果您正在使用 KubeRay,请参考 KubeRay 关于 GCS 容错的文档。
如果您正在使用 ray start 命令来启动 Ray Head 节点,请将操作系统环境变量 RAY_REDIS_ADDRESS 设置为 Redis 地址,并在调用 ray start 时使用 --redis-password 标志提供密码。
RAY_REDIS_ADDRESS=redis_ip:port ray start --head --redis-password PASSWORD --redis-username default
如果您正在使用 ray up 命令来启动 Ray 集群,请修改 head_start_ray_commands 字段,将 RAY_REDIS_ADDRESS 和 --redis-password 添加到 ray start 命令中。
head_start_ray_commands:
- ray stop
- ulimit -n 65536; RAY_REDIS_ADDRESS=redis_ip:port ray start --head --redis-password PASSWORD --redis-username default --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml --dashboard-host=0.0.0.0
在您使用 Redis 备份 GCS 后,GCS 在重启时会从 Redis 中恢复其状态。在 GCS 恢复期间,每个 Raylet 会尝试重新连接到 GCS。如果一个 Raylet 在 60 秒以上无法重新连接,该 Raylet 将会退出,并且相应的节点将失败。您可以使用操作系统环境变量 RAY_gcs_rpc_server_reconnect_timeout_s 来设置此超时阈值。
如果 GCS 的 IP 地址在重启后可能会发生变化,请使用一个合格的域名,并在启动时将其传递给所有 Raylet。每个 Raylet 会解析该域名并连接到正确的 GCS。您需要确保在任何时候只有一个 GCS 在运行。
注意
使用外部 Redis 进行 GCS 容错,仅在您使用 KubeRay 来实现 Ray Serve 容错 时得到官方支持。对于其他情况,您可以自行承担风险使用,并且您需要实现额外的机制来检测 GCS 或 Head 节点的故障并重启它们。
注意
您也可以在 Anyscale 上运行 Ray 时启用 GCS 容错。有关说明,请参阅 Anyscale 的 文档。