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-password
到 ray 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
一旦 GCS 由 Redis 支持,当它重新启动时,它将通过从 Redis 读取来恢复状态。当 GCS 从失败状态恢复时,raylet 将尝试重新连接到 GCS。如果 raylet 在 60 秒内未能重新连接到 GCS,raylet 将退出,相应的节点将失败。此超时阈值可以通过操作系统环境变量 RAY_gcs_rpc_server_reconnect_timeout_s
进行调整。
如果GCS的IP地址在重启后会改变,最好使用一个合格的域名,并在启动时将其传递给所有raylet。Raylet将解析域名并连接到正确的GCS。你需要确保在任何时候,只有一个GCS是活动的。