Outils personnels

GlusterFS+ZFS sur CentOS6/7 : Différence entre versions

De wikiGite

(Page créée avec « = Installation = Sur chaque serveur : install centos minimale yum -y install wget screen bash-completion yum -y update Si install à partir de l'iso CentOS6 : service... »)
 
(ZFS)
 
(14 révisions intermédiaires par le même utilisateur non affichées)
Ligne 13 : Ligne 13 :
  
 
si pas de DNS, vi /etc/hosts, déclarer les 2 serveurs et leurs IPs.
 
si pas de DNS, vi /etc/hosts, déclarer les 2 serveurs et leurs IPs.
 +
 +
== ZFS ==
 +
'''Le noyau doit accepter les modules''' (problème rencontré avec le noyau customizé d'OVH, qu'on se demande bien de quoi ils se mêlent).
 +
 +
Sur Centos7 :
 +
yum localinstall --nogpgcheck http://epel.mirrors.ovh.net/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 +
ou
 +
yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 +
DESACTIVER EPEL PAR DEFAUT (enabled=0 dans le fichier epel.repo)
 +
 +
yum localinstall http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
 +
yum install zfs --enablerepo=epel
 +
 +
== GlusterFs ==
 +
Le dépôt EPEL a déjà été installé pour ZFS.
 +
wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
 +
yum install glusterfs glusterfs-fuse glusterfs-server --enablerepo=epel
  
 
= Configuration =
 
= Configuration =
 
== ZFS ==
 
== ZFS ==
Créer les partitions pour le ZFS:
+
Créer les partitions pour ZFS:
 
  # parted /dev/sda  
 
  # parted /dev/sda  
 
vérifier l'espace libre
 
vérifier l'espace libre
Ligne 22 : Ligne 39 :
 
Si pas encore de table de partition, créer une MSDOS (petits disques) ou GPT (disques > 2To)
 
Si pas encore de table de partition, créer une MSDOS (petits disques) ou GPT (disques > 2To)
 
  mklabel gpt
 
  mklabel gpt
créer une 3ème partition primaire sur le reste
+
créer une partition primaire sur disque entier ou sur l'espace libre. Ici on crée une partition 2 sur l'espace libre de sda.
 
  (parted) mkpart primary
 
  (parted) mkpart primary
type = ext2
+
type = ext2
début = fin de la 2ème partition (ou, pour un disque complet, "2048s" = laisser les 2048 premiers secteurs du disque pour éviter le message "Warning: The resulting partition is not properly aligned for best performance."), fin = fin de l'espace libre (ou "100%")
+
 
 +
début = indiquer la fin de la partition précédente ou, pour un disque complet, "2048s" (= laisser les 2048 premiers secteurs du disque pour éviter le message "Warning: The resulting partition is not properly aligned for best performance.")
 +
 
 +
fin = fin de l'espace libre (ou simplement "100%")
 +
 
 
changer le type en LVM (ci-dessous "3" correspond au n° de partition)
 
changer le type en LVM (ci-dessous "3" correspond au n° de partition)
  (parted) set 3 lvm on
+
  (parted) set 2 lvm on
 
  (parted) quit
 
  (parted) quit
  
Installer ZFS. '''Le noyau doit accepter les modules''' (cf prob noyau custom d'ovh).
+
Vérifier que ZFS est installé et fonctionne
Sur Centos7 :
+
zfs list
yum localinstall --nogpgcheck http://epel.mirrors.ovh.net/epel//7/x86_64/e/epel-release-7-5.noarch.rpm
 
ou
 
yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
 
DESACTIVER EPEL PAR DEFAUT (enabled=0 dans le fichier epel.repo)
 
  
yum localinstall http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
+
Créer le(s) pool(s) :
yum install zfs
+
zpool create -f -o ashift=12 zpool01 /dev/sda2
  
zfs list
+
Le pool est monté automatiquement. On peut utiliser directement le pool comme n'importe quel FS.
 
+
Mais on peut aussi créer des "filesystems" dans ces pools, dont l'intérêt est de gérer des quotas par filesystem, et de surtout pouvoir prendre les snapshots indépendamment.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
If you encounter issues or problems:
 
-------------------------------------------
 
Issue: if you get the error...
 
# zpool list
 
Failed to load ZFS module stack.
 
Load the module manually by running 'insmod /zfs.ko' as root.
 
or
 
dkms install -m spl -v 0.6.2
 
Error! echo
 
Your kernel headers for kernel 2.6.32-431.el6.x86_64 cannot be found at /lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source.
 
  
Solution:
+
  zfs create zpool01/home
1) Check to see if you have the kernels headers for your linux kernel
 
2) Check to make sure,
 
/lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source
 
Properly linked or symlinked :
 
ln -s /usr/src/kernels/3.10.23-11.el6.centos.alt.x86_64/ 3.10.23-xxxx-grs-ipv6-64/build
 
3) Check /usr/src/kernels to see if build and source above are pointing to the right place or a place. You may need to create a symlink.
 
Example: 2.6.32-431.el6.x86_64 -> ./2.6.32-431.xxxx.el6.x86_64
 
4) If you still get the error.
 
Rebuild the modules.
 
# dkms remove -m zfs -v 0.6.0.90 --all
 
# dkms remove -m spl -v 0.6.0.90 --all
 
# dkms add -m spl -v 0.6.0.90
 
# dkms add -m zfs -v 0.6.0.90
 
# dkms install -m spl -v 0.6.0.90
 
# dkms install -m zfs -v 0.6.0.90
 
!!!!!!!!!!!!!!!!!!!!!!!!!!
 
  
zpool create -f -o ashift=12 zpool01 /dev/sda5
+
zfs set atime=off zpool01/home
zpool create -f -o ashift=12 zpool02 /dev/sdb1
+
zfs set xattr=sa zpool01/home
Le pool est monté automatiquement. On peut créer des "partitions" dans ce pool sous formes de filesystems, dont le seul intérêt est de gérer des quotas, donc de "découper" le pool. Sinon on utilise directement le pool.
+
zfs set exec=off zpool01/home
zfs set atime=off zpool01
+
zfs set sync=disabled zpool01/home
zfs set atime=off zpool02
 
zfs set xattr=sa zpool01
 
zfs set xattr=sa zpool02
 
zfs set exec=off zpool01
 
zfs set exec=off zpool02
 
zfs set sync=disabled zpool01
 
zfs set sync=disabled zpool02
 
  
 
Important quand les volumes seront utilisés avec Gluster et NFS :
 
Important quand les volumes seront utilisés avec Gluster et NFS :
zfs set acltype=posixacl zpool01
+
zfs set acltype=posixacl zpool01/home
zfs set acltype=posixacl zpool02
 
  
GlusterFS
+
== GlusterFS ==
********************************
+
systemctl enable glusterd
Le dépôt EPEL est déjà installé.
+
systemctl start glusterd
wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
 
yum install glusterfs glusterfs-fuse glusterfs-server --enablerepo=epel
 
systemctl enable glusterd
 
systemctl start glusterd
 
  
 
Sur server1
 
Sur server1
gluster peer probe server2
+
gluster peer probe server2
gluster peer status # sur chaque machine doit indiqué l'autre connectée
+
gluster peer status # sur chaque machine doit indiqué l'autre connectée
gluster volume create home01 replica 2 server1:/zpool01/home01 server2:/zpool01/home01
+
gluster volume create home01 replica 2 server1:/zpool01/home/brick server2:/zpool01/home/brick
gluster volume start home01
+
gluster volume start home01
  
idem pour d'autres volumes. On ajoute aussi un volume dédié aux locks CTDB ( voir NFS HA) sur zpool0/ctdblock
+
idem pour d'éventuels autres volumes. On ajoute aussi un volume dédié aux locks CTDB ( voir NFS HA) sur zpool01/ctdblock
gluster volume create ctdblock replica 2 server1:/zpool01/ctdblock server2:/zpool01/ctdblock
+
gluster volume create ctdblock replica 2 server1:/zpool01/ctdblock server2:/zpool01/ctdblock
gluster volume start ctdblock
+
gluster volume start ctdblock
  
 
Pour tous les volumes :
 
