1.2. Ceph Monitor

Ceph Monitor は、ストレージクラスターマップのマスターコピーを維持する軽量プロセスです。すべての Ceph クライアントは Ceph モニターに問い合わせ、ストレージクラスターマップの現在のコピーを取得し、クライアントがプールにバインドし、読み取りと書き込みを可能にします。

Ceph Monitor は Paxos プロトコルのバリエーションを使用して、ストレージクラスター全体でマップやその他の重要な情報について合意を確立します。Paxos の性質上、Ceph は、クォーラムを確立するためにモニターの大部分を実行する必要があり、合意を確立します。

重要

Red Hat では、実稼働クラスターのサポートを受け取るために、別のホストで少なくとも 3 つのモニターが必要になります。

Red Hat は、奇数のモニターをデプロイすることを推奨します。奇数の Ceph モニターは、偶数のモニターよりも障害に対する回復性が高くなっています。たとえば、2 つのモニターデプロイメントでクォーラムを維持するには、Ceph は障害を許容できません。3 つのモニターでは障害を 1 つ、4 つのモニターでは障害を 1 つ、5 つのモニターでは障害を 2 つ許容します。このため、奇数も推奨されています。要約すると、Ceph は、モニターの大部分 (3 つのうち 2 つ、 4 つのうち 3 つなど) が実行され、相互に通信できるようにする必要があります。

マルチノードの Ceph ストレージクラスターの初回のデプロイには、Red Hat では 3 つのモニターが必要です。3 つ以上のモニターが有効な場合には、一度に数を 2 つ増やします。

Ceph Monitor は軽量であるため、OpenStack ノードと同じホストで実行できます。ただし、Red Hat は、別のホストでモニターを実行することを推奨します。

重要

Red Hat では、同じノードで Ceph Monitor と OSD を共存させるサポートはありません。これを行うと、ストレージクラスターのパフォーマンスに悪影響を与える可能性があります。

Red Hat は、コンテナー化された環境における Ceph サービスを共存させることのみをサポートしています。

ストレージクラスターからモニターを削除する場合、Ceph Monitor は Paxos プロトコルを使用して、マスターストレージクラスターマップに関する合意を確立することを検討してください。クォーラムを確立するには、十分な数の Ceph モニターが必要です。

関連情報

1.2.1. 新規 Ceph Monitor ノードの準備

デプロイメント用の新たな Ceph Monitor ノードを準備する前に、Red Hat Ceph Storage インストールガイドRed Hat Ceph Storage のインストール要件 の章を確認してください。

重要

新規 Ceph Monitor を別のノードにデプロイして、ストレージクラスター内のすべての Ceph Monitor ノードが同じハードウェアで実行される必要があります。

前提条件

  • ネットワーク接続
  • 新しいノードへのルートレベルのアクセス。

