---
title: OpenLM Router のトラブルシューティング
description: OpenLM Platform 環境で OpenLM Router によく見られる症状とその意味を、起動しないコンテナーから、クライアントに届かなかったフェイルオーバーまで説明します。
product: OpenLM Platform
---

## 始める前に

次の前提条件を確認します。

- Router ホストで `docker compose` と `curl` を実行できること。
- デプロイした各 Router イメージのビルドを把握していること。[OpenLM Router をデプロイする](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/deployment)を参照してください。

目に見えている症状から調べてください。Router の問題のほとんどは、コンテナーが起動していない、Router が OpenLM Platform と同期していない、クライアントが Router に移されていない、の 3 つのいずれかです。

## Router のコンテナーが起動しないのはなぜですか

起動しないコンテナーの症状、原因、対処を、次の表に示します。

| 症状 | 原因 | 対処 |
| --- | --- | --- |
| 起動時にコンテナーが `Mongo ConnectionString cannot be null or empty.` で終了する。 | 接続文字列の変数名が間違っています。Router が読み取るのは、アンダースコアが 2 つの `MONGODB__CONNECTIONSTRING` です。アンダースコアが 1 つの変数は無視され、値は空になります。 | 環境ファイルの変数名を修正し、コンテナーを作成し直します。`REDIS__CONNECTIONSTRING` についても同様です。 |
| 起動時にコンテナーが `Failed to convert configuration value '' at 'admissionController:routing:CorrelationMode'` で終了する。 | `ROUTER_CORRELATION_MODE` と `ROUTER_PROXY_PROTOCOL_ENABLED` はどちらも必須ですが、少なくとも一方が設定されていません。 | [OpenLM Router をデプロイする](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/deployment)のとおり、Router の環境に `ROUTER_CORRELATION_MODE=Ip` と `ROUTER_PROXY_PROTOCOL_ENABLED=false` を追加します。示されているとおりの値のままにしてください。 |
| MongoDB または Redis に接続できないことが Router のログに記録される。 | 接続文字列に、`mongo` や `redis` などの Compose のサービス名を使っています。Router はホストネットワークを使うため、これらの名前は名前解決できません。 | [OpenLM Router をデプロイする](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/deployment)のとおり、データストアのポートをホストに公開し、接続文字列には `localhost` を使います。 |
| OpenLM Platform 接続の保存が `Platform encryption key must be 32 bytes (256-bit) after Base64 decoding, but was 44 bytes.` で失敗する。 | 暗号化キーが 2 回 Base64 エンコードされています。 | `openssl rand -base64 32` が出力した文字列を、出力されたとおりに保存します。この文字列はすでに Base64 であり、もう一度エンコードすることがこのエラーの原因です。正しいキーは、デコードすると 32 バイトになります。 |
| Router UI のコンテナーが `invalid number of arguments in "server_name" directive` をログに記録し、再起動を繰り返す。 | UI イメージには `LB_FQDN` が必要です。 | [OpenLM Router をデプロイする](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/deployment)のとおり、`routerui` コンテナーに `LB_FQDN` を設定します。 |
| Router UI が空白のページとして開く。 | `/router-management` プレフィックスを取り除く仕組みがないため、すべてのスクリプト要求にページの HTML が返されています。 | [OpenLM Router をデプロイする](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/deployment)で説明しているプロキシの背後に Router UI を配置し、ポート `8101` で開きます。 |

## Router が OpenLM Platform と同期しないのはなぜですか

Router が OpenLM Platform に接続されるまでは、構成もサーバー一覧もヘルスデータもありません。理由を確認するには、Router UI の **Platform Connection** の下にある通知、または `GET /api/v1/status` の `configurationManagement.lastSync.lastFailure` を確認します。どちらも同じ理由を報告します。新しい Router では、理由は次のように表示されます。

```
No Platform connection is configured, so the Router has no address for the LicOps Configuration service
```

Router に構成がない間は、`/readyz` と `/health/ready` はどちらも `503` を返します。

通知と `lastSync` が対象とするのは、Router が OpenLM Platform から取得する構成です。Router はサーバーヘルスを別に取得するため、`GET /api/v1/platform/servers` も確認してください。ここにライセンスサーバーが一覧表示される必要があります。

同期していない Router の症状、原因、対処を、次の表に示します。

