stackhpc.beegfs

Build Status

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 Host
  • mds: Knoten für die Metadatenspeicherung
  • oss: Knoten für die Objektablage
  • client: Clients des BeeGFS-Speicherclusters
  • admon: 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.
Über das Projekt

This role provisions an exisiting cluster to support Beegfs management, metadata, object storage server and client roles.

Installieren
ansible-galaxy install stackhpc.beegfs
Lizenz
Unknown
Downloads
1.1k
Besitzer
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.