Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

3.2. Red Hat Ceph Storage クラスターのインストール

ceph-ansible playbook 付きの Ansible アプリケーションを使用して、Red Hat Ceph Storage 3 をインストールします。

本番の Ceph ストレージクラスターは、最低でも 3 台のモニターホストと、複数の OSD デーモンを搭載した 3 台の OSD ノードが必要です。

ceph storage cluster

前提条件

  • Ansible 管理ノードの root アカウントを使用して、ceph-ansible パッケージをインストールします。

    [root@admin ~]# yum install ceph-ansible

手順

指示がない限り、Ansible の管理ノードから以下のコマンドを実行します。

  1. Ansible のユーザーとして、ceph-ansible Playbook で生成された一時的な値を Ansible が保存するceph-ansible-keys ディレクトリーを作成します。

    [user@admin ~]$ mkdir ~/ceph-ansible-keys
  2. root として、/etc/ansible/ ディレクトリーに /usr/share/ceph-ansible/group_vars ディレクトリーへのシンボリックリンクを作成します。

    [root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
  3. /usr/share/ceph-ansible ディレクトリーに移動します。

    [root@admin ~]$ cd /usr/share/ceph-ansible
  4. yml.sample ファイルのコピーを新たに作成します。

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp site.yml.sample site.yml
  5. コピーしたファイルを編集します。

    1. group_vars/all.yml ファイルを編集します。アンコメントする最も一般的な必須およびオプションのパラメーターについては、以下の表を参照してください。なお、この表にはすべてのパラメーターが含まれているわけではありません。

      重要

      カスタムクラスター名の使用はサポートされていないため、cluster: ceph パラメーターに ceph 以外の値を設定しないでください。

      表3.1 Ansible の一般的な設定

      オプション必須備考

      ceph_origin

      repository または distro または local

      はい

      repository 値は、新しいリポジトリーで Ceph をインストールすることを意味します。distro の値は、個別のリポジトリーファイルが追加されず、Linux ディストリビューションに含まれる Ceph のバージョンをすべて取得することを意味します。local の値は、Ceph バイナリーがローカルマシンからコピーされることを意味します。

      ceph_repository_type

      cdn または iso

      はい

       

      ceph_rhcs_version

      3

      はい

       

      ceph_rhcs_iso_path

      ISO イメージへのパス

      ISO イメージを使用する場合は Yes

       

      monitor_interface

      Monitor ノードがリッスンするインターフェイス

      MONITOR_INTERFACEMONITOR_ADDRESS、または MONITOR_ADDRESS_BLOCK が必要です。

       

      monitor_address

      Monitor ノードがリッスンするアドレス

       

      monitor_address_block

      Ceph のパブリックネットワークのサブネット

      ノードの IP アドレスは不明だが、サブネットはわかっている場合に使用します

      ip_version

      ipv6

      IPv6 アドレスを使用している場合は Yes

       

      public_network

      IPv6 を使用する場合には、Ceph パブリックネットワークの IP アドレスとネットマスク、または対応する IPv6 アドレス

      はい

      「Red Hat Ceph Storage のネットワーク設定の確認」

      cluster_network

      Ceph クラスターネットワークの IP アドレスとネットマスク

      いいえ、デフォルトは public_network です

      configure_firewall

      Ansible は適切なファイアウォールルールの設定を試みます

      いいえ。値を true または false に設定します。

       

      all.yml ファイルの例は次のようになります。

      ceph_origin: distro
      ceph_repository: rhcs
      ceph_repository_type: cdn
      ceph_rhcs_version: 3
      monitor_interface: eth0
      public_network: 192.168.0.0/24
      注記

      必ず all.yml ファイルで ceph_origindistro に設定してください。これにより、インストールプロセスで正しいダウンロードリポジトリーが使用されるようになります。

      注記

      ceph_rhcs_version オプションを 3 に設定すると、最新バージョンの Red Hat Ceph Storage 3 がプルされます。

      警告

      デフォルトでは、Ansible はインストール済みの再起動を試みますが、マスクされた firewalld サービスにより、Red Hat Ceph Storage デプロイメントが失敗する可能性があります。この問題を回避するには、all.yml ファイルで configure_firewall オプションを false に設定します。firewalld サービスを実行している場合は、all.yml ファイルで configure_firewall オプションを使用する必要はありません。

      詳細は、all.yml ファイルを参照してください。

    2. group_vars/osds.yml ファイルを編集します。アンコメントする最も一般的な必須およびオプションのパラメーターについては、以下の表を参照してください。なお、この表にはすべてのパラメーターが含まれているわけではありません。

      重要

      OSD のインストールには、OSD がインストールされている機器とは異なる物理的な機器を使用してください。オペレーティングシステムと OSD 間で同じデバイスを共有すると、パフォーマンスの問題が発生することになります。

      表3.2 OSD Ansible 設定

      オプション必須備考

      osd_scenario

      collocated。ログ先行書き込みとキー/値データ (Blue Store) またはジャーナル (File Store) と OSD データに同じデバイスを使用

      non-collocated。SSD や NVMe メディアなどの専用デバイスを使用して先行書き込みログとキー/値データ (Blue Store) またはジャーナルデータ (File Store) を保存するため

      lvm: OSD データの保存に論理ボリュームマネージャーを使用する場合

      はい

      osd_scenario:non-collocatedceph-ansible を使用する場合、devicesdedicated_devices の変数の数が一致することを期待します。たとえば、devices で 10 個のディスクを指定する場合は、dedicated_devices で 10 個のエントリーを指定する必要があります。

      osd_auto_discovery

      OSD を自動的に検出する場合は true

      osd_scenario: collocated を使用している場合は Yes

      devices 設定を使用している場合は使用できません。

      devices

      ceph data が保存されているデバイスのリスト

      デバイスのリストを指定する場合は Yes

      osd_auto_discovery 設定を使用する場合は使用できません。osd_scenario として lvm を使用し、devices オプションを設定する場合、ceph-volume lvm batch モードは最適化された OSD 設定を作成します。

      dedicated_devices

      ceph journal が保存されている非コロケーション OSD 専用デバイスのリスト

      osd_scenario: non-collocated 場合は Yes

      非分割型のデバイスであること

      dmcrypt

      OSD を暗号化する場合は true

      いいえ

      デフォルトは false

      lvm_volumes

      File Store または Blue Store 辞書のリスト

      osd_scenario: lvm使用している場合、ストレージ デバイスが devices を使用して定義されている場合は Yes

      各ディクショナリーには、data キー、journal キー、および data_vg キーが含まれている必要があります。論理ボリュームまたはボリュームグループはすべて、完全パスではなく、名前にする必要があります。data キーおよび journal キーは論理ボリューム (LV) またはパーティションにすることができますが、複数の data 論理ボリュームに 1 つのジャーナルを使用しないでください。data_vg キーは、data 論理ボリューム含むボリュームグループである必要があります。必要に応じて、journal_vg キーを使用して、ジャーナル LV を含むボリュームグループを指定できます (該当する場合)。サポートされているさまざまな設定については、以下の例を参照してください。

      osds_per_device

      デバイスごとに作成する OSD 数。

      いいえ

      デフォルトは 1 です

      osd_objectstore

      OSD の Ceph オブジェクトストアタイプ。

      いいえ

      デフォルトは bluestore です。もう一つの選択肢は、filestore です。アップグレードに必要です。

      以下は、collocatednon-collocatedlvm の 3 つの OSD シナリオを使用した場合の osds.yml ファイルの例です。指定されていない場合、デフォルトの OSD オブジェクトストアフォーマットは BlueStore です。

      コロケート済み

      osd_objectstore: filestore
      osd_scenario: collocated
      devices:
        - /dev/sda
        - /dev/sdb

      コロケートされていない - BlueStore

      osd_objectstore: bluestore
      osd_scenario: non-collocated
      devices:
       - /dev/sda
       - /dev/sdb
       - /dev/sdc
       - /dev/sdd
      dedicated_devices:
       - /dev/nvme0n1
       - /dev/nvme0n1
       - /dev/nvme1n1
       - /dev/nvme1n1

      コロケートされていない例では、デバイスごとに 1 つずつ、4 つの Blue Store OSD が作成されます。この例では、従来のハードドライブ (sdasdbsdcsdd) がオブジェクトデータに使用され、ソリッドステートドライブ (SSD) (/ dev/nvme0n1/ dev/nvme1n1) が Blue Store データベースに使用されて書き込みます-先行書き込みログ。この設定では、/dev/sda および/dev/sdb デバイスを /dev/nvme0n1 デバイスとペアにし、/dev/sdc および /dev/sdd デバイスを /dev/nvme1n1 デバイスとペアにします。

      非コロケーション - Filestore

      osd_objectstore: filestore
      osd_scenario: non-collocated
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/sdc
        - /dev/sdd
      dedicated_devices:
         - /dev/nvme0n1
         - /dev/nvme0n1
         - /dev/nvme1n1
         - /dev/nvme1n1

      LVM simple

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb

      または、以下を実行します。

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/nvme0n1

      これらの単純な設定では ceph-ansible はバッチモード (ceph-volume lvm batch) を使用して OSD を作成します。

      最初のシナリオでは、devices を従来のハードドライブまたは SSD の場合には、デバイスごとに OSD が 1 つ作成されます。

      2 つ目のシナリオでは、従来のハードドライブと SSD が混在している場合、データは従来のハードドライブ (sdasdb) に配置され、BlueStore データベース (block.db) は SSD (nvme0n1) にできる限り大きく作成されます。

      LVM advance

      osd_objectstore: filestore
      osd_scenario: lvm
      lvm_volumes:
         - data: data-lv1
           data_vg: vg1
           journal: journal-lv1
           journal_vg: vg2
         - data: data-lv2
           journal: /dev/sda
           data_vg: vg1

      または、以下を実行します。

      osd_objectstore: bluestore
      osd_scenario: lvm
      lvm_volumes:
        - data: data-lv1
          data_vg: data-vg1
          db: db-lv1
          db_vg: db-vg1
          wal: wal-lv1
          wal_vg: wal-vg1
        - data: data-lv2
          data_vg: data-vg2
          db: db-lv2
          db_vg: db-vg2
          wal: wal-lv2
          wal_vg: wal-vg2

      これらの事前シナリオ例では、事前にボリュームグループと論理ボリュームを作成しておく必要があります。それらは ceph-ansible によって作成されません。

      注記

      すべての NVMe SSD を使用する場合は、osd_scenario:lvm および osds_per_device:4 オプションを設定します。詳細は、Red Hat Ceph Storage インストールガイドの Red Hat Enterprise Linux 用の すべての NVMe Storage の OSDAnsible 設定の設定 または Ubuntu 用のすべての NVMe Storage の OSDAnsible 設定の設定 を参照してください。

      詳細は、osds.yml ファイルのコメントをご覧ください。

  6. デフォルトでは /etc/ansible/hosts にある Ansible のインベントリーファイルを編集します。サンプルホストをコメントアウトすることを忘れないでください。

    1. [mons] セクションの下に Monitor のノードを追加します。

      [mons]
      MONITOR_NODE_NAME1
      MONITOR_NODE_NAME2
      MONITOR_NODE_NAME3
    2. [osds] セクションの下に OSD ノードを追加します。ノードがシーケンシャルなネーミングの場合は、レンジの使用を検討してください。

      [osds]
      OSD_NODE_NAME1[1:10]
      注記

      新規インストールの OSD の場合、デフォルトのオブジェクトストア形式は BlueStore です。

      1. オプションで、devices および dedicated_devices オプションを使用して、OSD ノードが使用するデバイスを指定します。複数のデバイスをリストアップするには、コンマで区切ったリストを使用します。

        構文

        [osds]
        CEPH_NODE_NAME devices="['DEVICE_1', 'DEVICE_2']" dedicated_devices="['DEVICE_3', 'DEVICE_4']"

        [osds]
        ceph-osd-01 devices="['/dev/sdc', '/dev/sdd']" dedicated_devices="['/dev/sda', '/dev/sdb']"
        ceph-osd-02 devices="['/dev/sdc', '/dev/sdd', '/dev/sde']" dedicated_devices="['/dev/sdf', '/dev/sdg']"

        デバイスを指定しない場合は、osds.yml ファイルの osd_auto_discovery オプションを true に設定してください。

        注記

        OSD が異なる名前の デバイス を使用する場合や、いずれかの OSD でデバイスのいずれかに障害が発生した場合に、devices および dedicated_devices パラメーターを使用すると便利です。

  7. 必要に応じて、すべてのデプロイメント (ベアメタル または コンテナー 内) ホスト固有のパラメーターを使用する場合は、ホストに固有のパラメーターが含まれるホストファイルで host_vars ディレクトリーを作成します。

    1. ストレージクラスターに追加される新しい Ceph OSD ノードを /etc/ansible/host_vars/ ディレクトリーに作成します。

      構文

      touch /etc/ansible/host_vars/OSD_NODE_NAME

      [root@admin ~]# touch /etc/ansible/host_vars/osd07

    2. ホスト固有のパラメーターで ファイルを更新します。ベアメタル デプロイメントでは、devices: および dedicated_ devices: セクションをファイルに追加できます。

      devices:
        - /dev/sdc
        - /dev/sdd
        - /dev/sde
        - /dev/sdf
      
      dedicated_devices:
        - /dev/sda
        - /dev/sdb

  8. オプションで、ベアメタルまたはコンテナー内のすべてのデプロイメントで、ansible-playbook を使用してカスタム CRUSH 階層を作成できます。

    1. Ansible のインベントリーファイルを設定します。osd_crush_location パラメーターを使用して、OSD ホストを CRUSH マップの階層内のどこに配置するかを指定します。OSD の場所を指定するために、2 つ以上の CRUSH バケットタイプを指定し、1 つのバケットの type をホストに指定する必要があります。デフォルトでは、これには、rootdatacenterroomrowpodpdurackchassis および host が含まれます。

      構文

      [osds]
      CEPH_OSD_NAME osd_crush_location="{ 'root': ROOT_BUCKET', 'rack': 'RACK_BUCKET', 'pod': 'POD_BUCKET', 'host': 'CEPH_HOST_NAME' }"

      [osds]
      ceph-osd-01 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'pod': 'monpod', 'host': 'ceph-osd-01' }"

    2. crush_rule_config パラメーターとcreate_crush_tree パラメーターを True に設定し、デフォルトの CRUSH ルールを使用しない場合は、少なくとも 1 つの CRUSH ルールを作成します。たとえば、HDD デバイスを使用している場合は、次のようにパラメーターを編集します。

      crush_rule_config: True
      crush_rule_hdd:
          name: replicated_hdd_rule
          root: root-hdd
          type: host
          class: hdd
          default: True
      crush_rules:
        - "{{ crush_rule_hdd }}"
      create_crush_tree: True

      SSD デバイスを使用している場合は、以下のようにパラメーターを編集してください。

      crush_rule_config: True
      crush_rule_ssd:
          name: replicated_ssd_rule
          root: root-ssd
          type: host
          class: ssd
          default: True
      crush_rules:
        - "{{ crush_rule_ssd }}"
      create_crush_tree: True
      注記

      ssdhdd の両方の OSD がデプロイされていない場合、デフォルトの CRUSH ルールは失敗します。これは、デフォルトのルールに、定義する必要のある class パラメーターが含まれているためです。

      注記

      さらに、上記の手順で説明されているように、カスタムの CRUSH 階層を host_vars ディレクトリーの OSD ファイルに追加し、この設定を有効にします。

    3. group_vars/clients.yml ファイルで作成した crush_rules を使用して pools を作成します。

      copy_admin_key: True
      user_config: True
      pool1:
        name: "pool1"
        pg_num: 128
        pgp_num: 128
        rule_name: "HDD"
        type: "replicated"
        device_class: "hdd"
      pools:
        - "{{ pool1 }}"

    4. ツリーを表示します。

      [root@mon ~]# ceph osd tree
    5. プールを検証します。

      # for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done
      
      pool: pool1
      crush_rule: HDD
  9. ベアメタル またはコンテナー内 のすべてのデプロイメントで、Ansible インベントリーファイル (デフォルトでは /etc/ansible/hosts ファイル) を編集するために開きます。例のホストをコメントアウトします。

    1. [mgrs] セクションに Ceph Manager (ceph-mgr) ノードを追加します。Ceph Manager デーモンを Monitor ノードにコロケーションします。

      [mgrs]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
  10. Ansible ユーザーとして、Ansible が Ceph ホストに到達できることを確認します。

    [user@admin ~]$ ansible all -m ping
  11. 次の行を /etc/ansible/ansible.cfg ファイルに追加します。

    retry_files_save_path = ~/
  12. root として、/var/log/ansible/ ディレクトリーを作成し、ansible ユーザーに適切な権限を割り当てます。

    [root@admin ~]# mkdir /var/log/ansible
    [root@admin ~]# chown ansible:ansible  /var/log/ansible
    [root@admin ~]# chmod 755 /var/log/ansible
    1. 次のように log_path 値を更新して、/usr/share/ceph-ansible/ansible.cfg ファイルを編集します。

      log_path = /var/log/ansible/ansible.log
  13. Ansible ユーザーとして、/usr/share/ceph-ansible/ ディレクトリーに移動します。

    [user@admin ~]$ cd /usr/share/ceph-ansible/
  14. ceph-ansible Playbook を実行します。

    [user@admin ceph-ansible]$ ansible-playbook site.yml
    注記

    デプロイメントの速度を増やすには、--forks オプションを ansible-playbook に指定します。デフォルトでは、ceph-ansible はフォークを 20 に設定します。この設定では、ノードを同時にインストールします。一度に最大 30 個のノードをインストールするには、ansible-playbook --forks 30 PLAYBOOKFILE を実行します。管理ノードのリソースが過剰に使用されていないことを確認するために、監視する必要があります。そうである場合は、--forks に渡される数を減らします。

  15. モニターノードの root アカウントを使用して、Ceph クラスターのステータスを確認します。

    [root@monitor ~]# ceph health
    HEALTH_OK
  16. rados を使用してクラスターが機能していることを確認します。

    1. モニターノードから、8 つの配置グループを持つテストプールを作成します。

      構文

      [root@monitor ~]# ceph osd pool create <pool-name> <pg-number>

      [root@monitor ~]# ceph osd pool create test 8
    2. hello-world.txt というファイルを作成します。

      構文

      [root@monitor ~]# vim <file-name>

      [root@monitor ~]# vim hello-world.txt
    3. オブジェクト名 hello-world を使用して、hello-world.txt をテストプールにアップロードします。

      構文

      [root@monitor ~]# rados --pool <pool-name> put <object-name> <object-file>

      [root@monitor ~]# rados --pool test put hello-world hello-world.txt
    4. テストプールからファイル名 fetch.txt として hello-world をダウンロードします。

      構文

      [root@monitor ~]# rados --pool <pool-name> get <object-name> <object-file>

      [root@monitor ~]# rados --pool test get hello-world fetch.txt
    5. fetch.txt の内容を確認してください。

      [root@monitor ~]# cat fetch.txt

      出力は以下のようになります。

      "Hello World!"
      注記

      クラスターの状態を確認するだけでなく、ceph-medic ユーティリティーを使用して Ceph Storage Cluster を総合的に診断することができます。『Red Hat Ceph Storage 3 管理ガイド』 の「 ceph-medic を使用した Ceph Storage クラスターの診断 」の章を参照してください。