Pour tous les volumes :
gluster volume set home01 performance.cache-size 512MB
+
gluster volume set home01 performance.cache-size 512MB
gluster volume set home01 performance.io-thread-count 32
+
gluster volume set home01 performance.io-thread-count 32
  
gluster volume info
+
Voir les informations :
gluster volume status
+
gluster volume info
 +
gluster volume status
  
 
GlusterFS embarque son propre serveur NFS, il faut donc désactiver celui du système.
 
GlusterFS embarque son propre serveur NFS, il faut donc désactiver celui du système.
systemctl disable nfs.target
+
systemctl disable nfs.target
systemctl enable rpcbind.service
+
systemctl enable rpcbind.service
  
# BUG1 : le service rpcbind semble ne s'enregistre correctement avec systemctl. Il faut forcer :
+
# '''BUG1''' : le service rpcbind semble ne s'enregistre correctement avec systemctl. Il faut forcer :
ln -s '/usr/lib/systemd/system/rpcbind.service' '/etc/systemd/system/multi-user.target.wants/rpcbind.service'
+
ln -s '/usr/lib/systemd/system/rpcbind.service' '/etc/systemd/system/multi-user.target.wants/rpcbind.service'
# BUG2 : et en plus, éditer le service et enlever le "-w" de l'option ExecStart
+
# '''BUG2''' : et en plus, éditer le service et enlever le "-w" de l'option ExecStart
vi /etc/systemd/system/multi-user.target.wants/rpcbind.service
+
vi /etc/systemd/system/multi-user.target.wants/rpcbind.service
  ExecStart=/sbin/rpcbind ${RPCBIND_ARGS}
+
  ExecStart=/sbin/rpcbind ${RPCBIND_ARGS}
  
systemctl start rpcbind.service
+
 
systemctl restart glusterd
+
systemctl start rpcbind.service
gluster volume status doit alors indiquer que les serveur NFS sont online sur les 2 noeuds.
+
systemctl restart glusterd
 +
"gluster volume status" doit alors indiquer que les serveur NFS sont online sur les 2 noeuds.
  
 
NOTE : en cas d'erreur I/O à la lecture/écriture lors du premier montage en NFS, désactiver et réactiver les acls :
 
NOTE : en cas d'erreur I/O à la lecture/écriture lors du premier montage en NFS, désactiver et réactiver les acls :
gluster volume set home01 nfs.acl off
+
gluster volume set home01 nfs.acl off
gluster volume set home01 nfs.acl on
+
gluster volume set home01 nfs.acl on
  
 
== CLIENT GLUSTER NATIF ==
 
== CLIENT GLUSTER NATIF ==
install fuse fuse-libs
+
yum install fuse fuse-libs glusterfs-fuse
modprobe fuse
+
modprobe fuse
yum install glusterfs-fuse
+
mkdir /home01
mkdir /home01
+
mount -t glusterfs server1:/home01 /home01
mount -t glusterfs server1:/home01 /home01
+
 
 +
== CLIENT NFS ==
 +
mount -t nfs -o _netdev,noatime,vers=3,direct-io-mode=disabled SERVER:/VOL_NAME /MOUNT_POINT
  
 
== Benchs ==
 
== Benchs ==
 
TODO.
 
TODO.
 +
 
Mais les premières constatations montrent que NFS est 2 fois plus rapide que fuse.glusterfs !
 
Mais les premières constatations montrent que NFS est 2 fois plus rapide que fuse.glusterfs !
  
 
== NFS HA - CTDB ==
 
== NFS HA - CTDB ==
Utile uniquement pour NFS et CIFS
+
On utilise CTDB pour partager une adresse IP qui peut basculer d'un serveur à l'autre en cas de panne. Les clients, à part un léger timeout au moment de la bascule, restent connectés. Utile uniquement pour NFS et CIFS.
yum install ctdb samba
+
yum install ctdb samba
systemctl disable smb # Samba sera ancé par ctdb
+
systemctl disable smb # Samba sera lancé par ctdb
  
