GlusterFS+ZFS sur CentOS6/7
De wikiGite
Sommaire
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
- 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'
- 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
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
Su les client, on montera les partages par:
mount -t nfs -o _netdev,noatime,vers=3,direct-io-mode=disabled SERVER:/VOL_NAME /MOUNT_POINT
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...
- 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