Highly available NFS DRBD Heartbeat

Highly available NFS DRBD Heartbeat

nfs

ha

Construction d’un serveur Highly available NFS DRBD Heartbeat sur Centos 6

Pour ce travail utiliser une installation minimale de CentOS 6 / RHEL 6 sur deux serveurs. J’aime utiliser l’installation minimale parce que je pense que nous avons plus de contrôle sur ce qui est installé sur le système

J’aime utiliser l’installation minimale parce que je pense que nous avons plus de contrôle de ce qu’est installé sur le système et de cette façon nous gardons le système propre et aussi léger que possible. Redhat / CentOS 6 fournit par défaut NFSv4, Kernel 2.6.32 et le système de fichiers ext4, qui va stimuler les performances de votre serveur de fichiers.

 

Préparation des serveurs Highly available NFS

Après nous avons le système d’exploitation installé, nous allons désactiver SELinux, et iptables et obtenir CentOS / Redhat à jour. Nous pouvons activer iptables et selinux retourner mais pour l’instant nous désactivons pour rendre les choses plus faciles.

– Desactive selinux

# vi /etc/selinux/config

SELINUX=disabled

 

Eteignez iptable de votre systeme de demarage

# chkconfig iptables off

 

– Mise a jour systeme

# yum –y update

Maintenant, nous allons installer des paquets qui seront nécessaires pour l’installation et la configuration de DRBD.

 # yum install wget ntp

 

Nous devons faire en sorte que ntpd fonctionne toujours de garder les deux serveurs de temps synchronisés.

 

# chkconfig ntpd on

 

J’ai également toujours comme à gcc et mettre à disposition au cas où nous devons compiler tout code qui n’est pas disponible dans les paquets rpm.

 

# yum install gcc make

 

Mon éditeur de texte préféré est VIM dans lequel j’utilise tout au long de ce tutoriel (vi), vous pouvez utiliser tout autre que vous aimez.

 

# yum install vim-enhanced

 

# echo "alias vi='vim'" >> ~/.bashrc

 

 

Je suppose ici que nous avons mis en place le réseau et le nom d’hôte lors de l’installation du système d’exploitation. Si vous n’avez pas encore fait, c’est probablement le un bon moment.

 

Voici les fichiers que vous aurez besoin de modifier:

 

– Hostname / Gateway

/etc/sysconfig/network

 

– eth0 interface

/etc/sysconfig/network-scripts/ifcfg-eth0

 

– DNS resolution Serveurs

/etc/resolv.conf

 

 

Bon maintenant nous allons redémarrer les serveurs. Cela n’est nécessaire car nous avons désactivé SELinux et mis à jour le noyau, tous les autres services auraient pu être renouvelées sans un redémarrage du serveur.

 

# reboot

 

 

drbdDRDB 8.3 and RHEL / CentOS 6

 

