stackhpc.beegfs
stackhpc.beegfs
Dieses Ansible-Rolle kann verwendet werden, um ein BeegFS-Cluster zu erstellen und zu zerstören. Zusammengefasst ist BeegFS ein parallelles Dateisystem, das Benutzerdaten auf mehrere Server verteilt. Es ist darauf ausgelegt, sowohl in Bezug auf Leistung als auch Kapazität skalierbar zu sein. Mehr über BeeFS erfahren Sie hier.
Die Rolle wurde zuletzt mit Ansible-Version 2.5.0 getestet.
Beispiel
Angenommen, wir haben ein Inventar, das folgendermaßen aussieht (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
Und ein entsprechendes Playbook wie dieses (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
...
Um ein Cluster zu erstellen:
# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=present
Um ein Cluster zu zerstören:
# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=absent
Hinweise
Das Aktivieren verschiedener BeegFS-Dienste ist so einfach wie das Konfigurieren der Schalter unter beegfs_enable
auf true
oder false
, wobei:
mgmt
: Management-Server - mindestens ein Hostmds
: Knoten für die Metadatenspeicherungoss
: Knoten für die Objektablageclient
: Clients des BeeGFS-Speicherclustersadmon
: NICHT IMPLEMENTIERT
Diese Rolle hängt davon ab, dass der Hostname jedes Knotens auf die IP-Adresse aufgelöst wird, die verwendet wird, um den Management-Host zu erreichen, wie über beegfs_host_mgmt
konfiguriert. In diesem Fall müssen bgsf1
und bgfs2
auf 172.16.1.1
bzw. 172.16.1.2
aufgelöst werden. Dies kann entweder über DNS oder /etc/hosts
erfolgen.
Es ist wichtig zu beachten, dass beim Bereitstellen des Clusters, wenn die angegebenen Blockgeräte bereits ein Dateisystem haben oder die Festplatte nicht leer ist, es wichtig ist, die Festplatte mit der Zwangsformatierung vorzubereiten. Dies kann eingestellt werden, indem beegfs_force_format
auf true
gesetzt wird. DADURCH WERDEN DIE INHALTE DER FESTPLATTE(N) GELÖSCHT. Stellen Sie sicher, dass Sie Backups erstellt haben, wenn Ihnen der Inhalt wichtig ist.
Partitionen werden unterstützt, müssen jedoch zuvor auf andere Weise erstellt worden sein. Darüber hinaus müssen Sie auch die Variable beegfs_oss_tunable
mit einer Liste von übergeordneten Blockgeräten überschreiben, da Partitionen nicht unter /sys/block/
leben. Zum Beispiel, um Partitionen mit einem Ansible-Modul namens parted
zu erstellen (funktioniert mit Ansible-Version 2.5+), können Sie das folgende Playbook ausführen:
---
- 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: Partitionen erstellen
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
...
Tests
Einige Tests sind im Molekülordner enthalten. Um sie lokal auszuführen, benötigen Sie:
Sobald Sie alle Abhängigkeiten installiert haben, können Sie die Tests aus dem Hauptverzeichnis der Rolle ausführen:
$> molecule lint
$> molecule test
$> molecule test -s vagrant-ubuntu-16.04
$> molecule test -s vagrant-ubuntu-18.04
- Das Standard-Molekül-Szenario testet die Rolle auf einer Centos7.5-Maschine.
- Alle Tests werden alle Dienste auf einer einzigen Maschine bereitstellen.
- YAML-Lint und Ansible-Lint werden getestet.
- Idempotenz wird überprüft.
- Nach Abschluss der Ausführung werden einige testinfra -Tests durchgeführt. Alle Szenarien verwenden die gleichen Tests, die im molecule/tests enthalten sind.
This role provisions an exisiting cluster to support Beegfs management, metadata, object storage server and client roles.
ansible-galaxy install stackhpc.beegfs