DRBD sous linux

From Tuxunix
Jump to: navigation, search

DRBD MySQL V0.7 (Debian Etch)

  • Ce système permet de mettre en place un cluster de type Actif - passif MySQL sans utiliser les fonctions de clustering intégrées à MySQL.

Ce système utilise un MySQL sans configuration particulière et deux technologies particulières :

- HeartBeat (permettant de gérer le passage actif à passif et inversement)

- DRBD qui permet de créer un système de fichier local répliqué sur une autre machine (RAID 1 sur TCP)

Note : la version DRBD utilisée est la 0.7. La version suivante (0.8) fonctionne différemment et possède d’autres fonctionnalités.

Pour des raisons de performance, la réplication des données se fait via un câble croisé sur des ports Gigabit.

Ce système permet de faire fonctionner un seul des deux serveurs à un instant t donné. En ordre de marche ‘normal‘ le maître est fonctionnel et le secondaire est allumé mais le système de fichier est démonté et le service MySQL est coupé.

Guide d’installation

L’installation se décompose en 4 phases : - Installation de DRBD

- Compilation du module kernel

- Installation du module et des outils

- Création des partitions

- Configuration

- Initialisation

- Installation et configuration de HeartBeat

- Installation de MySQL

- Test

Dans la procédure suivante, nous utiliserons les noms suivants : - Serveur Maitre : primary_srv

- Serveur Esclave : secondary_srv

DRBD

DRBD n’est pas inclus dans les kernels par defaut. Cependant, nous pouvons compiler le support sans changer le kernel avec l’utilitaire module-assistant.

sur le serveur maître :

primary_srv:~# apt-get install module-assistant

Une fois installé :

primary_srv:~# m-a

Choisir successivement les menus UPDATE et PREPARE. Ceci permettra d’installer les dépendances de compilation.

Choisir l’Option SELECT et choisir dans la liste le module drbd0.7-module.

Sélectionner GET, BUILD et finalement INSTALL. Le dernier point vous déclanchera surement une erreur de dépendance sur le package drbd-utils. Ne vous inquiétez pas, Apt va vous redemander de confirmer cette dépendance.

Pour quittez, choisissez BACK , CANCEL puis QUIT.

Une fois sur le prompt :

echo "drbd" >> /etc/modules
/etc/init.d/module-init-tools start

Faites un dmesg , les dernières lignes devrait ressembler à

drbd: initialised. Version: 0.7.21 (api:79/proto:74) drbd: SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40 drbd: registered as block device major 147

A ce stade, DRBD est installé sur le serveur maitre.

Sur primary_srv, il faut ajouter les deux lignes suivantes au /etc/hosts

X.X.X.X     primary_srv.lan
X.X.X.X     secondary_srv.lan

Il faut modifier le fichier /etc/network/interfaces en conséquence.

auto eth2
iface eth2 inet static
       address X.X.X.X
       netmask 255.255.255.0


Sur le serveur secondary_srv , il faut de la même façon ajouter les deux lignes suivantes au /etc/hosts

X.X.X.X primary_srv.lan X.X.X.X secondary_srv.lan

Il faut modifier le fichier /etc/network/interfaces en conséquence.

auto eth2
iface eth2 inet static
       address X.X.X.X
       netmask 255.255.255.0

Recopions le module packagé par module-assistant pour le déployer sur le second serveur :

primary_srv:~# scp /usr/src/drbd0.7-module-2.6.18-4-*.deb  root@secondary_srv.lan:
root@secondary_srv.lan's password:
drbd0.7-module-2.6.18-4-amd64_0.7.21-4+2.6.18.dfsg.1-12etch2_amd64.deb 100%   73KB   72.6KB/s   00:00
primary_srv:~#

puis depuis le second serveur :

secondary_srv:~# apt-get install drbd0.7-utils
secondary_srv:~# dpkg -i drbd0.7-module-2.6.18-4-amd64_0.7.21-4+2.6.18.dfsg.1-12etch2_amd64.deb
secondary_srv:~# echo "drbd" >> /etc/modules
secondary_srv:~# /etc/init.d/module-init-tools start

un petit dmesg comme precedement permet de vérifier que tout est chargé

Attaquons la configuration du volume :

primary_srv:~# cat /proc/partitions
major minor  #blocks  name

  8     0  142737408 sda
  8     1  136897866 sda1
  8     2          1 sda2
  8     5    5831563 sda5
  8    16  142737408 sdb

