stackhpc.beegfs

构建状态

stackhpc.beegfs

这个 Ansible 角色可以用于创建和销毁 BeegFS 集群。简单来说,BeegFS 是一种并行文件系统,可以将用户数据分散存储在多个服务器上。它在性能和容量方面都具有可扩展性。想了解更多关于 BeeFS 的信息,请访问 这里

该角色最后测试使用的 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 下的开关设置为 truefalse

  • mgmt:管理服务器 - 至少需要一个主机
  • mds:元数据存储服务器节点
  • oss:对象存储服务器节点
  • client:BeeGFS 存储集群的客户端
  • admon:未实现

该角色依赖于每个节点的主机名解析到用于访问管理主机的 IP 地址,如 beegfs_host_mgmt 所配置。在这种情况下,bgfs1bgfs2 必须分别解析为 172.16.1.1172.16.1.2。这可以通过 DNS 或 /etc/hosts 实现。

重要的是要注意,当配置集群时,如果指定的块设备已有文件系统,或者磁盘不为空,则需要强制格式化磁盘。可以通过将 beegfs_force_format 设置为 true 来实现。这样会删除磁盘上的所有内容。如果您在意磁盘内容,请确保事先做好备份。

支持分区,但必须通过其他方式先创建。此外,您还需要重载变量 beegfs_oss_tunable,并提供一个父块设备的列表,因为分区不在 /sys/block/ 下。例如,使用一个名为 parted 的 Ansible 模块创建分区(在 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
  • 默认的 Molecule 场景将在 Centos 7.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.