# クラスター構成

EMQXにおけるクラスターとは、高いスケーラビリティとフォールトトレランスを備えたMQTTメッセージングシステムを提供するために協調動作するEMQXノードの集合体です。クラスタリングにより、複数のノードに負荷を分散させることができ、1つまたは複数のノードが障害を起こしてもシステムの継続稼働が可能になります。

## ノード名の設定

クラスター作成の前に、EMQXにおけるノード名の概念を理解しておきましょう。EMQXノードはノード名によって識別されます。ノード名はノード名部分とホスト部分の2つで構成され、`@`で区切られます。例えば、`emqx@s1.emqx.io`のようになります。ホスト部分はIPアドレスか完全修飾ドメイン名（FQDN）である必要があります。例として：

- サーバー`s1.emqx.io`にデプロイされたEMQXノードの場合、ノード名は`emqx@s1.emqx.io`となります。
- このサーバーに静的IPアドレス`192.168.0.10`が割り当てられている場合、ノード名は`emqx@192.168.0.10`となります。

`emqx.conf`でノードを設定する際は、以下のように記述します。

```bash
node {
  name = "emqx@s1.emqx.io"
  role = core
}
```

ここで、

- `name` は希望するノード名を指し、例えば`emqx@localhost`のように設定します。
- `role` はEMQXクラスター内でノードが果たす役割を示します。役割にはコアノードとレプリカントノードの2種類があります。コアノードとレプリカントノードの詳細については、[EMQXクラスタリング - コアノードとレプリカントノード](../../develop/cluster/mria-introduction.md)をご参照ください。
  - デフォルト値：`core`  
  - 選択可能値：`core` または `replicant`

## クラスターの設定

このセクションでは、EMQXクラスターの設定方法を紹介します。クラスター設定はコアノードまたはレプリカントノードのいずれかで行えます。レプリカントノードで設定する場合、一部の設定項目（例えば`core_nodes`）は特定の前提条件下でのみ有効になります。

- ノードの`node.db_backend`が`rlog`に設定されていること（ノードが`rlog`をデータベースバックエンドとして使用していることを示します）。
- `node.role`が`replicant`に設定されていること（このノードがレプリカントノードとして機能していることを示します）。
- `node.discovery_strategy`が`manual`または`static`に設定されていること。自動クラスター検出機構を使用する場合は、この設定は不要です。ノード検出戦略と対応する設定項目の詳細は、[クラスターの作成](../cluster/create-cluster.md)をご参照ください。

```bash
cluster {
  name = emqxcl
  discovery_strategy = manual
  core_nodes = []
  driver = tcp
  ssl_options {
    certfile = ""
    keyfile = ""
    cacertfile = ""
  }
}
```

ここで、

| 設定項目                 | 説明                                                                 | デフォルト値 | 選択可能値                                         |
| ------------------------ | -------------------------------------------------------------------- | ------------ | ------------------------------------------------- |
| `name`                   | クラスターの名前を設定します                                        | `emqxcl`     |                                                   |
| `discovery_strategy`     | クラスターのノード検出戦略を設定します                              | `manual`     | `manual`、`static`、`dns`、`etcd`、`k8s`、`singleton` |
| `core_nodes`             | このレプリカントノードが接続するコアノードを設定します。<br />複数ノードはカンマ区切りで指定可能です。 | --           | --                                                |
| `driver`                 | EMQXノード間通信のトランスポートプロトコルを設定します             | `tcp`        | `tcp`、`SSL`                                      |
| `ssl_options`            | リスナーのSSL/TLS設定オプションを設定します。3つのプロパティがあります | --           | --                                                |
| `ssl_options.cacertfile` | クライアント証明書の真正性を検証するためにリスナーが使用する信頼済みCA（認証局）証明書を含むPEMファイル | --           | --                                                |
| `ssl_options.certfile`   | リスナーのSSL/TLS証明書チェーンを含むPEMファイル。証明書がルートCAから直接発行されていない場合は、中間CA証明書をリスナー証明書の後に連結してチェーンを形成する必要があります。 | --           | --                                                |
| `ssl_options.keyfile`    | SSL/TLS証明書に対応する秘密鍵を含むPEMファイル                       | --           | --                                                |
| `ssl_options.fail_if_no_peer_cert` | `true`に設定すると、クライアントが証明書を送信しない（空の証明書を送信する）場合にサーバーが失敗します。`false`の場合は、クライアントが無効な証明書を送信した場合のみ失敗します（空の証明書は有効とみなされます）。 | --           | --                                                |

::: tip

EMQXはカスタマイズニーズに応じてさらに多くの設定項目を提供しています。詳細は[EMQX Enterprise設定マニュアル](https://docs.emqx.com/en/enterprise/v6.3.1/hocon/)をご覧ください。

:::