Nous allons utliser /dev/sdb pour créer notre partition DRBD.

  • Attention, ici nous disposons d’une pile RAID dédiée, si les partitions sont sur le même disque le système, il ne faut surtout pas utiliser le micro script suivant !!!!!!!! Il faut faire le partitionnement à la main.

MET DANS LES PREREQUIS QU’IL FAUT UNE PILE DEDIEE PUIS MODIFIE CE MESSAGE POUR DIRE QU’IL FAUT IMPERATIVEMENT UNE PILE DEDIEE

Cette commande permet de créer une partition de la taille de tout le volume

primary_srv:~# echo "n
p
1


w" | fdisk /dev/sdb
primary_srv:~#

vérifions que la partition est bien créée

primary_srv:~# cat /proc/partitions
major minor  #blocks  name

  8     0  142737408 sda
  8     1  136897866 sda1
  8     2          1 sda2
  8     5    5831563 sda5
  8    16  142737408 sdb
  8    17  142729461 sdb1
primary_srv:~#

ensuite, nous devons créer une nouvelle configuration DRBD

primary_srv:~# > /etc/drbd.conf
primary_srv:~# vim /etc/drbd.conf

il faut coller la configuration suivante :

resource data {
       protocol     A;
       incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
       net {
               on-disconnect       reconnect;
       }
       syncer {
               rate        100M;
       }
       on primary_srv.lan {
               device      /dev/drbd0;
               disk        /dev/sdb1;
               address     X.X.X.X:7781;
               meta-disk  internal;
       }
       on secondary_srv.lan {
               device      /dev/drbd0;
               disk        /dev/sdb1;
               address     X.X.X.X:7781;
               meta-disk   internal;
       }
}

Pensez à vérifier les adresses IP et les devices (lignes address et disk)


Sur le serveur secondaire, reproduisons les mêmes opérations de création de partitions et de configuration.

Une fois deux serveurs identiques, il faut lancer les services drbd :

primary_srv:~# /etc/init.d/drbd start
secondary_srv:~# /etc/init.d/drbd start

Le premier lancé des deux va attendre le second.

Une fois les deux services lancer, vous devriez un contenu proche de celui qui est ci-dessous dans le fichier /proc/drbd

primary_srv:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40
0: cs:Connected st:Secondary/Secondary ld:Inconsistent
   ns:0 nr:0 dw:0 dr:0 al:0 bm:17408 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured
primary_srv:~#


secondary_srv:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40
0: cs:Connected st:Secondary/Secondary ld:Inconsistent
   ns:0 nr:0 dw:0 dr:0 al:0 bm:17408 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured
secondary_srv:~#

Les informations importantes sont en gras et en rouge :

Connected nous permet de dire que la connection réseau entre le deux daemon drbd est fonctionnelle Secondary/Secondary nous permet de dire que le système de fichier n’est pas encore ultilisable. De plus, il est Inconsistent.

NOTE : On ne peut utiliser qu’un système qui est en mode Primary.


Nous allons regler le problème en forcant la synchronisation depuis le maitre :

primary_srv:~# drbdsetup /dev/drbd0 primary --do-what-I-say

Une fois la commande passé, le fichier /proc/drbd doit ressembler à :

primary_srv:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40
0: cs:SyncSource st:Primary/Secondary ld:Consistent
   ns:573760 nr:0 dw:0 dr:581948 al:0 bm:17442 lo:1562 pe:0 ua:2047 ap:0
       [>...................] sync'ed:  0.5% (138695/139256)M
       finish: 1:48:05 speed: 21,856 (40,980) K/sec
1: cs:Unconfigured
primary_srv:~#

Une fois que la réplication est terminée et que le volume est consistant, passons primary_srv en maître et formatons le volume.

primary_srv:~# drbdadm primary all
primary_srv:~# mkfs.ext3 /dev/drbd0

Pour vérifier que tout est OK, il suffit de regarder les /proc/drbd sur les deux serveurs :

primary_srv:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40
0: cs:Connected st:Primary/Secondary ld:Consistent
   ns:64659700 nr:0 dw:0 dr:64659700 al:0 bm:3947 lo:0 pe:0 ua:0 ap:0
primary_srv:~#
secondary_srv:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@primary_srv, 2007-10-12 19:54:40
0: cs:Connected st:Secondary/Primary ld:Consistent
   ns:0 nr:64659700 dw:64659700 dr:0 al:0 bm:3947 lo:0 pe:0 ua:0 ap:0
