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 на true или false, где:

  • mgmt: Сервер управления - минимум один хост
  • mds: Узлы хранения метаданных
  • oss: Узлы хранения объектов
  • client: Клиенты кластера хранения BeeGFS
  • admon: НЕ РЕАЛИЗОВАНО

Эта роль зависит от разрешения имени каждого узла в IP-адрес, используемый для доступа к серверу управления, как указано через beegfs_host_mgmt. В этом случае bgsf1 и bgfs2 должны разрешаться в 172.16.1.1 и 172.16.1.2 соответственно. Это может быть сделано через DNS или /etc/hosts.

Важно отметить, что при развертывании кластера, если указанные блочные устройства уже имеют файловую систему или диск не пуст, нужно принудительно отформатировать диск. Это можно сделать, установив beegfs_force_format в true. ЭТО УДАЛИТ СОДЕРЖИМОЕ ДИСКА(ОВ). Убедитесь, что у вас есть резервные копии, если вам важно их содержание.

Разделы поддерживаются, но они должны быть ранее созданы другими способами. Кроме того, вам также нужно будет переопределить переменную beegfs_oss_tunable с помощью списка родительских блочных устройств, поскольку разделы не находятся под /sys/block/. Например, чтобы создать разделы с помощью модуля 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
  • Стандартный сценарий molecule протестирует роль на машине 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/ansible-role-beegfs
Лицензия
Unknown
Загрузки
1074
Владелец
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.