手順

  1. 新規ノードをサーバーラックに追加します。
  2. 新しいノードをネットワークに接続します。
  3. Red Hat Enterprise Linux 7 または Red Hat Enterprise Linux 8 の最新バージョンをインストールします。

    1. Red Hat Enterprise Linux 7 の場合は、ntp をインストールし、信頼できるタイムソースを設定します。

      [root@mon ~]# yum install ntp
    2. Red Hat Enterprise Linux 8 の場合は、chrony をインストールし、信頼できるタイムソースを設定します。

      [root@mon ~]# dnf install chrony
  4. ファイアウォールを使用している場合は、TCP ポート 6789 を開きます。

    [root@mon ~]# firewall-cmd --zone=public --add-port=6789/tcp
    [root@mon ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent

関連情報

1.2.2. Ansible を使用した Ceph Monitor の追加

Red Hat は、奇数のモニターを維持するために、一度に 2 つの Ceph Monitor を追加することを推奨します。たとえば、ストレージクラスターに Ceph Monitor が 3 つある場合に、Red Hat はモニター数を 5 に増やすことを推奨します。

前提条件

  • 新しいノードへのルートレベルのアクセス。
  • Ansible 管理ノード。
  • Ansible によりデプロイされた実行中の Red Hat Ceph Storage クラスター

手順

  1. [mons] セクションの下に、新しい Ceph Monitor ノードを /etc/ansible/hosts Ansible インベントリーファイルに追加します。

    [mons]
    monitor01
    monitor02
    monitor03
    NEW_MONITOR_NODE_NAME
    NEW_MONITOR_NODE_NAME

  2. Ansible が Ceph ノードと通信できることを確認します。

    [root@admin ~]# ansible all -m ping
  3. ディレクトリーを Ansible 設定ディレクトリーに移動します。

    [root@admin ~]# cd /usr/share/ceph-ansible
  4. 次のいずれかの手順を使用して Ceph Monitor を追加できます。

    • ベアメタルコンテナーの 両方のデプロイメントの場合は、インフラストラクチャー Playbook を実行します。

      [root@admin ceph-ansible]# ansible-playbook -vvvv -i hosts infrastructure-playbooks/add-mon.yml
    • Ansible ユーザーとして、サイト Playbook または サイトコンテナー Playbook のいずれかを実行します。

      • ベアメタル デプロイメント:

        [ansible@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site.yml --limit mons

      • コンテナー デプロイメント:

        [ansible@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site-container.yml --limit mons

        Ansible Playbook の実行が終了すると、新しい Ceph Monitor ノードがストレージクラスターに表示されます。

  5. 設定ファイルを更新します。

    1. ベアメタル デプロイメント:

      [user@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site.yml --tags ceph_update_config

    2. コンテナー デプロイメント:

      [user@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site-container.yml --tags ceph_update_config

関連情報

1.2.3. コマンドラインインターフェイスを使用した Ceph Monitor の追加

Red Hat は、奇数のモニターを維持するために、一度に 2 つの Ceph Monitor を追加することを推奨します。たとえば、ストレージクラスターに Ceph Monitor が 3 つある場合に、Red Hat はモニター数を 5 に増やすことを推奨します。

重要

Red Hat は、ノードごとに Ceph Monitor デーモンを 1 つだけ実行することを推奨します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • 実行中の Ceph Monitor ノードへのルートレベルのアクセスと、新しいモニターノードへのアクセス。

手順

  1. Red Hat Ceph Storage 4 Monitor リポジトリーを追加にします。

    Red Hat Enterprise Linux 7

    [root@mon ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-mon-rpms

    Red Hat Enterprise Linux 8

    [root@mon ~]# subscription-manager repos --enable=rhceph-4-mon-for-rhel-8-x86_64-rpms

  2. ceph-mon パッケージを新しい Ceph Monitor ノードにインストールします。

    Red Hat Enterprise Linux 7

    [root@mon ~]# yum install ceph-mon

    Red Hat Enterprise Linux 8

    [root@mon ~]# dnf install ceph-mon

  3. ストレージクラスター内の実行中のノードの Ceph 設定ファイルの [mon] セクションで mon_host 設定のリストを編集します。

    1. 新規 Ceph Monitor ノードの IP アドレスを mon_host 設定リストに追加します。

      構文

      [mon]
      mon_host = MONITOR_IP : PORT MONITOR_IP : PORT ... NEW_MONITOR_IP : PORT

      Ceph 設定ファイルの [mon] セクションに新しい Ceph Monitor の IP アドレスを追加する代わりに、新規モニターノード用にファイルに特定のセクションを作成することができます。

      構文

      [mon.MONITOR_ID]
      host = MONITOR_ID
      mon_addr = MONITOR_IP

      注記

      mon_host 設定のリストは、DNS で解決できるホスト名または IP アドレスのリストで、,、;、または で区切ります。このリストは、ストレージクラスターが起動または再起動時に新規の Monitor ノードを識別できるようにします。

      重要

      mon_initial_members 設定は、Ceph Monitor ノードの初期クォーラムグループをリスト表示します。そのグループの 1 つのメンバーが失敗すると、そのグループの別のノードが初期モニターノードになります。実稼働ストレージクラスターの高可用性を確保するには、Ceph 設定ファイルの mon_initial_members セクションおよび mon_host セクションに、少なくとも 3 つの監視ノードをリスト表示します。これにより、最初のモニターノードに障害が発生した場合にストレージクラスターをロックできなくなります。追加するモニターノードが mon_initial_members および mon_host の一部であるモニターを置き換える場合は、新しいモニターを両方のセクションに追加します。

  4. 最初のクォーラムグループのモニター部分を作成するには、Ceph 設定ファイルの [global] セクションの mon_initial_members パラメーターにホスト名を追加します。

    [global]
    mon_initial_members = node1 node2 node3 node4 node5
    ...
    [mon]
    mon_host = 192.168.0.1:6789 192.168.0.2:6789 192.168.0.3:6789 192.168.0.4:6789 192.168.0.5:6789
    ...
    [mon.node4]
    host = node4
    mon_addr = 192.168.0.4
    
    [mon.node5]
    host = node5
    mon_addr = 192.168.0.5

  5. 更新された Ceph 設定ファイルをすべての Ceph ノードおよび Ceph クライアントにコピーします。

    構文

    scp /etc/ceph/CLUSTER_NAME.conf TARGET_NODE_NAME:/etc/ceph

    [root@mon ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph

  6. モニターのデータのディレクトリーを新規モニターノードに作成します。

    構文

    mkdir /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID

    [root@mon ~]# mkdir /var/lib/ceph/mon/ceph-node4

  7. 実行中の Ceph Monitor ノードおよび新しいモニターノードに一時ディレクトリーを作成し、この手順に必要なファイルをこれらのディレクトリーで保持します。各ノードの一時ディレクトリーは、ノードのデフォルトディレクトリーとは異なる必要があります。これは、すべての手順の完了後に削除できます。

    構文

    mkdir TEMP_DIRECTORY_PATH_NAME

    [root@mon ~]# mkdir /tmp/ceph

  8. 実行中の Ceph Monitor ノードから新しい Ceph Monitor ノードに admin キーをコピーし、ceph コマンドを実行できるようにします。

    構文

    scp /etc/ceph/CLUSTER_NAME.client.admin.keyring TARGET_NODE_NAME:/etc/ceph

    [root@mon ~]# scp /etc/ceph/ceph.client.admin.keyring node4:/etc/ceph

  9. 実行中の Ceph Monitor ノードから、モニターキーリングを取得します。

    構文

    ceph auth get mon. -o TEMP_DIRECTORY_PATH_NAME/KEY_FILE_NAME

    [root@mon ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out

  10. 実行中の Ceph Monitor ノードから、モニターマップを取得します。

    構文

    ceph mon getmap -o TEMP_DIRECTORY_PATH_NAME/MONITOR_MAP_FILE

    [root@mon ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out

  11. 収集した Ceph Monitor データを新しい Ceph Monitor ノードにコピーします。

    構文

    scp /tmp/ceph TARGET_NODE_NAME:/tmp/ceph

    [root@mon ~]# scp /tmp/ceph node4:/tmp/ceph

  12. 先に収集したデータから、新しいモニター用にデータディレクトリーを準備します。モニターからクォーラム情報を取得するため、モニターマップへのパスを fsid と共に指定します。モニターキーリングへのパスを指定します。

    構文

    ceph-mon -i MONITOR_ID --mkfs --monmap TEMP_DIRECTORY_PATH_NAME/MONITOR_MAP_FILE --keyring TEMP_DIRECTORY_PATH_NAME/KEY_FILE_NAME

    [root@mon ~]# ceph-mon -i node4 --mkfs --monmap /tmp/ceph/ceph_mon_map.out --keyring /tmp/ceph/ceph_keyring.out

  13. カスタム名を持つストレージクラスターの場合は、以下の行を /etc/sysconfig/ceph ファイルに追加します。

    構文

    echo "CLUSTER=CUSTOM_CLUSTER_NAME" >> /etc/sysconfig/ceph

    [root@mon ~]# echo "CLUSTER=example" >> /etc/sysconfig/ceph

  14. 新規モニターノードで所有者およびグループのパーミッションを更新します。

    構文

    chown -R OWNER : GROUP DIRECTORY_PATH

    [root@mon ~]# chown -R ceph:ceph /var/lib/ceph/mon
    [root@mon ~]# chown -R ceph:ceph /var/log/ceph
    [root@mon ~]# chown -R ceph:ceph /var/run/ceph
    [root@mon ~]# chown -R ceph:ceph /etc/ceph

  15. 新しい monitor ノードで ceph-mon プロセスを有効にして起動します。

    構文

    systemctl enable ceph-mon.target
    systemctl enable ceph-mon@MONITOR_ID
    systemctl start ceph-mon@MONITOR_ID

    [root@mon ~]# systemctl enable ceph-mon.target
    [root@mon ~]# systemctl enable ceph-mon@node4
    [root@mon ~]# systemctl start ceph-mon@node4

関連情報

1.2.4. モニタリング選択ストラテジーの設定

モニター選択ストラテジーは、ネット分割を識別し、障害を処理します。選択モニターストラテジーは、3 つの異なるモードで設定できます。

  1. classic - これは、2 つのサイト間のエレクターモジュールに基づいて、最も低いランクのモニターが投票されるデフォルトのモードです。
  2. disallow - このモードでは、モニターを不許可とマークできます。この場合、モニターはクォーラムに参加してクライアントにサービスを提供しますが、選出されたリーダーになることはできません。これにより、許可されていないリーダーのリストにモニターを追加できます。モニターが許可されていないリストにある場合、そのモニターは常に別のモニターに先送りされます。
  3. connectivity - このモードは、主にネットワークの不一致を解決するために使用されます。ピアに対して各モニターによって提供される接続スコアを評価し、最も接続されたモニターと信頼できるモニターをリーダーに選択します。このモードは、クラスターが複数のデータセンターにまたがっている場合や影響を受けやすい場合に発生する可能性のあるネット分割を処理するように設計されています。このモードでは接続スコア評価が組み込まれ、最良スコアのモニターが選択されます。

他のモードで機能が必要でない限り、Red Hat は、classic モードに留まります。

クラスターを構築する前に、以下のコマンドで election_strategyclassicdisallow、または connectivity に変更します。

構文

ceph mon set election_strategy {classic|disallow|connectivity}

1.2.5. Ansible を使用した Ceph Monitor の削除

Ansible で Ceph Monitor を削除するには、Playbook の shrink-mon.yml を使用します。

前提条件

  • Ansible 管理ノード。
  • Ansible によりデプロイされた実行中の Red Hat Ceph Storage クラスター

手順

  1. モニターが ok-to-stop かどうかを確認します。

    構文

    ceph mon ok-to-stop MONITOR_ID

    [root@mon ~]# ceph mon ok-to-stop node03

  2. /usr/share/ceph-ansible/ ディレクトリーに移動します。

    [user@admin ~]$ cd /usr/share/ceph-ansible
  3. ベアメタル および コンテナー のデプロイメントに、Ansible Playbook の shrink-mon.yml を実行します。

    構文

    ansible-playbook infrastructure-playbooks/shrink-mon.yml -e mon_to_kill=NODE_NAME -u ANSIBLE_USER_NAME -i hosts

    以下を置き換えます。

    • NODE_NAME は、Ceph Monitor ノードの短いホスト名に置き換えます。Playbook の実行時に 1 つの Ceph Monitor は 1 つだけ削除できます。
    • ANSIBLE_USER_NAME は、Ansible ユーザーの名前に置き換えてください。

    [user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/shrink-mon.yml -e mon_to_kill=node03 -u user -i hosts

  4. ansible インベントリーホスト /etc/ansible/hosts から対応するエントリーを手動で削除します。
  5. ceph-ansible Playbook を実行します。

    1. ベアメタルデプロイメント:

      [user@admin ceph-ansible]$ ansible-playbook site.yml --tags ceph_update_config -i hosts

    2. コンテナーデプロイメント:

      [user@admin ceph-ansible]$ ansible-playbook site-container.yml --tags ceph_update_config -i hosts

  6. Ceph Monitor が正常に削除されていることを確認します。

    [root@mon ~]# ceph -s

関連情報

1.2.6. コマンドラインインターフェイスを使用した Ceph Monitor の削除

Ceph Monitor を削除するには、ストレージクラスターから ceph-mon デーモンを削除し、ストレージクラスターマップを更新します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • monitor ノードへのルートレベルのアクセス。

手順

  1. モニターが ok-to-stop かどうかを確認します。

    構文

    ceph mon ok-to-stop HOSTNAME

    [root@mon ~]# ceph mon ok-to-stop node03

  2. Ceph Monitor サービスを停止します。

    構文

    systemctl stop ceph-mon@MONITOR_ID

    [root@mon ~]# systemctl stop ceph-mon@node3

  3. ストレージクラスターから Ceph Monitor を削除します。

    構文

    ceph mon remove MONITOR_ID

    [root@mon ~]# ceph mon remove node3

  4. Ceph 設定ファイルから Ceph Monitor エントリーを削除します。設定ファイルのデフォルトの場所は /etc/ceph/ceph.conf です。
  5. Ceph 設定ファイルを、ストレージクラスターの残りの全 Ceph ノードに再配布します。

    構文

    scp /etc/ceph/CLUSTER_NAME.conf USER_NAME @ TARGET_NODE_NAME :/etc/ceph/

    [root@mon ~]# scp /etc/ceph/ceph.conf root@node3:/etc/ceph/

  6. コンテナー のデプロイメントの場合は、Ceph Monitor サービスを無効にし、削除します。

    1. Ceph Monitor サービスを無効にします。

      構文

      systemctl disable ceph-mon@MONITOR_ID

      [root@mon ~]# systemctl disable ceph-mon@node3

    2. systemd からサービスを削除します。

      [root@mon ~]# rm /etc/systemd/system/ceph-mon@.service
    3. systemd マネージャー設定を再読み込みします。

      [root@mon ~]# systemctl daemon-reload
    4. 障害が発生した Ceph Monitor ノードの状態をリセットします。

      [root@mon ~]# systemctl reset-failed
  7. オプション: Ceph Monitor データをアーカイブします。

    構文

    mv /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID /var/lib/ceph/mon/removed- CLUSTER_NAME - MONITOR_ID

    [root@mon ~]# mv /var/lib/ceph/mon/ceph-node3 /var/lib/ceph/mon/removed-ceph-node3

  8. 必要に応じて、Ceph Monitor データを削除します。

    構文

    rm -r /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID

    [root@mon ~]# rm -r /var/lib/ceph/mon/ceph-node3

1.2.7. 異常なストレージクラスターからの Ceph Monitor の削除

配置グループが永続的に active + clean 状態にない正常でないストレージクラスターから ceph-mon デーモンを削除できます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • Ceph Monitor ノードへの root レベルのアクセス。
  • Ceph Monitor ノードが少なくとも 1 台実行している。

手順

  1. 存続する Ceph Monitor ノードにログインします。

    構文

    ssh root@MONITOR_NODE_NAME

    [root@admin ~]# ssh root@mon2

  2. ceph-mon デーモンを停止し、monmap ファイルのコピーを抽出します。

    構文

    systemctl stop ceph-mon@MONITOR_ID
    ceph-mon -i SHORT_HOSTNAME --extract-monmap TEMP_PATH

    [root@mon2 ~]# systemctl stop ceph-mon@mon1
    [root@mon2 ~]# ceph-mon -i mon1 --extract-monmap /tmp/monmap

  3. Ceph Monitor 以外を削除します。

    構文

    monmaptool TEMPORARY_PATH --rm _MONITOR_ID

    [root@mon2 ~]# monmaptool /tmp/monmap --rm mon1

  4. 削除されたモニターを含む存続しているモニターマップを、存続している Ceph モニターに挿入します。

    構文

    ceph-mon -i SHORT_HOSTNAME --inject-monmap TEMP_PATH

    [root@mon2 ~]# ceph-mon -i mon2 --inject-monmap /tmp/monmap

  5. 存続するモニターのみを起動し、モニターがクォーラムを形成することを確認します。

    [root@mon2 ~]# ceph -s

  6. オプション: 削除された Ceph Monitor のデータディレクトリーを /var/lib/ceph/mon ディレクトリーにアーカイブします。