secondary_srv:~#


Souvenez vous bien que l’on ne peux monter ou utiliser le /dev/drbd0 que sur le nœud qui à le statut primary !

Créons sur les deux serveurs les points de montage et éditons le /etc/fstab correspondants

primary_srv:~# mkdir /opt/drbd
secondary_srv:~# mkdir /opt/drbd

la ligne à ajouter dans les deux /etc/fstab

/dev/drbd0      /opt/drbd       ext3    defaults,noauto 0       0


Installation et configuration de HeartBeat

La procédure est à faire sur les deux serveurs de façon identique. Nous ne détaillerons que l’installation sur le premier serveur.

primary_srv:~# apt-get install heartbeat
primary_srv:~# echo "auth 1
1 crc" > /etc/ha.d/authkeys
primary_srv:~# chmod 600 /etc/ha.d/authkeys
primary_srv:~# echo "primary_srv drbddisk Filesystem::/dev/drbd0::/opt/drbd::ext3 mysql Delay::1::0 IPaddr::213.218.156.134/27" > /etc/ha.d/haresources

Pensez bien à vérifier les parties en rouge L’IP correspond à l’IP virtuelle publique qui sera utilisée par le service MySQL.

Éditons le fichier de configuration principal de HeartBeat

primary_srv:~# vim /etc/ha.d/ha.cf
bcast           eth2

debugfile       /var/log/ha-debug
logfile         /var/log/ha-log
logfacility     local0

keepalive       2
deadtime        10
warntime        6
initdead                60

udpport         694
node            primary_srv
node            secondary_srv
auto_failback   on

Une fois ces opérations répliquées sur les deux serveurs, nous pouvons installer MySQL.

Installation de MySQL

L’installation de MySQL ne présente pas de difficultés. Il faut cependant vérifier quelques points sans lesquels la procédure de marchera pas.

- le prochain UID système doit être le même sur les deux serveurs (UID système doit être > 100 mais inférieur à 1000) - L’ordre d’installation des MySQL sur les serveurs est important.

Sur le maître :

primary_srv:~#  apt-get install mysql-server
…
primary_srv:~#  /etc/init.d/mysql stop

puis commenter la ligne suivante dans /etc/my.cnf pour obtenir

#bind-address           = 127.0.0.1

DRBD MySQL V0.8 (Debian Lenny)

DRBD

Contrairement a la version 0.7, le module est disponible compilé pour les kernesl Debian. L’ancienne étape consistant à utiliser module-assistant n’est donc plus utile. Sur les deux serveurs :

primary_srv:~# apt-get install drbd8-modules-`uname -r` drbd8-utils

Une fois sur le prompt :

echo "drbd" >> /etc/modules
/etc/init.d/module-init-tools start


Faites un dmesg , les dernières lignes devrait ressembler à

[1181935.658069] drbd: initialised. Version: 8.0.14 (api:86/proto:86)
[1181935.658069] drbd: GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
[1181935.658069] drbd: registered as block device major 147
[1181935.658069] drbd: minor_table @ 0xffff81004e1bfb80

A ce stade, DRBD est installé sur le serveur maitre.

Ici, les deux IPs sont X.X.X.X pour primary_srv et X.X.X.X pour secondary_srv.

Sur primary_srv, il faut ajouter les deux lignes suivantes au /etc/hosts

X.X.X.X     primary_srv.lan
X.X.X.X     secondary_srv.lan

Il faut modifier le fichier /etc/network/interfaces en conséquence.

auto eth2
iface eth2 inet static
       address X.X.X.X
       netmask 255.255.255.252

Sur le serveur secondary_srv , il faut de la même façon ajouter les deux lignes suivantes au /etc/hosts

X.X.X.X     primary_srv.lan
X.X.X.X     secondary_srv.lan

Il faut modifier le fichier /etc/network/interfaces en conséquence.

auto eth2
iface eth2 inet static
       address X.X.X.X
       netmask 255.255.255.252

Attaquons la configuration du volume :

primary_srv:~# cat /proc/partitions
major minor  #blocks  name
  8     0  142737408 sda
  8     1  136897866 sda1
  8     2          1 sda2
  8     5    5831563 sda5
  8    16  142737408 sdb

Nous allons utliser /dev/sdb pour créer notre partition DRBD.

