17.2. Geo レプリケーションの要件と制約
- Geo レプリケーション設定では、Red Hat Quay で、すべてのリージョンが他の全リージョンのオブジェクトストレージに対して読み取りと書き込みができるようにする必要があります。オブジェクトストレージは、他のすべてのリージョンから地理的にアクセスできる必要があります。
- 1 つの Geo レプリケーションサイトでオブジェクトストレージシステムに障害が発生した場合に、そのサイトの Red Hat Quay デプロイメントをシャットダウンして、クライアントがグローバルロードバランサーにより、ストレージシステムで問題のない残りのサイトにリダイレクトされるようにする必要があります。そうしないと、クライアントでプルとプッシュの失敗が発生します。
- Red Hat Quay は、接続されたオブジェクトストレージシステムの健全性や可用性を内部的に認識しません。分散システムの健全性を監視し、ストレージのステータスに基づいてトラフィックを別のサイトにルーティングするには、ユーザーがグローバルロードバランサー (LB) を設定する必要があります。
-
Geo レプリケーションデプロイメントのステータスを確認するには、
/health/endtoend
チェックポイントを使用する必要があります。このチェックポイントは全体的な健全性の監視に使用されます。/health/endtoend
エンドポイントを使用してリダイレクトを手動で設定する必要があります。/health/instance
エンドポイントは、ローカルインスタンスの健全性のみをチェックします。 - 1 つのサイトのオブジェクトストレージシステムが利用できなくなった場合に、残りのサイトの残りのストレージシステム (複数可) に自動的にリダイレクトされません。
- Geo レプリケーションは非同期です。サイトが完全に失われると、そのサイトのオブジェクトストレージシステムに保存されていても、障害発生時に残りのサイトに複製されていないデータが失われます。
単一のデータベース、つまりすべてのメタデータと Red Hat Quay 設定がすべてのリージョンで共有されます。
Geo レプリケーションはデータベースをレプリケートしません。障害が発生すると、Geo レプリケーションが有効になっている Red Hat Quay は別のデータベースにフェイルオーバーしません。
- 1 つの Redis キャッシュは Red Hat Quay のセットアップ全体で共有され、すべての Red Hat Quay Pod からアクセスできる必要があります。
-
ストレージバックエンド以外のすべてのリージョンで同じ設定を使用する必要があります。これは、
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数を使用して明示的に設定できます。 - Geo レプリケーションでは、各リージョンにオブジェクトストレージが必要です。ローカルストレージでは機能しません。
- 各リージョンは、ネットワークパスを必要とする各リージョン内のすべてのストレージエンジンにアクセスできる必要があります。
- また、ストレージプロキシーオプションを使用することもできます。
- ストレージバックエンド全体 (たとえば、すべての Blob) がレプリケートされます。対照的に、リポジトリーミラーリングはリポジトリーまたはイメージに限定できます。
- すべての Red Hat Quay インスタンスは、通常はロードバランサーを介して同じエントリーポイントを共有する必要があります。
- すべての Red Hat Quay インスタンスは、共通の設定ファイル内で定義されているため、スーパーユーザーの同じセットが含まれる必要があります。
geo レプリケーション環境では、Clair 設定を
unmanaged
に設定できます。アンマネージド Clair データベースにより、Red Hat Quay オペレーターは、Operator の複数のインスタンスが同じデータベースと通信する必要がある地理的に複製された環境で作業できます。詳細は、Advanced Clair configuration を参照してください。Clair 設定を
管理
したままにする場合は、Operator によってデプロイされるデプロイされた Clair インスタンスの設定ファイルを取得する必要があります。詳細は、OpenShift Container Platform 上の Clair デプロイメントの Clair 設定シークレットの取得およびデコード を参照してください。- Geo レプリケーションには SSL/TLS 証明書とキーが必要です。詳細は、「Geo-Replication には SSL/TLS 証明書とキーが必要」を参照してください。詳細は、SSL/TLS 証明書を使用した概念実証のデプロイメント を参照してください。
上記の要件を満たすことができない場合は、代わりに 2 つ以上の異なる Red Hat Quay のデプロイメントを使用し、リポジトリーミラーリング機能を利用する必要があります。
17.2.1. スタンドアロン Red Hat Quay のストレージレプリケーションを有効にする リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、Red Hat Quay でストレージのレプリケーションを有効にします。
手順
config.yaml
ファイルを更新して、データのレプリケート先のストレージエンジンを含めます。使用するすべてのストレージエンジンをリストする必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: すべてのイメージをすべてのストレージエンジンに完全にレプリケートする必要がある場合は、
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS
フィールドを手動で設定すると、イメージをストレージエンジンにレプリケートできます。これにより、すべてのイメージがそのストレージエンジンにレプリケートされます。以下に例を示します。# ... DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - usstorage - eustorage # ...
# ... DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - usstorage - eustorage # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記名前空間ごとのレプリケーションを有効にするには、Red Hat Quay サポートにお問い合わせください。
ストレージを追加して Geo レプリケーションの Replicate to storage engine by default を有効にした後、すべてのストレージで既存のイメージデータを同期する必要があります。これを行うには、次のコマンドを実行してコンテナー内で実行する必要があります。
podman exec -it <container_id>
$ podman exec -it <container_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいストレージを追加した後にコンテンツを同期するために、次のコマンドを入力します。
scl enable python27 bash
# scl enable python27 bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow python -m util.backfillreplication
# python -m util.backfillreplication
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この操作は、新しいストレージを追加した後にコンテンツを同期するための 1 回限りの操作です。
17.2.2. ストレージの環境設定による Red Hat Quay の実行 リンクのコピーリンクがクリップボードにコピーされました!
- config.yaml を Red Hat Quay を実行しているすべてのマシンにコピーします。
各リージョンの各マシンは、マシンが稼働しているリージョンの優先ストレージエンジンを持つ
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数を追加します。たとえば、ヨーロッパで稼働しているマシンで、ホスト上の config ディレクトリーが
$QUAY/config
から利用できる場合です。sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \ registry.redhat.io/quay/quay-rhel8:v3.13.5
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \ registry.redhat.io/quay/quay-rhel8:v3.13.5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記指定された環境変数の値は、コンフィグパネルで定義されたロケーション ID の名前と一致する必要があります。
- すべての Red Hat Quay コンテナーを再起動します。
17.2.3. スタンドアロン Red Hat Quay デプロイメントから geo レプリケートされたサイトを削除する リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用すると、Red Hat Quay 管理者は geo レプリケートされたセットアップ内のサイトを削除できます。
前提条件
-
少なくとも 2 つのサイト (例:
usstorage
とeustorage
) を使用して Red Hat Quay Geo レプリケーションを設定している。 - 各サイトに、独自の組織、リポジトリー、およびイメージタグがある。
手順
次のコマンドを実行して、定義されたすべてのサイト間で Blob を同期します。
python -m util.backfillreplication
$ python -m util.backfillreplication
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告Red Hat Quay
config.yaml
ファイルからストレージエンジンを削除する前に、定義されているすべてのサイト間ですべての Blob が同期されていることを確認する 必要があります。続行する前に、この手順を完了してください。-
サイト
usstorage
の Red Hat Quayconfig.yaml
ファイルで、eustorage
サイトのDISTRIBUTED_STORAGE_CONFIG
エントリーを削除します。 次のコマンドを入力して、実行中のコンテナーのリストを取得します。
podman ps
$ podman ps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92c5321cde38 registry.redhat.io/rhel8/redis-5:1 run-redis 11 days ago Up 11 days ago 0.0.0.0:6379->6379/tcp redis 4e6d1ecd3811 registry.redhat.io/rhel8/postgresql-13:1-109 run-postgresql 33 seconds ago Up 34 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay d2eadac74fda registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92c5321cde38 registry.redhat.io/rhel8/redis-5:1 run-redis 11 days ago Up 11 days ago 0.0.0.0:6379->6379/tcp redis 4e6d1ecd3811 registry.redhat.io/rhel8/postgresql-13:1-109 run-postgresql 33 seconds ago Up 34 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay d2eadac74fda registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、PostgreSQL コンテナー内でシェルを実行します。
podman exec -it postgresql-quay -- /bin/bash
$ podman exec -it postgresql-quay -- /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して psql を入力します。
bash-4.4$ psql
bash-4.4$ psql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、geo レプリケートされたデプロイメント内のサイトのリストを表示します。
quay=# select * from imagestoragelocation;
quay=# select * from imagestoragelocation;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
id | name ----+------------------- 1 | usstorage 2 | eustorage
id | name ----+------------------- 1 | usstorage 2 | eustorage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して postgres CLI を終了し、bash-4.4 に再度入ります。
\q
\q
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
eustorage
サイトを完全に削除します。重要次の操作は元に戻すことができません。注意して使用してください。
bash-4.4$ python -m util.removelocation eustorage
bash-4.4$ python -m util.removelocation eustorage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.2.4. OpenShift Container Platform での Geo レプリケーションのセットアップ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform で Geo レプリケーションを設定するには、次の手順を実行します。
手順
- Red Hat Quay の postgres インスタンスをデプロイします。
次のコマンドを入力してデータベースにログインします。
psql -U <username> -h <hostname> -p <port> -d <database_name>
psql -U <username> -h <hostname> -p <port> -d <database_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow quay
という名前で Red Hat Quay のデータベースを作成します。以下に例を示します。CREATE DATABASE quay;
CREATE DATABASE quay;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データベース内で pg_trm 拡張機能を有効にします。
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Redis インスタンスをデプロイします。
注記- クラウドプロバイダーに独自のサービスが含まれている場合は、Redis インスタンスをデプロイする必要がない可能性があります。
- Builder を利用している場合は、Redis インスタンスをデプロイする必要があります。
- Redis 用の VM をデプロイします。
- Red Hat Quay が実行されているクラスターからアクセスできることを確認します。
- ポート 6379/TCP が開いている必要があります。
インスタンス内で Redis を実行します。
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- クラスターごとに 1 つずつ、2 つのオブジェクトストレージバックエンドを作成します。1 つのオブジェクトストレージバケットが最初のクラスター (プライマリークラスター) の近くにあり、もう 1 つが 2 番目のクラスター (セカンダリークラスター) の近くにあると理想的です。
- 環境変数のオーバーライドを使用して、同じ設定バンドルでクラスターをデプロイし、個々のクラスターに適切なストレージバックエンドを選択します。
- クラスターへの単一のエントリーポイントを提供するように、ロードバランサーを設定します。
17.2.4.1. Red Hat Quay on OpenShift Container Platform での geo レプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay on OpenShift Container Platform の geo レプリケーションを設定するには、次の手順を使用します。
手順
クラスター間で共有される
config.yaml
ファイルを作成します。このconfig.yaml
ファイルには、一般的な PostgreSQL、Redis、ストレージバックエンドの詳細が含まれています。Geo レプリケーションの
config.yaml
ファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ルートには適切な
SERVER_HOSTNAME
を使用する必要があり、グローバルロードバランサーのホスト名と一致する必要があります。
次のコマンドを入力して、
configBundleSecret
を作成します。oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各クラスターで、
configBundleSecret
を設定し、QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数のオーバーライドを使用して、そのクラスターに適切なストレージを設定します。以下に例を示します。注記両方のデプロイメント間の
config.yaml
ファイルは一致する必要があります。一方のクラスターに変更を加える場合は、もう一方のクラスターでも変更する必要があります。US クラスター
QuayRegistry
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記SSL/TLS が管理対象であり、ルートが管理対象外であるため、証明書を設定バンドルで直接指定する必要があります。詳細は、SSL/TLS とルートの設定 を参照してください。
ヨーロッパのクラスター
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記SSL/TLS が管理対象であり、ルートが管理対象外であるため、証明書を設定バンドルで直接指定する必要があります。詳細は、SSL/TLS とルートの設定 を参照してください。
17.2.5. OpenShift Container Platform デプロイメント上の Red Hat Quay から geo レプリケートされたサイトを削除する リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用すると、Red Hat Quay 管理者は geo レプリケートされたセットアップ内のサイトを削除できます。
前提条件
- OpenShift Container Platform にログインしている。
-
少なくとも 2 つのサイト (例:
usstorage
とeustorage
) を使用して Red Hat Quay Geo レプリケーションを設定している。 - 各サイトに、独自の組織、リポジトリー、およびイメージタグがある。
手順
次のコマンドを実行して、定義されたすべてのサイト間で Blob を同期します。
python -m util.backfillreplication
$ python -m util.backfillreplication
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告Red Hat Quay
config.yaml
ファイルからストレージエンジンを削除する前に、定義されているすべてのサイト間ですべての Blob が同期されていることを確認する 必要があります。このコマンドを実行すると、レプリケーションワーカーによって取得されるレプリケーションジョブが作成されます。レプリケートする必要がある Blob がある場合、スクリプトはレプリケートされる Blob の UUID を返します。このコマンドを複数回実行したときに、スクリプトから返された出力が空であっても、レプリケーションプロセスが完了したことを意味するわけではありません。それはレプリケーションのためにキューに入れる Blob が残っていないことを意味します。レプリケーションにかかる割り当て時間は検出された Blob の数によって異なるため、次のステップに進む前に適切に評価してください。
または、Microsoft Azure などのサードパーティーのクラウドツールを使用して、同期ステータスを確認することもできます。
このステップは次に進む前に完了する必要があります。
-
サイト
usstorage
の Red Hat Quayconfig.yaml
ファイルで、eustorage
サイトのDISTRIBUTED_STORAGE_CONFIG
エントリーを削除します。 次のコマンドを入力して、
Quay
アプリケーション Pod を識別します。oc get pod -n <quay_namespace>
$ oc get pod -n <quay_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssm
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力して、
usstorage
Pod でインタラクティブシェルセッションを開きます。oc rsh quay390usstorage-quay-app-5779ddc886-2drh2
$ oc rsh quay390usstorage-quay-app-5779ddc886-2drh2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
eustorage
サイトを完全に削除します。重要次の操作は元に戻すことができません。注意して使用してください。
python -m util.removelocation eustorage
sh-4.4$ python -m util.removelocation eustorage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow