Installation et Configuration d’un DRBD croisé sur Xenserver

Installer DRBD

Export du proxy

export https_proxy=http://proxy:3128
export http_proxy=http://proxy:3128

Récupérer le paquet DRBD depuis notre site, L’installer et activer le module.

cd /root
wget http://srvinstallation.tranquil.it/logiciels/drbd/drbd-utils-8.4.3-2.x86_64.rpm
rpm -i drbd-utils-8.4.3-2.x86_64.rpm
modprobe drbd
#systemctl enable drbd #possible uniquement à partir de Xenserver 7

Indication

le module drbd est natif à partir de xenserver 7.0

Reconfigurer les interfaces réseaux

Nous utiliserons eth1 sur chaque Xen pour la réplication DRBD.

Note

Ces interfaces devront être seulement utilisées pour le trafic DRBD, la couche Xen ne la gère pas.

sur l’un des Xenserver :

xe pif-list device=eth1

Un uuid est retourné pour chaque eth1 des 2 Xenservers

uuid ( RO)                  : 082915b1-af96-74cd-f955-2517d3f794b9
                device ( RO): eth1
    currently-attached ( RO): true
                  VLAN ( RO): -1
          network-uuid ( RO): c3c23dfe-1a7a-d121-adc0-ca4046917607


uuid ( RO)                  : 67077c00-1a56-799d-13d3-a067a6fb3cdb
                device ( RO): eth1
    currently-attached ( RO): true
                  VLAN ( RO): -1
          network-uuid ( RO): c3c23dfe-1a7a-d121-adc0-ca4046917607

Il faut supprimer les définitions de ces PIF et le NETWORK afin que ce ne soit pas la couche Xen qui se charge de ces interfaces.

xe pif-unplug uuid=082915b1-af96-74cd-f955-2517d3f794b9
xe pif-unplug uuid=67077c00-1a56-799d-13d3-a067a6fb3cdb
xe pif-forget  uuid=082915b1-af96-74cd-f955-2517d3f794b9
xe pif-forget  uuid=67077c00-1a56-799d-13d3-a067a6fb3cdb
xe network-destroy uuid=c3c23dfe-1a7a-d121-adc0-ca4046917607

À faire sur srvxen1

vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
XENMANAGED=no
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
MTU=9000

Activer l’interface réseau

ifup eth1

Relancer xapi pour vérifier le tout

service xapi restart

À faire sur srvxen2

vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
XENMANAGED=no
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.2
NETMASK=255.255.255.0
MTU=9000

Activer l’interface réseau

ifup eth1

Relancer xapi pour vérifier le tout

service xapi restart

Configurer DRBD

Note

À faire sur les deux serveurs

Partie LVM

Configurer les filtres

Modifier les filtres LVM dans /etc/lvm/lvm.conf et /etc/lvm/master/lvm.conf pour les version 7.0.

Commenter la ligne

filter = [ "r|/dev/xvd.|", "r|/dev/VG_Xen.*/*|"]

Lorsque vous avez un Raid software et que le disque logique se traduit par /dev/mdX, remplacer par

filter = ["a|/dev/drbd.*|","a|/dev/md.*|","r|.*|"]

Autrement, remplacer /dev/md.* par la partition qui possède les Volumes Group ou Logical Volume (VG et LV)

Créer la partition LVM

pvcreate /dev/md0
vgcreate xenserver /dev/md0

Avant de créer les LVM, il faut prendre en compte que le volume groupe ne fait pas 4 To:

La commande

vgs

affiche

xenserver                                         1   0   0 wz--n- 3,64T 3,64T

créer les volumes LVM en conséquence

lvcreate -n  drbd1 -L 1,81T xenserver
lvcreate -n  drbd2 -L 1,81T xenserver

Partie iptables

Modifier le pare-feu :file:` vi /etc/sysconfig/iptables`

#drbd
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7790 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7791 -j ACCEPT

Puis redémarrer iptables

service iptables.service restart

Partie DRBD

Créer un fichier /etc/drbd.d/drbd1.res

resource drbd1 {
    protocol B;

    on srvxen1.test.lan {
         device /dev/drbd1;
         disk /dev/xenserver/drbd1;
         address 10.0.0.1:7790;
         meta-disk internal;
    }
    on srvxen2.test.lan {
         device /dev/drbd1;
         disk /dev/xenserver/drbd1;
         address 10.0.0.2:7790;
         meta-disk internal;
    }
}

Créer un fichier /etc/drbd.d/drbd2.res

resource drbd2 {
    protocol B;


    on srvxen1.test.lan  {
         device /dev/drbd2;
         disk /dev/xenserver/drbd2;
         address 10.0.0.1:7791;
         meta-disk internal;
    }
    on srvxen2.test.lan  {
         device /dev/drbd2;
         disk /dev/xenserver/drbd2;
         address 10.0.0.2:7791;
         meta-disk internal;
    }
}

Modifier le fichier /etc/drbd.d/global_common.conf

global {
        usage-count no;
}

common {
    disk{
            no-disk-barrier;
            no-disk-flushes;
                resync-rate 120M;
            al-extents 3389;
    }
    startup {
         degr-wfc-timeout 15;
    }
    net {
        sndbuf-size 0;
       no-tcp-cork;
    max-buffers 80k;
    max-epoch-size 20000;
    unplug-watermark 16;
    }
}

Monter le DRBD et lancer les synchros

Attention

À ne faire qu’au premier lancement des DRBD !!!

Sur srvxen1

Créer le bloc drbd1

drbdadm create-md drbd1
drbdadm up drbd1
drbdadm -- --overwrite-data-of-peer primary drbd1

Attention