| 症状 | 原因 | 対処 |
| --- | --- | --- |
| `lastFailure` に、Platform 接続が構成されていないと表示される。 | OpenLM Platform 接続が保存されていません。 | [OpenLM Router を設定する](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/configuration)の説明に従って、Router を接続します。 |
| `lastFailure` に、名前解決できないアドレスまたは到達できないアドレスが表示される。 | ベース URL が間違っているか、ホストから OpenLM Platform への送信方向のアクセスがありません。 | ベース URL を修正し、ホストから HTTPS で OpenLM Platform に到達できることを確認します。 |
| 接続は問題なく保存されるが、`GET /api/v1/platform/servers` が `503` を返し続ける。 | 認証情報は有効ですが、種類が `Router` の ID クライアントではないため、OpenLM Platform が Router の問い合わせを拒否しています。Router のログには、`Platform serversStatistics returned Unauthorized` と `snapshot sync skipped … (servers: AuthFailed, licenses: AuthFailed)` が記録されます。 | OpenLM Platform の **Identity** で **Client Type** が `Router` の ID クライアントを作成し、その認証情報を入力し直します。ほかの種類のクライアント（たとえば External API クライアント）は、認証には成功しても問い合わせを拒否されます。 |
| クライアントの種類は `Router` で、`lastSync` には成功した同期が表示されているが、`GET /api/v1/platform/servers` が `503` を返し続ける。Router のログには、`serversStatistics` と `licenseStatistics` に対する `AUTH_NOT_AUTHORIZED` とともに、`snapshot sync skipped … (servers: PartialFailure, licenses: PartialFailure)` が記録される。 | OpenLM Platform が、この Router クライアントへのライセンスサーバーデータの提供を拒否しています。 | OpenLM サポートに連絡し、そのログ行を伝えてください。 |
| それまで動作していた `GET /api/v1/platform/servers` が `503` を返すようになり、ヘルスが更新されなくなり、フェイルオーバーが一度も発生しない。 | OpenLM Platform との同期が 10 分間成功していません。同期が失敗しているか、Redis が空の状態で再起動されたために Router の定期ジョブが失われ、同期が実行されなくなっています。 | `GET /api/v1/status` の `lastFailure` を確認します。問題が示されている場合は、それを修正します。空の場合は、Router を再起動してジョブを再登録し、再発しないように Redis の永続化を修正します。[システム要件](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/system-requirements)を参照してください。 |
| 進んでいた `lastSuccessfulSync` が止まった。 | 同期が失敗しています。通常は、OpenLM Platform 接続が機能しなくなったことが原因です。 | `lastFailure` を確認します。現在の問題が表示され、次に成功するとクリアされます。 |
| ペアのヘルスが `Unknown` と表示される。 | Router がそのサーバーの読み取り値を 10 分間受け取っていません。 | Router はペアを現在の状態のまま維持し、`Unknown` ではフェイルオーバーしません。OpenLM Platform との同期を修正してください。読み取り値が戻ると、ペアは通常の動作を再開します。 |

## OpenLM Platform で行った変更が Router に反映されないのはなぜですか

反映されない変更の症状、原因、対処を、次の表に示します。