Attention, ici nous disposons d’une pile RAID dédiée, si les partitions sont sur le même disque que le système, il ne faut surtout pas utiliser le micro script suivant !!!!!!!! Il faut faire le partitionnement à la main.

Cette commande permet de créer une partition de la taille de tout le volume

primary_srv:~# echo "n
p
1


w" | fdisk /dev/sdb
primary_srv:~#

Vérifions que la partition est bien créée

primary_srv:~# cat /proc/partitions
major minor  #blocks  name

  8     0  142737408 sda
  8     1  136897866 sda1
  8     2          1 sda2
  8     5    5831563 sda5
  8    16  142737408 sdb
  8    17  142729461 sdb1
primary_srv:~#

Ensuite, nous devons créer une nouvelle configuration DRBD

primary_srv:~# > /etc/drbd.conf
primary_srv:~# vim /etc/drbd.conf

Il faut coller la configuration suivante :

# DRBD Basic Ouroboros configuration 
global {
       usage-count no;
}
common {
 syncer { rate 100M; }
}
resource r0 {
 protocol C;
 handlers {
   outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";
   split-brain "/usr/ouroboros/bin/ouroboros-drbd-nagios splitbrain";
 }
 startup {
   degr-wfc-timeout 120;    # 2 minutes.
 }
 disk {
   on-io-error   detach;
 }
 net {
   after-sb-0pri disconnect;
   after-sb-1pri disconnect;
   after-sb-2pri disconnect;
   rr-conflict disconnect;
 }
       on primary_srv {
               device     /dev/drbd0;
               disk       /dev/sda3;
               address    X.X.X.X:7788;
               meta-disk  internal;
       }
       on secondary_srv {
               device     /dev/drbd0;
               disk       /dev/sda3;
               address    X.X.X.X:7788;
               meta-disk  internal;
       }
}

Pour initialiser le volume drbd, éxecuter la commande suivant sur les 2 serveurs :

primary_srv:~# drbdadm create-md r0  
secondary_srv:~# drbdadm create-md r0  

Une fois deux serveurs identiques, il faut lancer les services drbd :

primary_srv:~# /etc/init.d/drbd start
secondary_srv:~# /etc/init.d/drbd start

Le premier lancé des deux va attendre le second. Une fois les deux services lancés, vous devriez avoir un contenu proche de celui qui est ci-dessous dans le fichier /proc/drbd

primary_srv:~# cat /proc/drbd 
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
0: cs:Connected st:Secondary/Secondary ds:UpToDate/Inconsistent C r--u
   ns:3835912 nr:0 dw:0 dr:3835912 al:0 bm:236 lo:0 pe:0 ua:0 ap:0
       resync: used:0/61 hits:239509 misses:235 starving:0 dirty:0 changed:235
       act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
secondary_srv:~# cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/UpToDate C r-p-
   ns:0 nr:3835912 dw:3835912 dr:0 al:0 bm:236 lo:0 pe:0 ua:0 ap:0
       resync: used:0/61 hits:239509 misses:235 starving:0 dirty:0 changed:235
       act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
Les informations importantes sont en gras et en rouge :
Connected nous permet de dire que la connection réseau entre le deux daemon drbd est fonctionnelle
Secondary/Secondary nous permet de dire que le système de fichier n’est pas encore ultilisable. De plus, il est Inconsistent. 

NOTE : On ne peut utiliser qu’un système qui est en mode Primary.


Nous allons regler le problème en forcant la synchronisation depuis le maitre :

primary_srv:~# drbdsetup /dev/drbd0 primary -o

et sur le secondaire (facultatif à faire uniquement si le slave reste en Secondary/Secondary)

secondary_srv:~# drbdadm secondary r0
secondary_srv:~# drbdadm -- --discard-my-data connect r0
r0 est le nom de la ressource définie dans le fichier de configuration

Une fois la commande passé, le fichier /proc/drbd doit ressembler à :

primary_srv:~# cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
   ns:12332704 nr:0 dw:0 dr:12334880 al:0 bm:752 lo:0 pe:14 ua:68 ap:0
       [>...................] sync'ed:  9.7% (113084/125127)M
       finish: 0:18:54 speed: 102,088 (97,104) K/sec
       resync: used:1/61 hits:770096 misses:753 starving:0 dirty:0 changed:753
       act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
primary_srv:~#

Une fois que la réplication est terminée et que le volume est consistant, passons primary_srv en maître et formatons le volume.