on monte le volume Gluster dédié aux verrous CTDB en local sur les serveurs avec le client Gluster natif
+
on monte le volume Gluster dédié aux verrous CTDB en local sur les serveurs avec le client Gluster natif (pas de problème de performance avec FUSE ici, ce e sont que des petits fichiers de config et de verrous)
mkdir /ctdblock
+
mkdir /ctdblock
mount -t glusterfs <nom_du_serveur_local>:/ctdblock /ctdblock
+
mount -t glusterfs <nom_du_serveur_local>:/ctdblock /ctdblock
 
Ajouter ce montage à /etc/fstab #( "x-systemd.automount" obligatoire ! Systemd a du mal à lancer correctement la chaîne réseau-fstab-glusterfs-ctdb. CTDB démarre trop vite (avant que fstab ait monté /ctdblock. Cette option force le montage lorsque Gluster est prêt et que CTDB ré-essaie d'accéder au partage pendant son lancement)
 
Ajouter ce montage à /etc/fstab #( "x-systemd.automount" obligatoire ! Systemd a du mal à lancer correctement la chaîne réseau-fstab-glusterfs-ctdb. CTDB démarre trop vite (avant que fstab ait monté /ctdblock. Cette option force le montage lorsque Gluster est prêt et que CTDB ré-essaie d'accéder au partage pendant son lancement)
<nom_du_serveur_local>:/ctdblock /ctdblock glusterfs defaults,x-systemd.automount 0 0
+
<nom_du_serveur_local>:/ctdblock /ctdblock glusterfs defaults,x-systemd.automount 0 0
vi /etc/samba/smb.conf # sous [global], ajouter :
+
 
clustering = yes
+
 
idmap backend = tdb2
+
vi /etc/samba/smb.conf
private dir = /ctdblock/
+
sous [global], ajouter :
 +
clustering = yes
 +
idmap backend = tdb2
 +
private dir = /ctdblock/
  
 
Les fichiers de config CTDB sont les mêmes sur tous les postes. On les crée sur le volume partagé (ctdblock) et on fera des liens vers /etc
 
Les fichiers de config CTDB sont les mêmes sur tous les postes. On les crée sur le volume partagé (ctdblock) et on fera des liens vers /etc
vi /ctdblock/ctdb
+
vi /ctdblock/ctdb
CTDB_RECOVERY_LOCK=/ctdblock/.CTDB-lockfile
+
modifier :
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
+
CTDB_RECOVERY_LOCK=/ctdblock/.CTDB-lockfile
CTDB_MANAGES_SAMBA=yes
+
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_NODES=/etc/ctdb/nodes
+
CTDB_MANAGES_SAMBA=yes
 +
CTDB_NODES=/etc/ctdb/nodes
  
vi /ctdblock/public_addresses
+
vi /ctdblock/public_addresses
 
192.168.0.2/24 eth1
 
192.168.0.2/24 eth1
  
vi /ctdblock/nodes
+
vi /ctdblock/nodes
 
192.168.0.3
 
192.168.0.3
 
192.168.0.4
 
192.168.0.4
  
ln -s /ctdblock/ctdb /etc/sysconfig/ctdb
+
ln -s /ctdblock/ctdb /etc/sysconfig/ctdb
ln -s /ctdblock/public_addresses /etc/ctdb/public_addresses
+
ln -s /ctdblock/public_addresses /etc/ctdb/public_addresses
ln -s /ctdblock/nodes /etc/ctdb/nodes
+
ln -s /ctdblock/nodes /etc/ctdb/nodes
  
Lancer stdb sur les 2 noeuds
+
Lancer ctdb sur les 2 noeuds
systemctl enable ctdb
+
systemctl enable ctdb
systemctl start ctdb
+
systemctl start ctdb
  
 
Les montages NFS des clients peuvent alors être réalisés sur l'ip partagée 192.168.0.2
 