| 症状 | 原因 | 対処 |
| --- | --- | --- |
| OpenLM Platform でペアを保存したが、Router が引き続き `unconfigured` を報告する。 | 保存から 10 秒経っていないか、Router が同期していないか、別の Router がより最近 OpenLM Platform に報告したため **LicOps Configuration** にその Router のペアが表示されていました。 | `GET /api/v1/status` の `lastSync` を確認します。**LicOps Configuration** は、最後に報告した Router を対象に動作します。OpenLM アカウントに複数の Router が報告している場合は、使用していない Router を停止してから、ページを再読み込みします。 |
| **Choose server** にライセンスサーバーが表示されない。 | OpenLM Platform がそのサーバーを監視していません。OpenLM Broker がサーバーにインストールされていないか、**Broker Hub** で承認されていないか、サーバーが **License Servers** で承認されていません。 | [システム要件](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/system-requirements#openlm-platform-の前提条件)の Broker の手順に従い、**Live Servers Statistics** でサーバーが **Up** と表示されることを確認します。 |
| **LicOps Configuration** で保存したペアがリッスンポートを開かず、`lastFailure` に `The Router has not collected any Platform license-server data yet` と表示される。 | Router にサーバー一覧がないため、ペアのサーバーを解決できず、構成を拒否しています。この拒否は OpenLM Platform には表示されません。 | [Router が OpenLM Platform と同期しないのはなぜですか](#router-が-openlm-platform-と同期しないのはなぜですか)の説明に従い、先にサーバー一覧を取得できるようにします。Router は同期のたびに再試行するため、サーバー一覧が届くとペアが有効になります。 |
| `lastAppliedConfigVersion` が遅れたままで、`lastFailure` にサーバー名が表示される。 | ペアで指定しているサーバーが、この Router の OpenLM Platform サーバー一覧に含まれていないため、Router が適用を拒否しました。 | この Router の `GET /api/v1/platform/servers` に表示されるサーバーを選択します。 |
| **LicOps Configuration** に、まだどの Router も自身を報告していないと表示される。 | Router がまだ OpenLM Platform と同期していないか、同期する前にページを開きました。ページは自動では更新されません。 | Router の OpenLM Platform 接続が機能していることを確認してから、ページを再読み込みします。Router は最初の同期が成功したときに自身を登録します。 |

## LicOps Configuration に別の Router が表示されるのはなぜですか

**LicOps Configuration** が扱うのは、お使いの OpenLM アカウントに最後に報告した Router です。2 つの Router が報告している場合、ページには最後に報告した Router のペアが表示され、再読み込みのたびに切り替わることがあります。

1. ページに表示されている Router の識別子を、設定したい Router の `GET /api/v1/status` にある `routerId` と比較します。
2. 使用していない Router をすべて停止します。[OpenLM Router の変更、アップグレード、削除](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/manage#openlm-router-を削除する)を参照してください。
3. ページを再読み込みします。ページは自動では更新されません。

OpenLM アカウントごとに Router を 1 つだけ実行してください。[現在の制限事項](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/index#現在の制限事項)を参照してください。

## クライアントが Router を使用していないのはなぜですか

Router は動作しているのにクライアントが使用していない場合の症状、原因、対処を、次の表に示します。

| 症状 | 原因 | 対処 |
| --- | --- | --- |
| フェイルオーバーが発生したが、クライアントが引き続き古いサーバーに接続する。 | クライアントが、Router ではなくライセンスサーバーを指しています。 | `LM_LICENSE_FILE` と、アプリケーションのベンダー固有の変数を確認します。ベンダーの変数が優先されます。[OpenLM Router を設定する](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/configuration)を参照してください。 |
| Router 経由の `lmutil lmstat` は成功するが、アプリケーションがチェックアウトできない。 | Router が中継するのは `lmgrd` への接続だけです。チェックアウトはその後、ワークステーションからアクティブなサーバー上のベンダーデーモンへ直接行われますが、そのポートが閉じているか、再起動のたびに変わっています。 | 各ライセンスファイルの `VENDOR` 行に `PORT=` を指定してベンダーデーモンのポートを固定し、ワークステーションから両方のサーバーへのそのポートを開きます。 |
| 設定したポートで何も待ち受けていない。 | 構成が適用されていないか、コンテナーがそのポートを公開せずにブリッジネットワークを使っています。 | `curl http://localhost:8100/readyz` でバインド済みのポートと必要なポートを比較します。ホストネットワークの使用をお勧めします。 |
| フェイルオーバーを強制すると `409` `"Already on backup"` が返るが、ペアはプライマリから提供されている。 | `pairId` が存在しないか、ペアにバックアップがありません。Router は、どちらの場合も、すでに切り替わったペアと同じ応答を返します。 | `GET /api/v1/config` で名前を確認し、ペアにバックアップサーバーがあることを確認します。 |
| `/api/v1/status` が `unconfigured` を報告する。 | Router が OpenLM Platform から構成を取得していないか、OpenLM Platform にペアが定義されていません。 | OpenLM Platform 接続と `GET /api/v1/status` の `lastSync` を確認し、OpenLM Platform にペアが存在することを確認します。 |
| フェイルオーバーしていたペアが、誰も要求していないのにプライマリに戻っている。 | Redis がロールキーを失いました。退避（eviction）、フラッシュ、または永続化なしでの再起動が原因です。 | `maxmemory-policy noeviction` を設定し、追記型の永続化（append-only）を有効にします。[システム要件](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/system-requirements)を参照してください。 |

## 診断情報を収集する

Router ホストで、次のコマンドを実行します。

```bash
docker compose logs routerapi --tail 200
curl http://localhost:8100/api/v1/status
curl http://localhost:8100/readyz
curl http://localhost:8100/api/v1/config
```

`/readyz` は、どのリッスンポートがバインドされていて、どのポートが必要とされているかを報告します。構成が適用されていないのか、ネットワークの問題なのかを見分ける最も手早い方法です。

## 関連項目

- [OpenLM Router を設定する](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/configuration)
- [OpenLM Router を運用する](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/operations)
- [OpenLM Router API リファレンス](https://www.openlm.com/documentation/ja/cloud/deployment-operations/router/reference)