Comme vous le savez probablement RHEL 6 / CentOS 6 n’a pas DRBD sur tout du dépôt yum. Vous avez besoin d’un contrat de support avec RHEL pour obtenir DRBD (ils en partenariat avec LINBIT après il a été décidé de ne pas soutenir DRBD dans EL6 parce DRBD ne pas entrer dans le noyau principal jusqu’à 2.6.33 et 2.6.32 a EL6. Cependant, vous pouvez alternativement installer de paquets source ou rpm ou utiliser le référentiel yum ELRepo (http://elrepo.org).

 

 

  • Option 1 – RPM Packages
 # wget http://dl.atrpms.net/el6-`arch`/atrpms/stable/drbd-kmdl-`uname -r`-8.3.8.1-30.el6.`arch`.rpm

 

# wget http://dl.atrpms.net/el6-x86_64/atrpms/stable/drbd-8.3.8.1-30.el6.`arch`.rpm
# rpm –ivh drbd-kmdl-`uname -r`-8.3.8.1-30.el6.`arch`.rpm drbd-8.3.8.1-30.el6.`arch`.rpm
  • Option 2 – ELRepo
# rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm

 

# vi /etc/yum.repos.d/elrepo.repo

 

enabled=0

 

# yum --enablerepo=elrepo install drbd83-utils kmod-drbd83

 

 

Maintenant mettre en place notre dispositif de DRBD. Nous allons créer un LVM 40 Go pour être utilisé par DRBD.

Tout d’abord, vérifiez que sur les deux serveurs ntpd est en marche et que le temps est égal.

 

[root@serveur1~]# service ntpd status

ntpd (pid 1072) is running…

[root@serveur1~]# date

Mon Aug 15 10:48:14 PDT 2014

 

 [root@serveur2 ~]# service ntpd status

ntpd (pid 1088) is running…

[root@seurver2 ~]# date

Mon Aug 15 10:48:14 PDT 2014

 

Créez le volume logique sur les deux serveurs:

 

[root@serveur1 ~]# lvcreate -L 40GB -n drbd-main serveur1

[root@serveur2 ~]# lvcreate -L 40GB -n drbd-main serveur2

 

~ Notez que chacun de mes serveurs ont différents groupes de volumes (de vg_c6server1 et vg_c6server2). Si vous copiez et passé que vous devrez vous assurer que vous ne les modifiez pas à ce que vous avez nommé.

 

!!!!! TRES IMPORTANT – NE PAS formater et monter le volume !!!!!

 

 

Enregistrez le fichier de configuration globale d’origine sur les deux serveurs :

 

mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.sample

 

 

et créer un nouveau fichier:

 

# vi /etc/drbd.d/global_common.conf

 

global { usage-count no; }

common {

syncer { rate 10M; }

}

 

Créer un nouveau fichier de ressources que j’ai appelé «principal», sur les deux serveurs, ils doivent être égaux:

 

# vi /etc/drbd.d/main.res
 resource main {
 protocol C;
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
on serveur1 {
device /dev/drbd0;
disk /dev/vg_serveur1/drbd-main;
meta-disk internal;
address 10.0.0.1:7788;
}
on serveur2 {
device /dev/drbd0;
disk /dev/vg_serveur2/drbd-main;
meta-disk internal;
address 10.0.0.2:7788;
}
}
Maintenant, nous devons créer les métadonnées sur les deux serveurs:

 

[root@serveur1]# drbdadm create-md main
[root@serveur2]# drbdadm create-md main

Et nous pouvons maintenant commencer DRBD sur les deux serveurs en même temps:

 [root@serveur1 drbd.d]# service drbd start

À partir des ressources DRBD: [ d(main) s(main) n(main) ].

[root@serveur2 drbd.d]# service drbd start

 

Vous avez deux façons que je connais pour vérifier que DRBD fonctionne correctement:

 

# service drbd status
# cat /proc/drbd

version: 8.3.11 (api:88/proto:86-96)

GIT-hash: 0de839cee13a4160eed6037c4bddd066645e23c5 build by dag@Build64R6, 2011-08-08 08:54:05

0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—–

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:41941724

 

 

 

Comme vous pouvez le voir, ils disent qu’il est connecté mais ro est sens secondaire / secondaire que nous n’avons pas dit que le système qui est le serveur primaire (maître) qui contient le bloc à répliquer. Une fois que nous disons le système qui est le maître, il va commencer la synchronisation.

 

 

Nous dirons que DRBD serveur1 est le serveur primaire:

Sur le serveur1:

 # drbdsetup /dev/drbd0 primary –o
 # cat /proc/drbd

version: 8.3.11 (api:88/proto:86-96)

GIT-hash: 0de839cee13a4160eed6037c4bddd066645e23c5 build by dag@Build64R6, 2011-08-08 08:54:05

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r—–

ns:503808 nr:0 dw:0 dr:504472 al:0 bm:30 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:41437916

[>………………..] sync’ed: 1.3% (40464/40956)M

finish: 1:06:40 speed: 10,340 (10,280) K/sec

La synchronisation a commencé et il faudra un peu de temps pour être achevée. S’il vous plaît attendre jusqu’à ce qu’il se fait et de passer à l’étape suivante.

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–

ns:41941724 nr:0 dw:0 dr:41942388 al:0 bm:2560 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 

Maintenant que nos serveurs sont synchronisés, nous pouvons créer notre forme /dev/drbd0 avec notre système de fichier préféré. Dans mon cas, je vais utiliser ext4.

 

Surn serveur1:

 # mkfs.ext4 /dev/drbd0

 

Configuration exportations NFS pour l’intégration Heartbeat

 

Bon, maintenant que nous avons notre DRBD en marche. L’étape suivante consiste à mettre en place l’exportation NFS et ensuite installer heartbeat afin que nous puissions avoir un basculement automatique sur le système.

Highly available NFS permet de préparer notre premier NFS:

Sur les deux serveurs:

# mkdir /drbd
# vi /etc/exports

 

/drbd/main *(rw)

Sur serveur1 seleument :

# mount /dev/drbd0 /drbd
# mkdir /drbd/main

Quelques informations sur votre montages NFS dans /var/lib/nfs et depuis ces informations devra être reflété nous aurons à les déplacer vers le dispositif de DRBD:

# mv /var/lib/nfs/ /drbd/

cela pourrait générer une erreur telle que: D dispositif:

mv: cannot remove `/var/lib/nfs/rpc_pipefs/cache’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/nfsd4_cb’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/statd’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/portmap’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/nfs’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/mount’: Operation not permitted

mv: cannot remove `/var/lib/nfs/rpc_pipefs/lockd’: Operation not permitted

 

mais ne vous inquiétez pas à ce sujet, car il va créer les répertoires de toute façon.

# mv /var/lib/nfs /var/lib/nfsBackup

Puis faire un lien symbolique /var/lib/nfs à notre répertoire / drbd:

# ln -s /drbd/nfs/ /var/lib/nfs
# umount /drbd

 

On serveur2 seleument:

# mv /var/lib/nfs/ /var/lib/nfsBackup
# ln -s /drbd/nfs/ /var/lib/nfs

Le lien symbolique sera brisé depuis le / dev / drbd0 n’est pas monté. Cette affaire va travailler dans de NFS fail-over.

 

Heartbeat installation and configuration

 

Nous allons installer Heartbeat du référentiel EPEL:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm# vi /etc/yum.repos.d/epel.repo

enabled=0

# yum --enablerepo=epel install heartbeat

 

Créez le fichier suivant exacte sur ​​les serveurs :

# vi /etc/ha.d/ha.cf
keepalive 2
deadtime 30
bcast eth0
node serveur1 c6s

# même chose ici pour les noms de noeud utiliser le même nom d’hôte de vos hôtes … ce doit être ce que les réponses -n uname.

 La prochaine Consigne est de créer le fichier de ressources pour le battement de coeur sur les deux serveurs avec la même teneur exacte de nouveau:

# vi /etc/ha.d/haresources

serveur1 IPaddr::10.0.0.100/24/eth0 drbddisk::main Filesystem::/dev/drbd0::/drbd::ext4 nfslock nfs

# Premier mot est le nom d’hôte du serveur primaire, le 10.0.0.100 IP est celle que j’ai choisis pour être l’adresse IP virtuelle qui doit être déplacé à l’esclave en cas de panne.

La dernière chose est de créer le fichier d’authentification sur les serveurs de nouveau avec le même contenu:

# vi /etc/ha.d/authkeys
auth 3
3 md5 mypassword123

Ce fichier de mot de passe ne doit être lisible que par l’utilisateur root:

# chmod 600 /etc/ha.d/authkeys

Ok, maintenant nous devons être prêts à démarrer… Disons tester !!

Sur les deux serveurs démarrer le service  Heartbeat :

# service heartbeat start

sur serveur1 :

[root@serveur1 ~]# ifconfig

eth0     Link encap:Ethernet HWaddr 08:00:27:95:AB:B1
         inet addr:10.0.0.1 Bcast:10.0.4.255 Mask:255.255.255.0
         inet6 addr: fe80::a00:27ff:fe95:abb1/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:2189638 errors:0 dropped:0 overruns:0 frame:0
         TX packets:30442386 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:188528923 (179.7 MiB) TX bytes:45853044392 (42.7 GiB)
eth0:0   Link encap:Ethernet HWaddr 08:00:27:95:AB:B1
         inet addr:10.0.0.100 Bcast:10.0.4.255 Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo       Link encap:Local Loopback
         inet addr:127.0.0.1 Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING MTU:16436 Metric:1
         RX packets:305 errors:0 dropped:0 overruns:0 frame:0
         TX packets:305 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:35012 (34.1 KiB) TX bytes:35012 (34.1 KiB)

 

[root@serveur1 ~]# df -h

 

Système de fichiers Taille Util Libre Util% Monté sur

/dev/mapper/vg_c6server1-lv_root
                     6.6G 905M 5.4G 15% /
tmpfs                 499M     0 499M   0% /dev/shm
/dev/sda1             485M   60M 401M 13% /boot
sunrpc                40G 176M   38G   1% /var/lib/nfs/rpc_pipefs
/dev/drbd0             40G 176M   38G   1% /drbd

Permet de tester la DRBD / NFS basculement maintenant

Vous pouvez arrêt serveur1 … pas un problème ou tout simplement arrêter le service battement de coeur:

# service heartbeat stop

On serveur2:

[root@serveur2 ~]# ifconfig
eth0     Link encap:Ethernet HWaddr 08:00:27:8F:3B:50
         inet addr:10.0.0.2 Bcast:10.0.4.255 Mask:255.255.255.0
         inet6 addr: fe80::a00:27ff:fe8f:3b50/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:30447253 errors:0 dropped:0 overruns:0 frame:0
         TX packets:2138369 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:45799991579 (42.6 GiB) TX bytes:173195698 (165.1 MiB)
eth0:0   Link encap:Ethernet HWaddr 08:00:27:8F:3B:50
         inet addr:10.0.0.100 Bcast:10.0.4.255 Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo       Link encap:Local Loopback
         inet addr:127.0.0.1 Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING MTU:16436 Metric:1
         RX packets:208 errors:0 dropped:0 overruns:0 frame:0
         TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:23480 (22.9 KiB) TX bytes:23480 (22.9 KiB)