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
: Клиенты кластера хранения BeeGFSadmon
: НЕ РЕАЛИЗОВАНО
Эта роль зависит от разрешения имени каждого узла в 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