Les montages NFS des clients peuvent alors être réalisés sur l'ip partagée 192.168.0.2
  
 
Pour que CTDB se lance au boot, il faut que le réseau ET Gluterfs soit lancé. Le script systemd nécessite un ajustement :
 
Pour que CTDB se lance au boot, il faut que le réseau ET Gluterfs soit lancé. Le script systemd nécessite un ajustement :
vi /etc/systemd/system/multi-user.target.wants/ctdb.service
+
vi /etc/systemd/system/multi-user.target.wants/ctdb.service
 
modifier
 
modifier
 
  After=network.target
 
  After=network.target
 
par
 
par
 
  After=network.target glusterd.service
 
  After=network.target glusterd.service
 
Client : mount -t nfs -o _netdev,noatime,vers=3,direct-io-mode=disabled SERVER:/VOL_NAME /MOUNT_POINT
 
  
 
= Tips =
 
= Tips =
Ligne 204 : Ligne 189 :
 
Deduplication feature requires up to 5 GB RAM per Terrabyte Storage Space, so if you cannot afford this amount of exclusive RAM disable dedup by entering:
 
Deduplication feature requires up to 5 GB RAM per Terrabyte Storage Space, so if you cannot afford this amount of exclusive RAM disable dedup by entering:
 
  zfs set dedup=off storage
 
  zfs set dedup=off storage
 +
 +
 +
= Problèmes possibles =
 +
If you encounter issues or problems:
 +
-------------------------------------------
 +
Issue: if you get the error...
 +
# zpool list
 +
Failed to load ZFS module stack.
 +
Load the module manually by running 'insmod /zfs.ko' as root.
 +
or
 +
dkms install -m spl -v 0.6.2
 +
Error! echo
 +
Your kernel headers for kernel 2.6.32-431.el6.x86_64 cannot be found at /lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source.
 +
 +
Solution:
 +
1) Check to see if you have the kernels headers for your linux kernel
 +
2) Check to make sure,
 +
/lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source
 +
Properly linked or symlinked :
 +
ln -s /usr/src/kernels/3.10.23-11.el6.centos.alt.x86_64/  3.10.23-xxxx-grs-ipv6-64/build
 +
3) Check /usr/src/kernels to see if build and source above are pointing to the right place or a place. You may need to create a symlink.
 +
Example: 2.6.32-431.el6.x86_64 -> ./2.6.32-431.xxxx.el6.x86_64
 +
4) If you still get the error.
 +
Rebuild the modules.
 +
# dkms remove -m zfs -v 0.6.0.90 --all
 +
# dkms remove -m spl -v 0.6.0.90 --all
 +
# dkms add -m spl -v 0.6.0.90
 +
# dkms add -m zfs -v 0.6.0.90
 +
# dkms install -m spl -v 0.6.0.90
 +
# dkms install -m zfs -v 0.6.0.90

Version actuelle datée du 24 novembre 2015 à 17:37

Installation

Sur chaque serveur :

install centos minimale
yum -y install wget screen bash-completion
yum -y update

Si install à partir de l'iso CentOS6 :

service iptables stop
chkconfig iptables off
setenforce 0
vi /etc/sysconfig/selinux
 SELINUX=disabled

si pas de DNS, vi /etc/hosts, déclarer les 2 serveurs et leurs IPs.

ZFS

Le noyau doit accepter les modules (problème rencontré avec le noyau customizé d'OVH, qu'on se demande bien de quoi ils se mêlent).

Sur Centos7 :

yum localinstall --nogpgcheck http://epel.mirrors.ovh.net/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

ou

yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

DESACTIVER EPEL PAR DEFAUT (enabled=0 dans le fichier epel.repo)

yum localinstall http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
yum install zfs --enablerepo=epel

GlusterFs

Le dépôt EPEL a déjà été installé pour ZFS.

wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
yum install glusterfs glusterfs-fuse glusterfs-server --enablerepo=epel

Configuration

ZFS

Créer les partitions pour ZFS:

# parted /dev/sda 

vérifier l'espace libre

(parted) print free

