Outils personnels

GlusterFS+ZFS sur CentOS6/7

De wikiGite

Révision datée du 28 août 2015 à 11:05 par Frank (discussion | contributions) (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... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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.

Configuration

ZFS

Créer les partitions pour le 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 3ème partition primaire sur le reste

(parted) mkpart primary

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%") changer le type en LVM (ci-dessous "3" correspond au n° de partition)

(parted) set 3 lvm on
(parted) quit

Installer ZFS. Le noyau doit accepter les modules (cf prob noyau custom d'ovh). 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

zfs list

!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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

!!!!!!!!!!!!!!!!!!!!!!!!!!

zpool create -f -o ashift=12 zpool01 /dev/sda5 zpool create -f -o ashift=12 zpool02 /dev/sdb1 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 atime=off zpool01 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 : zfs set acltype=posixacl zpool01 zfs set acltype=posixacl zpool02

GlusterFS

Le dépôt EPEL est déjà installé. 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 gluster peer probe server2 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 start home01

idem pour d'autres volumes. On ajoute aussi un volume dédié aux locks CTDB ( voir NFS HA) sur zpool0/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

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

install fuse fuse-libs modprobe fuse yum install glusterfs-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

Utile uniquement pour NFS et CIFS yum install ctdb samba systemctl disable smb # Samba sera ancé par ctdb

on monte le volume Gluster dédié aux verrous CTDB en local sur les serveurs avec le client Gluster natif 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 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 stdb 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

Client : 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