stackhpc.beegfs

Estado de Construcción

stackhpc.beegfs

Este rol de Ansible se puede utilizar para crear y destruir un clúster de BeegFS. En resumen, BeegFS es un sistema de archivos paralelo que distribuye los datos del usuario a través de múltiples servidores. Está diseñado para ser escalable tanto en términos de rendimiento como de capacidad. Aprende más sobre BeeFS aquí.

El rol fue probado por última vez con la versión 2.5.0 de Ansible.

Ejemplo

Digamos que tenemos un inventario que se ve así (inventory-beegfs):

[líder]
bgfs1 ansible_host=172.16.1.1 ansible_user=centos

[seguidor]
bgfs2 ansible_host=172.16.1.2 ansible_user=centos

[clúster:children]
líder
seguidor

[cluster_beegfs_mgmt:children]
líder

[cluster_beegfs_mds:children]
líder

[cluster_beegfs_oss:children]
líder
seguidor

[cluster_beegfs_client:children]
líder
seguidor

Y un libro de jugadas correspondiente como este (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
...

Para crear un clúster:

# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=present

Para destruir un clúster:

# ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=absent

Notas

Habilitar varios servicios de BeegFS es tan simple como configurar los interruptores bajo beegfs_enable a true o false, donde:

  • mgmt: Servidor de gestión - mínimo un host
  • mds: Nodos de almacenamiento de metadatos
  • oss: Nodos de servidor de almacenamiento de objetos
  • client: Clientes del clúster de almacenamiento de BeeGFS
  • admon: NO IMPLEMENTADO

Este rol depende de que el nombre del host de cada nodo se resuelva a la dirección IP utilizada para alcanzar el host de gestión, según lo configurado a través de beegfs_host_mgmt. En este caso, bgsf1 y bgfs2 deben resolverse a 172.16.1.1 y 172.16.1.2, respectivamente. Esto se puede hacer mediante DNS o /etc/hosts.

Es importante señalar que al aprovisionar el clúster, si los dispositivos de bloques especificados ya tienen un sistema de archivos o el disco no está vacío, es importante forzar el formato del disco. Esto se puede hacer configurando beegfs_force_format a true. ESTO ELIMINARÁ EL CONTENIDO DEL (DE LOS) DISCO(S). Asegúrate de haber hecho copias de seguridad si te importa su contenido.

Se admiten particiones, pero deben haberse creado por otros medios. Además, también deberás sobrescribir la variable beegfs_oss_tunable con una lista de dispositivos de bloque principales, ya que las particiones no viven en /sys/block/. Por ejemplo, para crear particiones utilizando un módulo de Ansible llamado parted (funciona en la versión de Ansible 2.5+), puedes ejecutar el siguiente libro de jugadas:

---
- 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: Crear particiones
    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
...

Pruebas

Se proporcionan algunas pruebas en la carpeta de moléculas. Para ejecutarlas localmente necesitas:

Una vez que tengas todas las dependencias instaladas, puedes ejecutar las pruebas desde la carpeta raíz del rol:

$> molecule lint
$> molecule test
$> molecule test -s vagrant-ubuntu-16.04
$> molecule test -s vagrant-ubuntu-18.04
  • El escenario de moléculas por defecto probará el rol en una máquina CentOS 7.5.
  • Todas las pruebas desplegarán todos los servicios en una única máquina.
  • Se prueba el lint de yaml y ansible.
  • Se verifica la idempotencia.
  • Una vez que finaliza la ejecución, se ejecutan algunas pruebas de testinfra. Todos los escenarios utilizan las mismas pruebas ubicadas en molecule/tests.
Acerca del proyecto

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

Instalar
ansible-galaxy install stackhpc.beegfs
Licencia
Unknown
Descargas
1.1k
Propietario
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.