# EMQX Enterprise ローリングアップグレード

クラスター構成のデプロイメントにおいて、EMQX ノードはダウンタイムなしで1台ずつアップグレードできます。このプロセスはローリングアップグレードと呼ばれます。クライアントのセッション移行をスムーズに行うために、EMQX Enterprise のクラスターリバランシング機能を使って、アップグレード前にノードからクライアントを退避させることが可能です。クラスターリバランシングの詳細は[こちら](../deploy/cluster/rebalancing.md)をご覧ください。

## EMQX 5.9以降へのアップグレードに関する重要なライセンス通知

バージョン5.9.0以降、EMQX Enterpriseは従来のオープンソース版とエンタープライズ版を分けるモデルから、Business Source License (BSL) 1.1の下でリリースされています。

::: tip

ライセンス変更の詳細については、[EMQX ライセンスFAQ](https://www.emqx.com/en/content/license-faq)をご参照ください。

:::

EMQXのアップグレード手順（バイナリの置き換えなど）は従来のバージョンアップとほぼ同様ですが、バージョン5.9.0では特にクラスター構成に関して重要なライセンス変更が導入されています。5.9より前のオープンソース版からアップグレードする場合や、単一ノード構成からクラスター構成にアップグレードする場合は、以下の重要な変更点にご注意ください。

1. **新しいライセンスモデル**：EMQX 5.9.0以降はデフォルトでEMQX Community Licenseが適用されます。このデフォルトライセンスは全機能を有効にしますが、単一ノードでのデプロイに制限されます。
2. **クラスター機能の制限**：以前のオープンソース版ではクラスターがサポートされていましたが、新モデルではEMQX 5.9.0以降、デフォルトでクラスターは許可されていません。クラスター機能を維持したい場合は、[商用ライセンスを取得](./license.md#apply-for-a-license)する必要があります。
3. **ライセンス設定の必須化**：アップグレード中にEMQX 5.9.0以降のノードをクラスターで起動する前に、各ノードに対してこの商用ライセンスを[設定](./license.md#update-and-configure-license-settings)する必要があります。ライセンスが設定されていないか誤って設定されている場合、ノードはクラスター内で正常に動作しません。

::: tip

`emqx.conf`にライセンス設定を追加した場合、ダッシュボード、HTTP API、CLIからのランタイム設定変更はノード再起動後に失われます。これは起動時に`emqx.conf`と環境変数が設定読み込みの最優先となるためです。

:::

## EMQX 5.10以降のローリングアップグレードに関する注意点

EMQX 5.10.0以降では、_v2_ ルーティングストレージスキーマのみがサポートされます。5.4.0以前のデフォルトだった旧スキーマ_v1_は非互換となりました。そのため、特に段階的にアップグレードされたクラスタで_v1_スキーマを使用している場合、5.10.0以降へのローリングアップグレードはできません。

::: tip 重要

クラスタがまだ_v1_ルーティングスキーマを使用している場合は、アップグレード完了のためにクラスタ全体の再起動が必要です。

:::

### 現在のルーティングスキーマの確認

以下のコマンドでEMQXクラスタが使用しているルーティングスキーマを確認してください。
```
$ emqx eval 'emqx_router:get_schema_vsn()'
```

出力が`v2`であれば、通常のローリングアップグレードが可能です。

出力が`v1`の場合は、以下の手順でクラスタ全体の再起動を伴うアップグレードを行ってください。

### _v1_ ルーティングスキーマのアップグレード手順

クラスタが_v1_スキーマを使用している場合、EMQX 5.10.0以降へのアップグレードは以下の手順で実施してください。

1. クラスタ内の**全ノード**を停止します。
2. 任意の設定ファイルに定義されている`broker.routing.storage_schema`オプションを削除します。
3. 全ノードを5.10.0以降のバージョンにアップグレードします。
4. コアノードを先に起動します。
5. レプリカントノードを起動します。

## ローリングアップグレードの一般的な手順

ダウンタイムなしでクラスタ内の各ノードをアップグレードするには、以下の手順に従ってください。

1. クラスターリバランシングを使ってノードからクライアントを退避させます（任意）。
2. 旧バージョンのノードを停止します。
3. ノードの設定ファイルおよびデータディレクトリを[バックアップ](../operations/backup-restore.md)します。
4. 新しいバージョンのEMQXをインストールします。
5. 新しいバージョンのノードを起動します。

**コアノードとレプリカントノードのアップグレード**

コア/レプリカントクラスタでは、クラスタの安定性を維持するために、ノードを交互のグループでアップグレードします：

- 1つのコアノードから開始します。
- 次に、レプリカントノードの適切なサブセット（例えば、3つのコアノードがある場合は約3分の1）をアップグレードします。
- すべてのノードがアップグレードされるまで、コアノードとレプリカントノードを交互にアップグレードし続けます。

このアプローチにより、ロールアウト中にレプリカントが常に互換性のあるコアに接続できることが保証されます。

:::tip 注意
ローリングアップグレード中にクラスタ全体の設定変更は行わないでください。ダッシュボード、HTTP API、CLIからの設定変更はクラスタ内全ノードに適用されます。アップグレード中に設定変更を行うとノード間で設定の不整合が発生する恐れがあります。
:::

## RPMおよびDEBパッケージを使ったローリングアップグレード

RPMまたはDEBパッケージを使用している場合は、新しいバージョンのパッケージをインストールするだけでEMQXをアップグレードできます。

## Dockerを使ったローリングアップグレード

Dockerを使用している場合は、新しいバージョンのイメージをプルしてコンテナを再起動するだけでEMQXをアップグレードできます。

## オープンソース版からEnterprise版へのローリングアップグレード

オープンソース版のEMQXを実行していてEnterprise版にアップグレードする場合、手順はオープンソース版の新バージョンへのアップグレードと同じです。

EMQXのオープンソース版とEnterprise版のインストールおよびアップグレードに違いはありません。
唯一の違いは、アップグレード後にEnterprise版ノードに対して手動で[ライセンス設定](./license.md)を行う必要がある点です。
全ノードのアップグレードが完了する前にクラスタ全体にライセンスキーを適用することはできません。

例として、`etc/base.hocon`（アップグレード対象バージョンが`e5.8.5`より前の場合は`etc/emqx.conf`）に以下の行を追加します。
```
license.key = "your license"
```

:::tip 注意
`emqx.conf`にライセンス設定を追加した場合、ダッシュボード、HTTP API、CLIからのランタイム設定変更はノード再起動後に失われます。
これは起動時に`emqx.conf`と環境変数が設定読み込みの最優先となるためです。
:::
