9.6. Ceph BlueStore をチューニングして小規模な書き込みを実現

BlueStore では、生のパーティションは bluestore_min_alloc_size のブロックで割り当て、管理されます。デフォルトでは、bluestore_min_alloc_size は HDD の場合は 64 KB、SSD では 4 KB になります。各チャンクの書き込みのない領域は、未加工パーティションに書き込まれる際にゼロで埋められます。これにより、小さいオブジェクトを書き込むなど、ワークロードのサイズが適切に設定されていない場合に未使用領域が無駄になる可能性があります。

書き込み増幅のペナルティーを回避できるように bluestore_min_alloc_size を最小書き込みに一致させることを推奨します。

たとえば、クライアントが 4 KB のオブジェクトを頻繁に書き込みする場合は、ceph-ansible を使用して OSD ノードで以下の設定を設定します。

bluestore_min_alloc_size = 4096

注記

bluestore_min_alloc_size_ssd 設定および bluestore_min_alloc_size_hdd 設定は、それぞれ SSD および HDD に固有のものですが、bluestore_min_alloc_size によりその設定が上書きされるため、設定する必要は必要ありません。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • OSD ノードとして新規にプロビジョニングできる新規サーバー、または
  • 再デプロイできる OSD ノード。
  • Ceph Monitor ノードの管理者キーリング (既存の Ceph OSD ノードを再デプロイする場合)。

手順

  1. 必要に応じて、既存の OSD ノードを再デプロイする場合は、Ansible Playbook shrink-osd.yml を使用してクラスターから OSD を削除します。

    ansible-playbook -v infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=OSD_ID

    [admin@admin ceph-ansible]$ ansible-playbook -v infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=1

  2. 既存の OSD ノードを再デプロイする場合には、OSD ドライブを削除して、OSD を再インストールします。
  3. Ansible を使用して OSD プロビジョニング用のノードを準備します。準備タスクの例には、Red Hat Ceph Storage リポジトリーの有効化、Ansible ユーザーの追加、パスワードなしの SSH ログインの有効化が含まれます。
  4. bluestore_min_alloc_size を Ansible Playbook group_vars/all.ymlceph_conf_overrides セクションに追加します。

    ceph_conf_overrides:
      osd:
        bluestore_min_alloc_size: 4096
  5. 新規ノードをデプロイする場合は、これを Ansible インベントリーファイル (通常は /etc/ansible/hosts) に追加します。

    [osds]
    OSD_NODE_NAME

    [osds]
    osd1 devices="[ '/dev/sdb' ]"

  6. 既存の OSD を再デプロイする場合は、Ceph Monitor ノードの管理キーリングファイルを OSD をデプロイするノードにコピーします。
  7. Ansible を使用して OSD ノードをプロビジョニングします。

    ansible-playbook -v site.yml -l OSD_NODE_NAME

    [admin@admin ceph-ansible]$ ansible-playbook -v site.yml -l osd1

  8. Playbook が完了したら、ceph daemon コマンドを使用して設定を確認します。

    ceph daemon OSD.ID config get bluestore_min_alloc_size

    [root@osd1 ~]# ceph daemon osd.1 config get bluestore_min_alloc_size
    {
        "bluestore_min_alloc_size": "4096"
    }

    bluestore_min_alloc_size が 4096 バイトに設定されていることがわかります。これは 4 KiB に相当します。

関連情報