これは ZOZO Advent Calendar 2024 カレンダー Vol.9 の 5日目の記事です。
はじめに
昨日はRay ClusterのWorker NodeでService Accountを指定するというタイトルで、Ray Clusterに関する記事を投稿しました。
昨日に引き続き、本日もRay Cluster関連の投稿になります。Ray Clusterについては1日目の記事(GKE上に構成したRay Clusterに外部Load Balancer経由でアクセスする)で簡単に説明しているため、ご参照ください。
本記事では、Ray ClusterのGlobal Control Storeコンポーネント(以下GCS)をGoogle CloudのマネージドサービスであるMemorystore for Redisに置き換える方法をご紹介します。
Global Control Store(GCS)とは
GCSはRay Clusterにおけるmetadataサーバーの役割をしており、stateを管理します。
デフォルトではHead Nodeのメモリ上でstateを持ちますが、Ray ClusterではHead NodeはPodであるため、単一障害点となります。
フォールトトレランスの観点から今回はGCSコンポーネントをMemorystore for Redisで置き換えます。
GCSのRedisでの置き換え
Memorystore for Redisの構成については割愛します。公式ドキュメントを参考に事前構築し、Ray ClusterのHead Nodeから通信できるように、Ray Clusterを構成するVPCとPeeringしてください。
Ray Clusterでは、RayClusterオブジェクトのマニフェストで指定することにより、GCSを指定したRedisインスタンスに置き換えることができます。
RayClusterのマニフェストについて、以下のAnnotationとHead Nodeの環境変数を指定するようにしてください。
apiVersion: ray.io/v1
kind: RayCluster
metadata:
annotations:
ray.io/ft-enabled: "true"
spec:
headGroupSpec:
template:
spec:
containers:
- env:
- name: RAY_REDIS_ADDRESS
value: <redisip>:<redis-port>
- name: ENABLE_GCS_FT_REDIS_CLEANUP
value: "true"
環境変数のENABLE_GCS_FT_REDIS_CLEANUP
はGCS metadataの自動削除を制御するパラメータになります。デフォルトではtrue
となっており、Jobの失敗時にベストエフォートでRedisからmetadataが自動削除されます。
詳細は公式ドキュメントで説明されているためご参照ください。