stackhpc.beegfs

ビルドステータス

stackhpc.beegfs

このAnsibleロールは、BeegFSクラスタを作成および削除するために使用できます。簡単に言うと、BeegFSはユーザーデータを複数のサーバーに分散させる並列ファイルシステムです。パフォーマンスと容量の両方でスケーラブルに設計されています。BeegFSについての詳細はこちらでご覧ください。

このロールは、Ansibleバージョン2.5.0を使用して最後にテストされました。

次のようなインベントリがあるとします(inventory-beegfs):

[leader]
bgfs1 ansible_host=172.16.1.1 ansible_user=centos

[follower]
bgfs2 ansible_host=172.16.1.2 ansible_user=centos

[cluster:children]
leader
follower

[cluster_beegfs_mgmt:children]
leader

[cluster_beegfs_mds:children]
leader

[cluster_beegfs_oss:children]
leader
follower

[cluster_beegfs_client:children]
leader
follower

対応するプレイブックは次のようになります(beegfs.yml):

---
- hosts:
  - cluster_beegfs_mgmt
  - cluster_beegfs_mds
  - cluster_beegfs_oss
  - cluster_beegfs_client 
  roles:
  - role: stackhpc.beegfs
    beegfs_enable:
      admon: false
      mgmt: "{{ inventory_hostname in groups['cluster_beegfs_mgmt'] }}"
      meta: "{{ inventory_hostname in groups['cluster_beegfs_mds'] }}"
      oss: "{{ inventory_hostname in groups['cluster_beegfs_oss'] }}"
      tuning: "{{ inventory_hostname in groups['cluster_beegfs_oss'] }}"
      client: "{{ inventory_hostname in groups['cluster_beegfs_client'] }}"
    beegfs_oss:
    - dev: "/dev/sdb"
      port: 8003
    - dev: "/dev/sdc"
      port: 8103
    - dev: "/dev/sdd"
      port: 8203
    beegfs_mgmt_host: "{{ groups['cluster_beegfs_mgmt'] | first }}"
    beegfs_client:
    - path: "/mnt/beegfs"
      port: 8004
    beegfs_fstype: "xfs"
    beegfs_force_format: false
    beegfs_interfaces: ["ib0"]
    beegfs_rdma: true
    beegfs_state: present
...

クラスタを作成するには:

# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=present

クラスタを削除するには:

# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=absent

注意事項

BeegFSの各サービスを有効にするのは、beegfs_enableの設定をtrueまたはfalseに変更するだけで簡単です。設定内容は以下の通りです:

  • mgmt: 管理サーバー - 最低1台のホストが必要
  • mds: メタデータストレージサーバーノード
  • oss: オブジェクトストレージサーバーノード
  • client: BeeGFSストレージクラスタのクライアント
  • admon: 未実装

このロールは、各ノードのホスト名が管理ホストに到達するためのIPアドレスに解決されることに依存しています。この場合、bgfs1bgfs2はそれぞれ172.16.1.1172.16.1.2に解決される必要があります。これはDNSまたは/etc/hostsを通じて行うことができます。

クラスタをプロビジョニングする際には、指定されたブロックデバイスにすでにファイルシステムが存在する場合やディスクが空でない場合、ディスクを強制的にフォーマットすることが重要です。これを行うには、beegfs_force_formattrueに設定します。これによりディスクの内容が削除されるので、内容が重要な場合はバックアップを取っておくことを忘れないでください。

パーティションはサポートされていますが、他の手段で作成されている必要があります。また、パーティションは/sys/block/の下に存在しないため、beegfs_oss_tunable変数に親ブロックデバイスのリストをオーバーライドする必要があります。例えば、Ansibleモジュールpartedを使用してパーティションを作成するには(Ansibleバージョン2.5以降で動作)、次のプレイブックを実行できます:

---
- hosts:
  - cluster_beegfs_oss
  vars:
    partitions:
    - dev: /dev/sdb
      start: 0%
      end: 50%
      number: 1
    - dev: /dev/sdb
      start: 50%
      end: 100%
      number: 2
  tasks:
  - name: パーティションを作成する
    parted:
      label: gpt
      state: present
      part_type: primary
      device: "{{ item.dev }}"
      part_start: "{{ item.start }}"
      part_end: "{{ item.end }}"
      number: "{{ item.number }}"
    with_items: "{{ partitions }}"
    become: true
...

テスト

いくつかのテストはmoleculeフォルダーに提供されています。ローカルでテストを実行するには、次のものが必要です:

すべての依存関係がインストールされたら、ロールのルートフォルダーからテストを実行できます:

$> molecule lint
$> molecule test
$> molecule test -s vagrant-ubuntu-16.04
$> molecule test -s vagrant-ubuntu-18.04
  • デフォルトのモレキュールシナリオは、Centos7.5マシンでロールをテストします。
  • すべてのテストは、単一のマシンにすべてのサービスをデプロイします。
  • yaml lintとansible lintがテストされます。
  • 冪等性がチェックされます。
  • 実行が終了すると、いくつかのtestinfraテストが実行されます。すべてのシナリオはmolecule/testsに配置されている同じテストを使用します。
プロジェクトについて

This role provisions an exisiting cluster to support Beegfs management, metadata, object storage server and client roles.

インストール
ansible-galaxy install stackhpc.beegfs
ライセンス
Unknown
ダウンロード
1.1k
所有者
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.