Ne lancer la commande ci-dessus que sur srvxen1, la commande --overwrite-data-of-peer n’est qu’à faire lors de la première fois ou en situation de split brain.

Créer le bloc drbd2

drbdadm create-md drbd2
drbdadm up drbd2

Sur srvxen2

Créer le bloc drbd2

drbdadm create-md drbd2
drbdadm up drbd2
drbdadm -- --overwrite-data-of-peer primary drbd2

Attention

Ne lancer la commande ci-dessus que sur srvxen2, la commande --overwrite-data-of-peer n’est qu’à faire lors de la première fois ou en situation de split brain.

Créer le bloc drbd1

drbdadm create-md drbd1
drbdadm up drbd1

La commande drbd-overview montre la synchro en cours.

Known issue

Erreur de DRBD

Si lors du drbdadm up ou create vous rencontrez l’erreur suivante : open(/dev/xenserver/drbd2) failed: No such file or directory assurez-vous que les volume group (vg) soient bien up. Pour ce faire

vgchange -ay

Après un reboot, le drbd ne remonte pas et le sr non plus

Vérifier que l’interface réseau du drbd est bien up

ifup eth1

Réactiver les vg

vgchange -ay

Enfin, démarrer le drbd

systemctl start drbd

Vous pouvez lancer dans le xencenter sur le sr un « repair » ou bien en ligne de commande

xe pbd-plug uuid=$(xe pbd-list sr-name-label=NOM_SR --minimal)

Dans les version xen 6.5, les raid logiciels ne sont pas correctement renseignés dans le kernel

modprobe raid5 #mettre la bonne version

Assembler de force les disques. Attention à bien les connaître avant de lancer cette commande

mdadm --assemble --force /dev/md0 /dev/sd[abcd]1

Optimisation iscsi drbd et OS avec carte réseau 10GB

Attention

Ces configuration sont à adapter suivant votre matériel et système

Configuration drbd optimisée

Optimisation global pour drbd sur carte 10Gg

Modifier le fichier vi /etc/drbd.d/global_common.conf

global {
        usage-count no;
}

common {
      disk{
              md-flushes no;
                disk-barrier no;
              disk-flushes no;
              al-extents 3839;
              c-max-rate 4000M;
      }

   syncer {
        rate 4000M;
      al-extents 3833;

    }
    startup {
         degr-wfc-timeout 15;
    }
    net {
        sndbuf-size 512k;
        no-tcp-cork;
      max-buffers 20000;
      max-epoch-size 20000;
        unplug-watermark 16;

    }
}

Optimisation disque et réseaux a mettre dans le fichier rc.local

Optimisation disque raid type hdd/sas pour virtualisation Xenserver Dans le cas ci dessous sdb et sdc sont des volumes raid disques SAS

echo deadline >  /sys/block/sdb/queue/scheduler
echo 1500 > /sys/block/sdb/queue/iosched/write_expire
echo 0 > /sys/block/sdb/queue/iosched/front_merges
echo 150 > /sys/block/sdb/queue/iosched/read_expire
echo 1500 > /sys/block/sdb/queue/iosched/write_expire

echo deadline >  /sys/block/sdc/queue/scheduler
echo 1500 > /sys/block/sdc/queue/iosched/write_expire
echo 0 > /sys/block/sdc/queue/iosched/front_merges
echo 150 > /sys/block/sdc/queue/iosched/read_expire
echo 1500 > /sys/block/sdc/queue/iosched/write_expire

Optimisation disque raid type ssd pour virtualisation Xenserver Dans le cas ci dessous sdd est un volume raid disques ssd

echo "0" > /sys/block/sdd/queue/rotational
echo "0" > /sys/block/sdd/queue/add_random
echo "2" > /sys/block/sdd/queue/rq_affinity
echo "deadline" > /sys/block/sdd/queue/scheduler
echo "975" > /sys/block/sdd/queue/nr_requests
echo "975" > /sys/block/sdd/queue/read_ahead_kb
echo "975" > /sys/block/sdd/device/queue_depth
echo "150" > /sys/block/sdd/queue/iosched/read_expire
echo "0" > /sys/block/sdd/queue/iosched/front_merges
echo "1500" > /sys/block/sdd/queue/iosched/write_expire
blockdev --setra 16584 /dev/sdd

optimisation carte réseau 10Gb pour interface iscsi et drbd adapter ethX à l’interface de la carte réseaux 10Gb à faire sur la baie San et Xenserver ces paramètre sont a appliquer à chaque reboot

ifconfig eth4 txqueuelen 300000
ethtool -K ethX rx on
ethtool -K ethX tx on
ethtool -K ethX sg on
ethtool -K ethX tso on
ethtool -K ethX gso on
ethtool -K ethX gro off

modprobe tcp_cubic
sysctl -w net.ipv4.tcp_congestion_control=cubic
sysctl -w net.core.somaxconn = 1000
sysctl -w net.core.netdev_max_backlog = 300000
sysctl -w net.core.rmem_max = 16777216
sysctl -w net.core.wmem_max = 16777216
sysctl -w net.ipv4.tcp_max_syn_backlog = 8096
sysctl -w net.ipv4.tcp_slow_start_after_idle = 0
sysctl -w net.ipv4.tcp_tw_reuse = 1
sysctl -w net.ipv4.ip_local_port_range = 10240 65535
sysctl -w net.ipv4.tcp_rmem ="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem ="4096 65536 16777216"
sysctl -w sysctl -w net.ipv4.tcp_mtu_probing=1
sysctl -w net.ipv4.route.flush = 1
sysctl -w net.ipv4.tcp_timestamps=0
sysctl -w net.ipv4.tcp_fin_timeout=15
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_moderate_rcvbuf=1
sysctl -w vm.vfs_cache_pressure=50