Si pas encore de table de partition, créer une MSDOS (petits disques) ou GPT (disques > 2To)

mklabel gpt

créer une partition primaire sur disque entier ou sur l'espace libre. Ici on crée une partition 2 sur l'espace libre de sda.

(parted) mkpart primary
type = ext2

début = indiquer la fin de la partition précédente ou, pour un disque complet, "2048s" (= laisser les 2048 premiers secteurs du disque pour éviter le message "Warning: The resulting partition is not properly aligned for best performance.")

fin = fin de l'espace libre (ou simplement "100%")

changer le type en LVM (ci-dessous "3" correspond au n° de partition)

(parted) set 2 lvm on
(parted) quit

Vérifier que ZFS est installé et fonctionne

zfs list

Créer le(s) pool(s) :

zpool create -f -o ashift=12 zpool01 /dev/sda2

Le pool est monté automatiquement. On peut utiliser directement le pool comme n'importe quel FS. Mais on peut aussi créer des "filesystems" dans ces pools, dont l'intérêt est de gérer des quotas par filesystem, et de surtout pouvoir prendre les snapshots indépendamment.

zfs create zpool01/home
zfs set atime=off zpool01/home
zfs set xattr=sa zpool01/home
zfs set exec=off zpool01/home
zfs set sync=disabled zpool01/home

Important quand les volumes seront utilisés avec Gluster et NFS :

zfs set acltype=posixacl zpool01/home

GlusterFS

systemctl enable glusterd
systemctl start glusterd

Sur server1

gluster peer probe server2
gluster peer status # sur chaque machine doit indiqué l'autre connectée
gluster volume create home01 replica 2 server1:/zpool01/home/brick server2:/zpool01/home/brick
gluster volume start home01

idem pour d'éventuels autres volumes. On ajoute aussi un volume dédié aux locks CTDB ( voir NFS HA) sur zpool01/ctdblock

gluster volume create ctdblock replica 2 server1:/zpool01/ctdblock server2:/zpool01/ctdblock
gluster volume start ctdblock

Pour tous les volumes :

gluster volume set home01 performance.cache-size 512MB
gluster volume set home01 performance.io-thread-count 32

Voir les informations :

gluster volume info
gluster volume status

GlusterFS embarque son propre serveur NFS, il faut donc désactiver celui du système.

systemctl disable nfs.target
systemctl enable rpcbind.service
  1. BUG1 : le service rpcbind semble ne s'enregistre correctement avec systemctl. Il faut forcer :
ln -s '/usr/lib/systemd/system/rpcbind.service' '/etc/systemd/system/multi-user.target.wants/rpcbind.service'
  1. BUG2 : et en plus, éditer le service et enlever le "-w" de l'option ExecStart
vi /etc/systemd/system/multi-user.target.wants/rpcbind.service
  ExecStart=/sbin/rpcbind ${RPCBIND_ARGS}


systemctl start rpcbind.service
systemctl restart glusterd

"gluster volume status" doit alors indiquer que les serveur NFS sont online sur les 2 noeuds.

NOTE : en cas d'erreur I/O à la lecture/écriture lors du premier montage en NFS, désactiver et réactiver les acls :

gluster volume set home01 nfs.acl off
gluster volume set home01 nfs.acl on

CLIENT GLUSTER NATIF

yum install fuse fuse-libs glusterfs-fuse
modprobe fuse
mkdir /home01
mount -t glusterfs server1:/home01 /home01

CLIENT NFS

mount -t nfs -o _netdev,noatime,vers=3,direct-io-mode=disabled SERVER:/VOL_NAME /MOUNT_POINT

Benchs

TODO.

Mais les premières constatations montrent que NFS est 2 fois plus rapide que fuse.glusterfs !

NFS HA - CTDB

On utilise CTDB pour partager une adresse IP qui peut basculer d'un serveur à l'autre en cas de panne. Les clients, à part un léger timeout au moment de la bascule, restent connectés. Utile uniquement pour NFS et CIFS.

yum install ctdb samba
systemctl disable smb # Samba sera lancé par ctdb