primary_srv:~# mkfs.ext3 /dev/drbd0

Pour vérifier que tout est OK, il suffit de regarder les /proc/drbd sur les deux serveurs :

primary_srv:~# cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
   ns:128581224 nr:0 dw:2146740 dr:126434589 al:1909 bm:7821 lo:0 pe:0 ua:0 ap:0
       resync: used:0/61 hits:8319311 misses:9236 starving:0 dirty:0 changed:9236
       act_log: used:0/127 hits:534776 misses:6885 starving:0 dirty:4976 changed:1909
primary_srv:~#
secondary_srv:~# cat /proc/drbd
version: 8.0.14 (api:86/proto:86)
GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33
0: cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate C r---
   ns:0 nr:128581224 dw:132417136 dr:0 al:0 bm:8057 lo:0 pe:0 ua:0 ap:0
       resync: used:0/61 hits:8319313 misses:9234 starving:0 dirty:0 changed:9234
       act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
secondary_srv:~#

Souvenez vous bien que l’on ne peut monter ou utiliser le /dev/drbd0 que sur le nœud qui à le statut primary !

Créons sur les deux serveurs les points de montage et éditons le /etc/fstab correspondants

primary_srv:~# mkdir /opt/drbd
secondary_srv:~# mkdir /opt/drbd

la ligne à ajouter dans les deux /etc/fstab

/dev/drbd0      /opt/drbd       ext3    defaults,noauto 0       0

L’option noauto est indispensable.


Installation et configuration de HeartBeat

La procédure est à faire sur les deux serveurs de façon identique. Nous ne detaillerons que l’installation sur le premier serveur.

primary_srv:~# apt-get install heartbeat
primary_srv:~# echo "auth 1
1 crc" > /etc/ha.d/authkeys
primary_srv:~# chmod 600 /etc/ha.d/authkeys
primary_srv:~#echo "primary_srv drbddisk Filesystem::/dev/drbd0::/opt/drbd::ext3 mysql Delay::1::0 IPaddr::213.218.156.134/27" >  /etc/ha.d/haresources

Pensez bien à vérifier les parties en rouge

L’IP correspond à l’IP virtuelle publique qui sera utilisée par le service MySQL.

Éditons le fichier de configuration principal de HeartBeat

primary_srv:~# vim /etc/ha.d/ha.cf

bcast           eth2

debugfile       /var/log/ha-debug
logfile         /var/log/ha-log
logfacility     local0

keepalive       2
deadtime        10
warntime        6
initdead                60

udpport         694
node            primary_srv
node            secondary_srv
auto_failback   on

Une fois ces opérations répliquées sur les deux serveurs, nous pouvons installer MySQL.

Correction des droits pour que heartbeat puisse exécuter les commande drbd (sur chaque serveur)

 chgrp haclient /sbin/drbdsetup
 chmod o-x /sbin/drbdsetup
 chmod u+s /sbin/drbdsetup
 chgrp haclient /sbin/drbdmeta
 chmod o-x /sbin/drbdmeta
 chmod u+s /sbin/drbdmeta
 chmod +s /sbin/drbdadm

Installation de MySQL

L’installation de MySQL ne présente pas de difficultés. Il faut cependant vérifier quelques points sans lesquels la procédure de marchera pas.

- le prochain UID système doit être le même sur les deux serveurs (UID système doit être > 100 mais inférieur à 1000)
- L’ordre d’installation des MySQL sur les serveurs est important. 

Sur le maître :

primary_srv:~#  apt-get install mysql-server
primary_srv:~#  /etc/init.d/mysql stop

Puis commenter la ligne suivante dans /etc/my.cnf pour obtenir

#bind-address           = 127.0.0.1


Ensuite, nous allons déplacer les data mysql sur le DRBD :

primary_srv:~# mount  /opt/drbd
primary_srv:/var/lib# mv mysql /opt/drbd/
primary_srv:/var/lib# ln -s /opt/drbd/mysql /var/lib/mysql
primary_srv:~#  /etc/init.d/mysql start

on vérifie que tout fonctionne puis on recoupe mysql et on le retire du démarrage auto

primary_srv:~#  /etc/init.d/mysql stop
primary_srv:~# update-rc.d -f mysql remove
Removing any system startup links for /etc/init.d/mysql ...
  /etc/rc0.d/K21mysql
  /etc/rc1.d/K21mysql
  /etc/rc2.d/S19mysql
  /etc/rc3.d/S19mysql
  /etc/rc4.d/S19mysql
  /etc/rc5.d/S19mysql
  /etc/rc6.d/K21mysql 
