Puppet : automatiser la construction d’un volume GlusterFS répliqué

Posted by

Puppet : automatiser la construction d’un volume GlusterFS répliqué

Je vais présenter rapidement comment créer le code Puppet adapté à la création d’un cluster à deux noeuds avec deux bricks répliqués. Pour la démonstration, j’aurais deux VM Ubuntu 16.04 et les bricks seront sur deux disques durs de 8 Go.

Préparation du Puppet Master

Installation des modules nécessaires :

# puppet module install puppetlabs-lvm
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/etc/puppetlabs/code/environments/production/modules
└─┬ puppetlabs-lvm (v0.9.0)
  └── puppetlabs-stdlib (v4.20.0)

# puppet module install puppet-gluster
Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
Notice: Downloading from https://forgeapi.puppet.com ...
Notice: Installing -- do not interrupt ...
/etc/puppetlabs/code/environments/production/modules
└─┬ puppet-gluster (v3.0.0)
  └─┬ puppetlabs-apt (v2.4.0)
    └── puppetlabs-stdlib (v4.20.0)

Notre arborescence pour le module se trouvera dans ce répertoire :

# mkdir -p /etc/puppetlabs/code/environments/production/modules/glustersrv/manifests
Préparation des disques Fichier /etc/puppetlabs/code/environments/production/modules/glustersrv/manifests/lvm.pp :
class glustersrv::brick {

# Dépendances :
  package { "xfsprogs": ensure=> present }
  package { "lvm2": ensure=> present }

# On créé notre LVM :
  physical_volume { '/dev/sdb':
    ensure => present,
  }

  volume_group { 'vg-gluster':
    ensure           => present,
    physical_volumes => '/dev/sdb',
  }

  logical_volume { 'lv-bricks':
    ensure       => present,
    volume_group => 'vg-gluster',
      size         => '7.9G',
  }

  filesystem { '/dev/vg-gluster/lv-bricks':
    ensure  => present,
    fs_type => 'xfs',
  }

# Le volume LVM est automatiquement monté
  mount { '/data/glusterfs/vol0':
    name => '/data/glusterfs/vol0',
    ensure => 'mounted',
    atboot => 'true',
    device => '/dev/vg-gluster/lv-bricks',
    fstype   => 'xfs',
    options   => 'defaults',
    dump   => 1,
    pass => 0,
  }
}

Création du volume répliqué

Fichier /etc/puppetlabs/code/environments/production/modules/glustersrv/manifests/node.pp :

class glustersrv::node {

  file { '/data/glusterfs/vol0/brick0':
    ensure => 'directory',
  }

  package { "glusterfs-server": ensure => 'present' }

  service { 'glusterfs-server':
    ensure => running,
    enable => true,
    hasrestart => true,
  }

  gluster::volume { 'repl-vol':
    replica => 2,
    bricks  => [
      'gluster0.morot.test:/data/glusterfs/vol0/brick0',
      'gluster1.morot.test:/data/glusterfs/vol0/brick0',
    ],
  }
}

Affectation des classes

Fichier /etc/puppetlabs/code/environments/production/manifests/site.pp :

node 'gluster0' {
  include system
  include glustersrv::lvm
  gluster::peer { 'gluster1.morot.test':
    pool => 'production',
  }
  include glustersrv::node
}

node 'gluster1' {
  include system
  include glustersrv::lvm
  gluster::peer { 'gluster0.morot.test':
    pool => 'production',
  }
  include glustersrv::node
}

On vérifie

root@gluster1:~# gluster volume status
Status of volume: repl-vol
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick gluster0.morot.test:/data/glusterfs/v
ol0/brick0                                  49152     0          Y       7037
Brick gluster1.morot.test:/data/glusterfs/v
ol0/brick0                                  49152     0          Y       3817
NFS Server on localhost                     N/A       N/A        N       N/A
Self-heal Daemon on localhost               N/A       N/A        Y       3844
NFS Server on 192.168.69.70                 N/A       N/A        N       N/A
Self-heal Daemon on 192.168.69.70           N/A       N/A        Y       7063

Task Status of Volume repl-vol
------------------------------------------------------------------------------
There are no active volume tasks

2 comments

  1. Hello,

    Merci pour la procédure que tu présentes en ligne, elle est bien pratique !
    Je voulais savoir cependant si tu avais trouvé un moyen de faire passer le paramètre suivant via puppet? Je n’ai rien trouvé à ce sujet:
    gluster volume set repl-vol network.ping-timeout 5

    Pour éviter les 42 secondes de délai vis à vis du montage d’un client lors d’un crash.

    1. Bonjour, cool si ça t’a été utile.

      Je dirais que tu peux utiliser directement

      gluster::volume::option{ 'network.ping-timeout':
        value => '5',
      }
      

      Ou à la création du volume :

      gluster::volume { 'repl-vol':
        replica => 2,
        bricks  => [
                     'srv1.local:/data/0',
                     'srv2:/data/0',
                   ],
        options => [
                     'network.ping-timeout: 5',
                   ],
      }
      

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *