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アドレスに解決されることに依存しています。この場合、bgfs1
とbgfs2
はそれぞれ172.16.1.1
と172.16.1.2
に解決される必要があります。これはDNSまたは/etc/hosts
を通じて行うことができます。
クラスタをプロビジョニングする際には、指定されたブロックデバイスにすでにファイルシステムが存在する場合やディスクが空でない場合、ディスクを強制的にフォーマットすることが重要です。これを行うには、beegfs_force_format
をtrue
に設定します。これによりディスクの内容が削除されるので、内容が重要な場合はバックアップを取っておくことを忘れないでください。
パーティションはサポートされていますが、他の手段で作成されている必要があります。また、パーティションは/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