primary_srv:~#

on bascule le service DRBD manuellement sur le secondaire :

primary_srv:/var/lib# umount /opt/drbd
primary_srv:/var/lib# drbdadm secondary all

et sur le secondaire

secondary_srv:~# drbdadm primary all
secondary_srv:~# mount /opt/drbd
secondary_srv:~# ln -s /opt/drbd/mysql /var/lib/mysql
secondary_srv:~# apt-get install mysql-server
secondary_srv:~# update-rc.d -f mysql remove
Removing any system startup links for /etc/init.d/mysql ...
  /etc/rc0.d/K21mysql
  /etc/rc1.d/K21mysql
  /etc/rc2.d/S19mysql
  /etc/rc3.d/S19mysql
  /etc/rc4.d/S19mysql
  /etc/rc5.d/S19mysql
  /etc/rc6.d/K21mysql
secondary_srv:~#

De la même façon, on commente la ligne suivante dans /etc/my.cnf pour obtenir

#bind-address           = 127.0.0.1
secondary_srv:~# /etc/init.d/mysql stop
secondary_srv:~# /etc/init.d/mysql start

on vérifie que tout fonctionne puis on recoupe mysql

On ré-injecte les paramètres de l’utilisateur debian-sys-maintainer vers le primaire :

secondary_srv:~# scp -r /etc/mysql/debian.cnf root@primary_srv.lan:/etc/mysql/
root@primary_srv.lan's password:
debian.cnf                                   100%  312     0.3KB/s   00:00
secondary_srv:~#

puis on rebascule le service sur le primaire

secondary_srv:~# /etc/init.d/mysql stop
secondary_srv:~# umount /opt/drbd/
secondary_srv:~# drbdadm secondary  all
primary_srv:~# drbdadm primary all
primary_srv:~# mount /opt/drbd
primary_srv:~# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
primary_srv:~#

pour finir, on démarre les systèmes HeartBeat :

primary_srv:~# /etc/init.d/heartbeat start
secondary_srv:~# /etc/init.d/heartbeat start

Ces deux commandes peuvent prendre un peu de temps, n’hésitez pas à regarder les deux /var/log/ha-log

Le primaire va binder une interface eth0:0 qui sera l’adresse utilisée pour le service en failover. Pour tester, depuis une machine du noc :

Si le message est connection refused il y a un problème avec MySQL.

Pensez à répliquer les configurations sur les deux nodes

Coupons le primaire et attentons une bonne dizaine de seconde

primary_srv:~# /etc/init.d/heartbeat stop
Stopping High-Availability services:
Done.

Réactivons le primaire :

primary_srv:~# /etc/init.d/heartbeat start

Migration DRBD 0.7 vers 0.8

Init

#> /etc/init.d/heartbeat stop
#> mount
#> drbdadm secondary all
#> cat /proc/drbd (Secondary)
#> drbdadm down all
#> rmmod drbd
  • Installer la version 8 de drbd (drbd8-appli, etc...)
#> drbdadm create-md all

v08 Magic number not found
md_offset 161413591040
al_offset 161413558272
bm_offset 161408630784

Found reiser filesystem which uses 157155328 kB
current configuration leaves usable 157625616 kB

==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes

v07 Magic number not found
v08 Magic number not found

You want me to create a v08 style flexible-size internal meta data block.

There apears to be a v07 fixed-size internal meta data block
already in place on /dev/drbd0 at byte offset 874560651226

Convert the existing v07 meta-data to v08?
[need to type 'yes' to confirm] yes

Converting meta data...
Writing meta data...
New drbd meta data block sucessfully created.

A ce point, drbdadm détecte la version 0.7, qui est toujours en place, répondre "Yes" à la premier question, pour upgrade les metadata en format DRBD8. Ensuite répondre "yes" pour convertir le format en version 8.

Une fois terminé, charger les nouveaux modules :

#> modprobe drbd
#> cat /proc/drbd
#> drbdadm up all

Puis :

#> cat /proc/drbd


Split brain

StandAlone sur les 2 serveurs impossible de les synchronisé

drbdadm -- --discard-my-data connect all (on node bad data)
drbdadm connect all (on node with "good" data)