on monte le volume Gluster dédié aux verrous CTDB en local sur les serveurs avec le client Gluster natif (pas de problème de performance avec FUSE ici, ce e sont que des petits fichiers de config et de verrous)

mkdir /ctdblock
mount -t glusterfs <nom_du_serveur_local>:/ctdblock /ctdblock

Ajouter ce montage à /etc/fstab #( "x-systemd.automount" obligatoire ! Systemd a du mal à lancer correctement la chaîne réseau-fstab-glusterfs-ctdb. CTDB démarre trop vite (avant que fstab ait monté /ctdblock. Cette option force le montage lorsque Gluster est prêt et que CTDB ré-essaie d'accéder au partage pendant son lancement)

<nom_du_serveur_local>:/ctdblock /ctdblock glusterfs defaults,x-systemd.automount 0 0


vi /etc/samba/smb.conf

sous [global], ajouter :

clustering = yes
idmap backend = tdb2
private dir = /ctdblock/

Les fichiers de config CTDB sont les mêmes sur tous les postes. On les crée sur le volume partagé (ctdblock) et on fera des liens vers /etc

vi /ctdblock/ctdb

modifier :

CTDB_RECOVERY_LOCK=/ctdblock/.CTDB-lockfile
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
CTDB_NODES=/etc/ctdb/nodes
vi /ctdblock/public_addresses

192.168.0.2/24 eth1

vi /ctdblock/nodes

192.168.0.3 192.168.0.4

ln -s /ctdblock/ctdb /etc/sysconfig/ctdb
ln -s /ctdblock/public_addresses /etc/ctdb/public_addresses
ln -s /ctdblock/nodes /etc/ctdb/nodes

Lancer ctdb sur les 2 noeuds

systemctl enable ctdb
systemctl start ctdb

Les montages NFS des clients peuvent alors être réalisés sur l'ip partagée 192.168.0.2

Pour que CTDB se lance au boot, il faut que le réseau ET Gluterfs soit lancé. Le script systemd nécessite un ajustement :

vi /etc/systemd/system/multi-user.target.wants/ctdb.service

modifier

After=network.target

par

After=network.target glusterd.service

Tips

ZFS TUNNING - some possible tunings:

zfs set atime=off [volname]
zfs set xattr=sa [volname]
zfs set exec=off [volname]
zfs set sync=disabled [volname]

Others to test :

zfs set compression=on storage
zfs set primarycache=all storage
zfs set checksum=off storage

Deduplication feature requires up to 5 GB RAM per Terrabyte Storage Space, so if you cannot afford this amount of exclusive RAM disable dedup by entering:

zfs set dedup=off storage


Problèmes possibles

If you encounter issues or problems:


Issue: if you get the error...

  1. zpool list

Failed to load ZFS module stack. Load the module manually by running 'insmod /zfs.ko' as root. or dkms install -m spl -v 0.6.2 Error! echo Your kernel headers for kernel 2.6.32-431.el6.x86_64 cannot be found at /lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source.

Solution: 1) Check to see if you have the kernels headers for your linux kernel 2) Check to make sure, /lib/modules/2.6.32-431.el6.x86_64/build or /lib/modules/2.6.32-431.el6.x86_64/source Properly linked or symlinked : ln -s /usr/src/kernels/3.10.23-11.el6.centos.alt.x86_64/ 3.10.23-xxxx-grs-ipv6-64/build 3) Check /usr/src/kernels to see if build and source above are pointing to the right place or a place. You may need to create a symlink. Example: 2.6.32-431.el6.x86_64 -> ./2.6.32-431.xxxx.el6.x86_64 4) If you still get the error. Rebuild the modules.

  1. dkms remove -m zfs -v 0.6.0.90 --all
  2. dkms remove -m spl -v 0.6.0.90 --all
  3. dkms add -m spl -v 0.6.0.90
  4. dkms add -m zfs -v 0.6.0.90
  5. dkms install -m spl -v 0.6.0.90
  6. dkms install -m zfs -v 0.6.0.90