avr 15

Monter une partition OCFS2 via iSCSI au boot sous Debian 7

Introduction

Une courte description du paramétrage nécessaire au montage automatique d’une partition OCFS2 sur iSCSI pour Debian 7.

Les bons paramètres qui vont bien

/etc/network/interface

Commencez par passez la ou les interfaces qui transportent l’iSCSI de allow-hotplug (par defaut) à auto :

ex : allow-hotplug eth0 => auto eth0

/etc/iscsi/iscsid.conf et /etc/iscsi/nodes/*/*/default

Ensuite :

node.startup = manual => node.startup = automatic

/etc/fstab

block_device_path  mount_point  ocfs2  defaults,auto,_netdev  0  0

/etc/default/o2cb

O2CB_ENABLED=true

O2CB_BOOTCLUSTER=ocfs2_cluster_name

O2CB_HEARTBEAT_THRESHOLD=90 (dans le cas d’une partition iSCSI en haute dispo ça aide d’avoir une valeur de 90 lors changement de topologie avec dm-multipath)

Conclusion

Avec ça, normalement au reboot vous devriez avoir la partition en question qui se monte automatiquement.

avr 09

Comment monter/démonter une LUN iSCSI proprement

Introduction

Encore un mini tuto :-)

Le sujet ? Après comment ajouter et retirer un disque à chaud sous linux, on va voir la même chose mais pour un périphérique iSCSI.

Monter une LUN

En partant du principe que vous avez déjà une ou des LUN de montées depuis votre Target iSCSI (le serveur dans le jargon iSCSI), vous pouvez simplement faire un :

iscsiadm -m session –rescan

Ou si vous voulez être plus précis, dans le cas où vous monteriez des LUN depuis plusieurs Target différentes :

iscsiadm -m session -r SID –rescan

SID représente l’ID de votre session iSCSI, que vous pouvez retrouvez via un :

iscsiadm -m session -P1

Demonter une LUN

Pour démonter une LUN il faut d’abord démonter le FileSystem qu’elle porte via :

umount /path

Si vous utiliser du multipath (je pense qu’un article traitera le sujet prochainement) :

multipath -f /dev/mapper/nom_du_block_device

On passe la LUN offline :

echo offline > /sys/block/nom_du_block_device/device/state

Et on la supprime :

echo 1 > /sys/block/nom_du_block_device/device/delete

Attention à rendre la LUN indisponible pour cet Initiator (le client dans le jargon iSCSI), autrement elle risque d’être remontée au prochain reboot.

avr 08

Client iSCSI (iscsi initiator) sous Debian 8 Jessie

Introduction

Nous allons voir comment configurer une Debian 8 Jessie comme client iSCSI, ou autrement dit un iSCSI Initiator.

Périmètre du tutoriel

Ce tutoriel est réalisé sous Debian 8 Jessie. Il part d’une installation minimale de Debian.

La base

Commençons tout d’abord par installer les packages nécessaires.

aptitude install open-iscsi

La configuration

Donnons un nom cohérent à notre client iSCSI.

echo « InitiatorName=iqn.yyyy-mm.local.mydomain:host » > /etc/iscsi/initiatorname.iscsi

yyyy-mm => Année et mois de l’installation

local.mydomain => Le nom de votre domaine local en notation inversée

host => Le hostname du client

Ensuite dans le fichier /etc/iscsi/iscsid.conf on définit les paramètres suivants :

node.startup = automatic  # Les volumes seront montés automatiquement au reboot
node.leading_login = Yes  # En accord avec le paramètre précédent

Ensuite on demande au serveur iSCSI de nous fournir la liste des Portal qui sont disponible pour nous :

iscsiadm -m discovery -t st -p IP_du-serveur-iSCSI

Si tout se passe bien, vous devriez avoir le retour suivant :

IP_du_serveur_iSCSI:3260,1 iqn.targetname_du_serveur

Ensuite on va s’enregistrer sur le serveur à l’aide de commande suivante :

iscsiadm -m node –login

Vous devriez avoir le retour suivant :

Logging in to [iface: default, target: iqn.targetname_du_serveur, portal: IP_du_serveur_iSCSI,3260] (multiple)
Login to [iface: default, target: iqn.targetname_du_serveur, portal: IP_du_serveur_iSCSI,3260] successful.

On valide tout ça avec :

dmesg

Qui devrait vous indiquer quelques choses comme ça :

[ 4901.638357] scsi host3: iSCSI Initiator over TCP/IP
[ 4901.891476] scsi 3:0:0:0: Direct-Access SCST_BIO lun0 321 PQ: 0 ANSI: 6
[ 4901.965129] sd 3:0:0:0: [sdb] 41900728 512-byte logical blocks: (21.5 GB/20.0 GiB)
[ 4901.965216] sd 3:0:0:0: [sdb] Write Protect is off
[ 4901.965218] sd 3:0:0:0: [sdb] Mode Sense: 83 00 10 08
[ 4901.965359] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, supports DPO and FUA
[ 4901.970165] sd 3:0:0:0: [sdb] Attached SCSI disk

Et voilà vous un nouveau périphérique disponible avec lequel vous pouvez faire tout (ou presque) ce qu’on peut faire avec un périphérique local.

avr 07

Tutoriel sur l’installation de ESOS – Enterprise Storage OS

Introduction

Ce tutoriel porte sur l’installation de ESOS – Enterprise Storage OS.

Un projet open source visant à permettre la construction d’un équipement de type SAN (Storage Area Network) à partir de matériel plus ou moins abordable. Bien que les prix aient nettement baissés et qu’on arrive aujourd’hui à trouver des appliance bon marché qui fournissent ce genre de fonctionnalités, les performances ne sont pas toujours au rendez-vous (NetGear, D-Link, Synology, etc…). Les fonctionnalités avancées, comme réplication, ne sont pas non plus toujours présentes.

Ce projet s’appuie sur des briques logicielles particulièrement fiables et éprouvées comme LVM (abstraction du stockage), MDADM (Raid logiciel), ou encore SCST (serveur iSCSI).

Pleins choses très enthousiasmantes en somme.

Périmètre de ce tutoriel

Nous traiteront uniquement de son installation basique pour le moment, et ce sous VMware depuis un VM sous Debian 8 Jessie.

A savoir la création du disque de démarrage à partir du package pré-compiler proposé sur le site du projet dans sa version stable.

La base

Il existe plusieurs méthode de création du disque de démarrage, une pour chaque OS (Linux, MacOS, Windows). On ne parlera que de la version pour linux.

Pour commencer il vous faut une VM sous Debian avec une installation basique, ça suffit amplement.

Nous allons devoir installer trois paquets supplémentaire (lsscsi, rpm2cpio et unzip).

aptitude install lsscsi rpm2cpio unzip

Ensuite nous devons télécharger le package d’installation sur le site du projet.

wget http://download.esos-project.com/packages/1.x.x/esos-1.0.0.zip

Puis nous devons ajouter un disque virtuel de 4Go à notre VM sur lequel nous allons installer ESOS.

Une fois ajouté, Debian devrait le détecter tout seul. Si ce n’est pas le cas je vous renvoie au billet suivant Ajouter/Retirer un disque à chaud.

L’installation

Nous devons maintenant décompresser le package téléchargé précédemment.

unzip esos-1.0.0.zip

Pour finalement l’installer.

cd esos-1.0.0

./install.sh

Lors de l’installation, le script vous listera tous les périphérique disponible pour l’installation. Faites bien attention à choisir le bon, autrement vous risquer de casser votre installation Debian. Finissez comme indiqué par un CTRL+C si vous n’avez pas d’utilitaire de gestion de RAID matériel à rajouter à votre installation de ESOS.

Détacher maintenant le disque virtuel de votre VM Debian pour l’attacher à une nouvelle VM pour démarrer le produit.

Pensez à détacher le disque proprement ;-) Si vous ne savez comment, jetez un oeil sur le billet mentionné plus haut.

avr 07

Comment ajouter/retirer un disque à chaud sous linux

Introduction

Aujourd’hui ce n’est pas vraiment un tuto que je vous propose, ou alors un mini-tuto.

Le sujet ? Comment ajouter et retirer un disque à chaud sous linux.

Opération très courante et pratique lorsqu’on fonctionne avec des VM sous ESXi. Ceci dit ça marche aussi pour une machine physique, il faudra simplement avoir le matériel qui supporte ce genre de chose.

Ajouter un disque

Pour ça il faut lancer la commande suivante avec des droits root :

echo « - – - » > /sys/class/scsi_host/hostXX/scan

Les XX représentent le numéro de votre contrôleur SCSI. Vous en aurez probablement plusieurs de disponible. Vous pouvez lancer cette commande sur chacun des contrôleur sans crainte, ce n’est pas destructeur.

Vous pouvez ensuite verifier que le nouveau disque a été détecté à l’aide de la commande suivante :

dmesg

Elle devrait normalement vous retourner un truc dans ce genre là :

[146800.225836] scsi 0:0:0:0: Direct-Access VMware Virtual disk 1.0 PQ: 0 ANSI: 2
[146800.225924] sd 0:0:0:0: [sdb] 33554432 512-byte logical blocks: (17.2 GB/16.0 GiB)
[146800.225931] sd 0:0:0:0: [sdb] Write Protect is off
[146800.225932] sd 0:0:0:0: [sdb] Mode Sense: 31 00 00 00
[146800.225938] sd 0:0:0:0: [sdb] Cache data unavailable
[146800.225939] sd 0:0:0:0: [sdb] Assuming drive cache: write through
[146800.226223] sd 0:0:0:0: [sdb] Attached SCSI disk

Retirer un disque

Pour retirer un disque, il faut d’abord s’assurer que toutes les écritures en attentes qui lui sont destinées ont bien été flushé. Pour forcer le processus lancez la commande suivante :

sync

Quand vous récupérer la main c’est bon, vous pouvez continuer.

Ensuite lancez les deux commandes suivantes dans l’ordre :

echo offline > /sys/block/sdx/device/state
echo 1 > /sys/block/sdx/device/delete

SDX représentant le disk que vous souhaitez retirer.

Et voilà :-)

avr 04

Compiler et installer DRBD 9 sous Debian 8 Jessie

Introduction

Aujourd’hui on va parler réplication avec DRBD en version 9.

DRBD c’est quoi ?

C’est un outils de réplication de donnée en mode block et en temps réel. Ca permet par exemple de répliquer au bit près un disque d’un serveur A sur un serveur B. DRBD n’a pas besoin de savoir quelle type de partition se trouve dessus (ext3, ext4, btrfs, reiserFS, etc…), il s’en moque, lui il réplique des périphériques de type bloc (ce qui se trouve un niveau en-dessous d’un partition). C’est un peu comme un RAID 1 mais au travers du réseau.

Pourquoi le compiler ?

Parce que Debian présente un inconvénient majeur, celui de n’avoir à disposition sur ses dépôts que très peu (voir aucun) de logiciel dans leur dernière version. Et pour le coup la dernière version de DRBD apporte de nouvelles fonctionnalités très intéressantes, la réplication 1-to-MANY.

Et puis parce que compiler c’est fun :-)

Périmètre de ce tuto

Ce tuto est réalisé sur une Debian 8 jessie avec le kernel compiler ici.

La base

On commence sur une installation minimale d’une Debian 8 Jessie. Je ne détaillerai pas cette installation.

On va d’abord installer les paquets nécessaires à la compilation :

aptitude install git autogen autoconf automake dkms build-essential dh-systemd flex help2man python-all python-dbus python-gobject python-natsort thin-provisioning-tools lvm2

La compilation

Ensuite on télécharge les source de DRBD9 :

cd /usr/local/src

git clone –recursive git://git.drbd.org/drbd-9.0.git

git clone –recursive git://git.linbit.com/drbd-utils.git

git clone –recursive http://git.drbd.org/drbdmanage.git

Maintenant on passe à la compilation.

cd /usr/local/src/drbd-9.0

dpkg-buildpackage -b

cd ../drbd-utils

./autogen.sh

dpkg-buildpackage -b

cd ../drbdmanage

dpkg-buildpackage -b

Normalement si tout se passe bien vous devriez avoir les fichiers suivants dans /usr/local/src :

  • drbd-dkms_9.0.7-1_all.deb
  • drbd-utils_8.9.11-1_amd64.deb
  • python-drbdmanage_0.99.4-1_all.deb

Les autres ne nous intéressent pas.

L’installation

Maintenant qu’on tout les paquets nécessaire à l’installation de DRBD9 pour Debian 8 Jessie, il ne nous reste plus qu’à faire :

dpkg -i drbd-utils_8.9.11-1_amd64.deb python-drbdmanage_0.99.4-1_all.deb drbd-dkms_9.0.7-1_all.deb

Et ça y est, c’est fini !

La configuration de l’outils fera l’objet d’un article dédié prochainement (enfin j’espère).

Comme pour le kernel généré ici, le fait d’avoir fait des paquets permet de les installer sur d’autres machines sans avoir à tout refaire à chaque fois.

avr 03

Compiler un kernel 4.10.x optimisé vmware sous Debian 8 jessie

Introduction

Aujourd’hui on va parler compilation de kernel !

Alors déjà pourquoi compiler son kernel ?

Parce que le kernel stock a l’avantage de pouvoir se lancer à peu près n’importe quoi, de la VM à un PC portable en passant une gameboy (j’exagère mais à peine).

La contre-partie de ça, c’est que le kernel doit embarquer pleins de chose qui ne servent à rien dans une VM.

On va donc essayer d’en compiler avec le strict nécessaire pour faire tourner une VM ESXi 6.

Périmètre de ce tuto

Ce tuto est réalisé sur une Debian jessie et doit permettre de faire tourner une VM ESXi 6.

La base

On commence sur une installation minimale d’une Debian 8 Jessie. Je ne détaillerai pas cette installation.

On va d’abord télécharger les sources du kernel depuis l’url suivante : https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.xz

cd /usr/src

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.xz

On décompresse tout ça :

tar xJf linux-4.10.8.tar.xz

cd linux-4.10.8

Maintenant qu’on a les sources on va installer les binaires nécessaires pour compiler notre nouveau noyau :

aptitude install build-essential kernel-package debconf-utils dpkg-dev debhelper ncurses-dev

Là vous devriez normalement rencontrer cette question. Choisissez l’option N°1

debconf

Voilà maintenant on a tout ce qu’il faut pour compiler son kernel :-)

La configuration

Jusque là c’était facile. C’est maintenant que les choses se corsent. Il va falloir choisir ce qu’on veut embarquer dans son kernel. Quelles sont les fonctionnalité qu’on attends de lui, quels matériel veut-on qu’il supporte, etc… Et ça c’est long, très très long. Surtout quand on cherche à enlever ce qui ne nous servira pas. Parce qu’il faut pas tout enlever non plus, autrement ça va plus démarrer. Je vous recommande d’y aller par petite touche. Compiler, tester, et recommencer, jusqu’à obtenir exactement ce qu’on veut. Et comme il faut compiler à chaque fois pour pouvoir tester, ça prend beaucoup de temps. Un test de base pour commencer est la commande :

dmesg

Ca vous renvoie tout ce que crash le kernel au démarrage, et c’est souvent là que les problèmes apparaissent.

Comme je suis un admin sympa je vous propose de télécharger ma conf ici. Elle est très minimaliste, j’ai même enlevé tout ce qui touche à netfilter et ipv6. Mais libre à vous de rajouter ces fonctionnalités :-)

Si vous souhaitez partir de ma conf, copiez là dans le répertoire « /usr/src/linux-4.10.8″ sous le nom de fichier « .config »

Pour la modifier :

make menuconfig

Vous aurez ensuite une belle interface ncurses pour naviguer dans les nombreux menus.

La compilation

Une fois que tout est bien configurer comme on le souhaite, on va passer à la compilation. Cette étape peu prendre du temps. Beaucoup de temps même, surtout quand on compile pleins de trucs qui servent à rien. Avec la conf que je vous fournie ça ne devrait pas prendre plus de 8 à 10 minutes.

make deb-pkg KDEB_PKGVERSION=version_de_la_compilation LOCALVERSION=-nom_de_version_du_kernel -j nb_de_jobs_simultanés

Quelques explications :

LOCALVERSION : C’est en quelque sorte votre branche de kernel. Par example, un kernel pour vm, un kernel sans netfilter, etc…

KDEB_PKGVERSION : Le numéro de version dans la branche. Pratique pour les future mise à jour.

-j : Le nombre de tâches de compilation simultanées. La en gros c’est simple, vous faite [nb_de_vcpu] + 1

Perso ça donne ça sur une VM avec 4 vCPU :

time make deb-pkg KDEB_PKGVERSION=1.03 LOCALVERSION=-vm-no-netfilter -j 5

La commande time me permet de voir combien a pris la compilation.

Une fois fini, vous devriez avoir les fichiers suivants dans /usr/src :

linux-headers-4.10.8-vm-no-netfilter_1.03_amd64.deb

linux-image-4.10.8-vm-no-netfilter_1.03_amd64.deb

linux-libc-dev_1.03_amd64.deb

Vous voilà avec vos kernel package prêt à être installé.

L’installation

Nous sommes maintenant à la dernière étape de l’opération :-)

Pour installer vos paquets :

dpkg -i linux-image-4.10.8-vm-no-netfilter_1.03_amd64.deb linux-headers-4.10.8-vm-no-netfilter_1.03_amd64.deb linux-libc-dev_1.03_amd64.deb

Un petit reboot et vous tournerez avec la dernière version de kernel au moment de la rédaction de ce tuto.

Pour info ce kernel vous permettra d’être mis à jour sans avoir à rebooter.

Le petit plus en compilant de cette façon, c’est que vous pourrez installer ce kernel, via les paquets produits, sur vos autres machines sans avoir refaire l’ensemble de l’opération sur chaque machines.

Complément

Je vous mets en lien un script python très très pratique pour comparer les différence de configuration entre deux kernel diffconfig.

Merci aux auteurs, Matt Mackall et Tim Bird pour le partage.

août 20

Mise en place d’une IP de Failover sur debian wheezy

Introduction

Dans le cadre d’une série d’articles sur la haute disponibilité, ce billet va vous présenter brièvement comment mettre en place une IP partagé entre deux serveurs.

Périmètre de ce tuto

Ce tuto est réalisé sur une Debian wheezy.

Principe de la solution

L’idée est de pouvoir fournir un service qui est redondé sur deux machines distincts au travers d’une seule et même adresse IP.

Pour ce faire nous allons nous appuyer sur UCARP. Ce logiciel joue avec le protocole ARP pour pouvoir partager une IP entre deux machines. Si vous souhaitez plus de détails sur le protocole lui-même je vous recommande d’aller consulter le site du projet directement.

Voici ce que ça donne en image :

UCARP

 

Chaque machine à sa propre IP, plus une seconde qu’elles se partagent, la VIP (Virtual IP). Une machine est réputée « maître », la seconde « esclave ». La machine « maître » est celle qui détient la VIP quand tout va bien. La machine « esclave » récupère la VIP lorsqu’elle n’a plus de nouvelle du « maître ».

C’est exactement ce que fait Cisco avec le HSRP et le VRRP.

Installation

Cette fois nous allons faire dans la simplicité, nous allons installer UCARP depuis les dépôts Debian.

Entrons la commande suivante sur chacune des deux machine :

aptitude install ucarp

Configuration

Sur le serveur maître

Éditons le fichier /etc/network/interfaces comme suit :

vi /etc/network/interfaces

Son contenu doit ressembler à ceci :

auto eth0

iface eth0 inet static

address 10.66.1.184

netmask 255.255.255.192

gateway 10.66.1.190

ucarp-vid 66

ucarp-vip 10.66.1.186

ucarp-password secret

ucarp-advskew 10

ucarp-advbase 1

ucar-master yes

iface eth0:ucarp inet static

address 10.66.1.186

netmask 255.255.255.192

Éditons ensuite le fichier /etc/network/if-up.d/ucarp comme suit :

vi /etc/network/if-up.d/ucarp

La ligne contenant « EXTRA_PARAMS » doit être renseigné comme ceci :

EXTRA_PARAMS=’-P’

Sur le serveur esclave

Éditons le fichier /etc/network/interfaces comme suit :

vi /etc/network/interfaces

Son contenu doit ressembler à ceci :

auto eth0

iface eth0 inet static

address 10.66.1.185

netmask 255.255.255.192

gateway 10.66.1.190

ucarp-vid 66

ucarp-vip 10.66.1.186

ucarp-password secret

ucarp-advskew 20

ucarp-advbase 1

ucar-master no

iface eth0:ucarp inet static

address 10.66.1.186

netmask 255.255.255.192

Éditons ensuite le fichier /etc/network/if-up.d/ucarp comme suit :

vi /etc/network/if-up.d/ucarp

La ligne contenant « EXTRA_PARAMS » doit être renseigné comme ceci :

EXTRA_PARAMS=’-P’

Conclusion

Vous avez maintenant une IP partagée entre deux machine à basculement automatique.

Pour vous en assurer, connectez-vous en SSH sur la VIP et notez bien le hostname de la machine. Éteignez la et reconnectez-vous en SSH toujours sur la VIP, vous verrez que le hostname correspond maintenant à celui de la seconde machine.

août 20

Procédure d’exploitation d’un cluster MySQL

Introduction

Pour faire suite à l’article sur l’installation d’une architecture MySQL en Cluster, voici quelques procédures d’exploitation valable sur cette architecture.

Procédure d’exploitation du cluster

Premier lancement

Nous devons toujours commencer par lancer les serveurs de management (un au minimum).

Pour ce faire, lançons la commande suivante sur MGMT1 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id1/ndb_1.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id1/ –config-file=/home/mysql/MySQL_Cluster/id1/config.ini

Puis la commande suivante sur MGMT2 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id2/ndb_2.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id2/ –config-file=/home/mysql/MySQL_Cluster/id2/config.ini

Passons maintenant aux serveurs de stockage.

Tapons la commande suivante sur NDB1 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id20/ndb_20.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=20 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.178

Tapons la commande suivante sur NDB2 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id21/ndb_21.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=21 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.179

Tapons la commande suivante sur NDB3 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id22/ndb_22.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=22 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.180

Tapons la commande suivante sur NDB4 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id23/ndb_23.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=23 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.181

Terminons par les commandes suivantes sur un des serveurs de management :

ndb_mgm -e ’20 start’

ndb_mgm -e ’21 start’

ndb_mgm -e ’22 start’

ndb_mgm -e ’23 start’

Lançons pour finir les frontaux MySQL.

Tapons la commande suivante sur SQL1 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id10/sql1.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id10/my.cnf

Tapons la commande suivante sur SQL2 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id11/sql2.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id11/my.cnf

Tapons la commande suivante sur SQL3 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id12/sql3.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id12/my.cnf

Tapons la commande suivante sur SQL4 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id13/sql4.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id13/my.cnf

Voilà notre premier lancement terminé.

Nous pouvons également appliquer cette procédure pour réinitialiser notre stockage, mais n’oublions que nous avons transférer le contenu des tables de gestions des droits sur le cluster. Nous nous assurerons donc avant que nous avons les sauvegardes nécessaire.

Lancement ultérieur

La procédure est la même que la précédente à un détail près. Mais ce détail change tout, il faut retirer le switch –initial lors du lancement des nœud NDB.

Nous devons toujours commencer par lancer les serveurs de management (un au minimum).

Pour ce faire, lançons la commande suivante sur MGMT1 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id1/ndb_1.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id1/ –config-file=/home/mysql/MySQL_Cluster/id1/config.ini

Puis la commande suivante sur MGMT2 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id2/ndb_2.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id2/ –config-file=/home/mysql/MySQL_Cluster/id2/config.ini

Passons maintenant aux serveurs de stockage.

Tapons la commande suivante sur NDB1 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id20/ndb_20.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=20 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.178

Tapons la commande suivante sur NDB2 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id21/ndb_21.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=21 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.179

Tapons la commande suivante sur NDB3 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id22/ndb_22.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=22 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.180

Tapons la commande suivante sur NDB4 :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id23/ndb_23.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=23 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.181

Terminons par les commandes suivantes sur un des serveurs de management :

ndb_mgm -e ’20 start’

ndb_mgm -e ’21 start’

ndb_mgm -e ’22 start’

ndb_mgm -e ’23 start’

Lançons pour finir les frontaux MySQL.

Tapons la commande suivante sur SQL1 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id10/sql1.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id10/my.cnf

Tapons la commande suivante sur SQL2 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id11/sql2.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id11/my.cnf

Tapons la commande suivante sur SQL3 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id12/sql3.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id12/my.cnf

Tapons la commande suivante sur SQL4 :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id13/sql4.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id13/my.cnf

Voilà notre lancement terminé.

Redémarrage d’un nœud NDB

Afin de redémarrer un nœud de stockage, connectons nous sur un des serveurs de management et tapons la commande suivante :

ndb_mgm -e ‘id_du_nœud restart’

Arrêt d’un nœud NDB

Afin d’arrêter un nœud de stockage, connectons nous sur un des serveurs de management et tapons la commande suivante :

ndb_mgm -e ‘id_du_nœudstop’

Consulter l’état du cluster

Pour consulter l’état du cluster, connectons nous sur un des serveurs de management et tapons la commande suivante :

ndb_mgm -e ‘show’

Effectuer un Rolling Restart

Après certaines opération sur le cluster, comme l’ajout d’un membre, il peut être nécessaire d’effectuer un rolling restart du cluster.

Cette opération reviens à redémarrer un à un les membre du cluster. Nous devons nous assurer que le membre a terminé son redémarrage avant de passer au suivant.

Sauvegarder les données en ligne

Afin de sauvegarder les données stockées sur les nœud NDB nous devons nous connecter sur un des serveurs de management et taper la commande suivante :

ndb_mgm -e ‘START BACKUP’

Restaurer un backup

Afin de sauvegarder les données stockées sur les nœud NDB nous devons nous connecter sur le noeud où se trouve le backup à restaurer et taper la commande suivante :

ndb_restore -c mgmt1 -n id_du_noeud -b 1 –backup_path=/chemin/du/backup/ -r -m –restore-privilege-tables

août 19

Comment installer un Cluster MySQL en ACTIF/ACTIF avec NDBCLUSTER

Introduction

Dans le cadre d’une série d’article consacré à la haute disponibilité, ce billet va vous présenter la mise en place d’une architecture MySQL en Haute Disponibilité et hautement performante.

Périmètre de ce tuto

Ce tuto est réalisé sur une Debian wheezy, et emploie la version 7.3.6 de MySQL Cluster.

Principe de l’architecture

Comme dit plus haut, nous allons utiliser MySQL, mais une variante spécifique de celui-ci, la version « Cluster » que vous pouvez télécharger ici : http://dev.mysql.com/downloads/cluster/

Pour mettre en place cette architecture vous aurez besoin de plusieurs serveurs (autrement pas de haute disponibilité). Ceci dit, avec même avec un seul serveur vous pourrez tout de même bénéficiez des performance accrues du moteur NDBENGINE.

La grosse spécificité de ce moteur est qu’il stocke ses tables en RAM (avec un copie sur disques pour la persistance des données). Pour l’ensemble des différence avec le moteur Innodb je vous renvoie à l’adresse suivante : http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndb-innodb-engines.html

Dans notre architecture, l’ensemble des serveurs de traitements MySQL seront en READ/WRITE simultanément.

Schéma

Voici un schéma de ce que nous nous apprêtons à mettre en place :

Archi1

 

Les rôles

Nous pouvons distinguer les 3 rôles suivants :

  1. « MGMTx », ces serveurs ont un rôle de management, ils contrôlent constamment ce qu’il se passe dans le cluster
  2. « SQLx », ces serveurs sont les frontaux sql, ce sont à eux que les clients viendront soumettre leurs requêtes
  3. « NDBx », ces serveurs sont les serveurs de stockage, ce sont eux qui détiennent les données dont les frontaux auront besoin pour résoudre les requêtes des clients

Dans notre architecture, nous avons choisi de créer deux GroupNode pour les serveurs NDB. Pourquoi ? Pour la performance. En effet, de cette manière nous faisons quelque chose que l’on pourrait comparer à du RAID 0+1. Les groupes se partageront l’ensemble des données, et celles-ci seront répliquées à l’intérieur de chaque groupe.

Le réseau

Il y a quelques détails aux quels vous devez faire attention concernant le réseau :

  1. Ce système est prévu pour exploiter des liens réseaux rapides et fiable. Typiquement, un LAN Gigabit. Sauf cas particulier, oubliez la réplication inter-site.
  2. Il est préférable que les liens de réplication et d’accès aux tables soient sur le même réseau logique. Attention si vous routez ou filtrez, la charge peut-être importante.
  3. Il est également conseillé que ces liens jouissent d’un réseau physique dédié.

 Installation

Avant de commencer le déploiement du cluster, veuillez vous assurer que vos serveurs sont sains et qu’ils n’ont pas de problèmes pour communiquer entre eux. Si vous souhaitez employer des noms DNS dans vos fichiers de configuration, assurez-vous que la résolution de nom fonctionne correctement.

Installation des serveurs de management

Installation de MGMT1

Nous commençons par installer le premier serveur de management de l’architecture.

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

adduser mysql
chown -R mysql:mysql /opt/mysql/
mkdir -p /home/mysql/MySQL_Cluster/id1

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id1/config.ini << EOF
[NDB_MGMD DEFAULT]
Portnumber=1186

[NDB_MGMD]
NodeId=1
HostName=mgmt1
DataDir=/home/mysql/MySQL_Cluster/id1/
Portnumber=1186

[NDB_MGMD]
NodeId=2
HostName=mgmt2
DataDir=/home/mysql/MySQL_Cluster/id2/
Portnumber=1186

[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M

[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=50M
IndexMemory=10M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=2
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000

[NDBD]
NodeId=20
HostName=10.66.1.178
DataDir=/home/mysql/MySQL_Cluster/id20/
NodeGroup=0

[NDBD]
NodeId=21
HostName=10.66.1.179
DataDir=/home/mysql/MySQL_Cluster/id21/
NodeGroup=0

[NDBD]
NodeId=22
HostName=10.66.1.180
DataDir=/home/mysql/MySQL_Cluster/id22/
NodeGroup=1

[NDBD]
NodeId=23
HostName=10.66.1.181
DataDir=/home/mysql/MySQL_Cluster/id23/
NodeGroup=1

[MYSQLD DEFAULT]

[MYSQLD]
NodeId=10
HostName=10.66.1.174

[MYSQLD]
NodeId=11
HostName=10.66.1.175

[MYSQLD]
NodeId=12
HostName=10.66.1.176

[MYSQLD]
NodeId=13
HostName=10.66.1.177

[MYSQLD]

EOF

Un dernier petit détail :

chown -R mysql:mysql /home/mysql/

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/
ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

Et voilà, c’est fini. Nous venons de déployer le premier serveur de l’architecture.

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id1/ndb_1.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id1/ –config-file=/home/mysql/MySQL_Cluster/id1/config.ini

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id1/ndb_1.pid –exec /opt/mysql/server-5.6/bin/ndb_mgmd

Installation de MGMT2

Nous nous attaquons maintenant au second serveur de management de l’architecture. La procédure est quasi identique.

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

adduser mysql
chown -R mysql:mysql /opt/mysql/
mkdir -p /home/mysql/MySQL_Cluster/id2

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id2/config.ini << EOF
[NDB_MGMD DEFAULT]
Portnumber=1186

[NDB_MGMD]
NodeId=1
HostName=mgmt1
DataDir=/home/mysql/MySQL_Cluster/id1/
Portnumber=1186

[NDB_MGMD]
NodeId=2
HostName=mgmt2
DataDir=/home/mysql/MySQL_Cluster/id2/
Portnumber=1186

[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M

[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=50M
IndexMemory=10M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=2
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000

[NDBD]
NodeId=20
HostName=10.66.1.178
DataDir=/home/mysql/MySQL_Cluster/id20/
NodeGroup=0

[NDBD]
NodeId=21
HostName=10.66.1.179
DataDir=/home/mysql/MySQL_Cluster/id21/
NodeGroup=0

[NDBD]
NodeId=22
HostName=10.66.1.180
DataDir=/home/mysql/MySQL_Cluster/id22/
NodeGroup=1

[NDBD]
NodeId=23
HostName=10.66.1.181
DataDir=/home/mysql/MySQL_Cluster/id23/
NodeGroup=1

[MYSQLD DEFAULT]

[MYSQLD]
NodeId=10
HostName=10.66.1.174

[MYSQLD]
NodeId=11
HostName=10.66.1.175

[MYSQLD]
NodeId=12
HostName=10.66.1.176

[MYSQLD]
NodeId=13
HostName=10.66.1.177

[MYSQLD]

EOF

Un dernier petit détail :

chown -R mysql:mysql /home/mysql/

 

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/
ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

Et voilà, c’est fini. Nous venons de déployer le second serveur de l’architecture. Rapide n’est-ce pas ?

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id2/ndb_2.pid –chuid mysql –exec /opt/mysql/server-5.6/bin/ndb_mgmd — –config-dir=/home/mysql/MySQL_Cluster/id2/ –config-file=/home/mysql/MySQL_Cluster/id2/config.ini

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id2/ndb_2.pid –exec /opt/mysql/server-5.6/bin/ndb_mgmd

Installation des serveurs de stockage

Installation de NDB1

Nous allons passer maintenant à l’installation du premier serveur de stockage.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id20

chown -R mysql:mysql /home/mysql/

L’installation du serveur est finie, il ne reste plus qu’à l’initialiser :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id20/ndb_20.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=20 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.178

Notez le switch –initial qui demande au serveur d’initialiser son stockage. Attention à son utilisation sur une architecture en prod, cela supprimera les données présente sur le nœud.

Utiliser la commande suivante pour lancez le serveur les fois suivantes :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id20/ndb_20.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=20 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.178

Pour arrêter le serveur, il est recommandé de passer par un serveur de management comme ceci :

ndb_mgm -e ’20 stop’

 Installation de NDB2

Nous allons passer maintenant à l’installation du second serveur de stockage.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id21

chown -R mysql:mysql /home/mysql/

L’installation du serveur est finie, il ne reste plus qu’à l’initialiser :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id21/ndb_21.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=21 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.179

Notez le switch –initial qui demande au serveur d’initialiser son stockage. Attention à son utilisation sur une architecture en prod, cela supprimera les données présente sur le nœud.

Utiliser la commande suivante pour lancez le serveur les fois suivantes :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id21/ndb_21.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=21 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.179

Pour arrêter le serveur, il est recommandé de passer par un serveur de management comme ceci :

ndb_mgm -e ’21 stop’

 Installation de NDB3

Nous allons passer maintenant à l’installation du troisième serveur de stockage.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id22

chown -R mysql:mysql /home/mysql/

L’installation du serveur est finie, il ne reste plus qu’à l’initialiser :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id22/ndb_22.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=22 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –initial –bind-address=10.66.1.180

Notez le switch –initial qui demande au serveur d’initialiser son stockage. Attention à son utilisation sur une architecture en prod, cela supprimera les données présente sur le nœud.

Utiliser la commande suivante pour lancez le serveur les fois suivantes :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id22/ndb_22.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=22 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.180

Pour arrêter le serveur, il est recommandé de passer par un serveur de management comme ceci :

ndb_mgm -e ’22 stop’

 Installation de NDB4

Nous allons passer maintenant à l’installation du dernier serveur de stockage.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id23

chown -R mysql:mysql /home/mysql/

L’installation du serveur est finie, il ne reste plus qu’à l’initialiser :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id23/ndb_23.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=23 –ndb-connectstring=mgmt1 –verbose –nostart –initial –bind-address=10.66.1.181

Notez le switch –initial qui demande au serveur d’initialiser son stockage. Attention à son utilisation sur une architecture en prod, cela supprimera les données présente sur le nœud.

Utiliser la commande suivante pour lancez le serveur les fois suivantes :

start-stop-daemon –start –chuid mysql –pidfile /home/mysql/MySQL_Cluster/id23/ndb_23.pid –exec /opt/mysql/server-5.6/bin/ndbd — –ndb-nodeid=23 –ndb-connectstring=mgmt1,mgmt2 –verbose –nostart –bind-address=10.66.1.181

Pour arrêter le serveur, il est recommandé de passer par un serveur de management comme ceci :

ndb_mgm -e ’23 stop’

 Installation des serveurs frontaux MySQL

Installation de SQL1

Nous allons passer maintenant à l’installation du premier serveur de traitement.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id10/tmp

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id10/my.cnf << EOF
[mysqld]
log-error=mysqld.10.err
datadir=/home/mysql/MySQL_Cluster/id10/
tmpdir=/home/mysql/MySQL_Cluster/id10/tmp
basedir=/opt/mysql/server-5.6/
port=3306
ndbcluster=on
#ndbcluster
ndb-nodeid=10
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
socket=/home/mysql/MySQL_Cluster/id10/mysql.socket

[mysql_cluster]
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
EOF

Redéfinissons les droits sur /home/mysql :

chown -R mysql:mysql /home/mysql/

Puis initialisons le serveur :

mysql_install_db –basedir=/opt/mysql/server-5.6 –datadir=/home/mysql/MySQL_Cluster/id10 –user=mysql

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id10/sql1.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id10/my.cnf

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id10/sql1.pid –exec /opt/mysql/server-5.6/bin/mysqld

Transfert des tables de gestion des privilèges sur le cluster

Avant d’aller plus loin, nous allons transférer les tables servant à la gestion des privilège qui sont pour le moment locales sur le cluster afin d’avoir gestion des droits centralisées. Chaque nouveau nœud frontal, saura s’en servir par défaut.

Pour cela lançons les commandes suivantes sur le nœud SQL1 :

mysql -h 127.0.0.1 < /opt/mysql/server-5.6/share/ndb_dist_priv.sql
mysql -h 127.0.0.1 -e ‘CALL mysql.mysql_cluster_move_privileges();’

 

Une fois terminé, vérifions si l’opération s’est bien passée :

mysql -h 127.0.0.1 -e ‘SELECT CONCAT(‘Conversion ‘,IF(mysql.mysql_cluster_privileges_are_distributed(), ‘succeeded’, ‘failed’),’.’) AS Result;’

Installation de SQL2

Nous allons passer maintenant à l’installation du second serveur de traitement.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id11/tmp

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id11/my.cnf << EOF
[mysqld]
log-error=mysqld.11.err
datadir=/home/mysql/MySQL_Cluster/id11/
tmpdir=/home/mysql/MySQL_Cluster/id11/tmp
basedir=/opt/mysql/server-5.6/
port=3306
ndbcluster=on
#ndbcluster
ndb-nodeid=11
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
socket=home/mysql/MySQL_Cluster/id11/mysql.socket

[mysql_cluster]
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
EOF

Redéfinissons les droits sur /home/mysql :

chown -R mysql:mysql /home/mysql/

Puis initialisons le serveur :

mysql_install_db –basedir=/opt/mysql/server-5.6 –datadir=/home/mysql/MySQL_Cluster/id11 –user=mysql

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id11/sql2.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id11/my.cnf

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id11/sql2.pid –exec /opt/mysql/server-5.6/bin/mysqld

 Installation de SQL3

Nous allons passer maintenant à l’installation du troisième serveur de traitement.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id12/tmp

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id12/my.cnf << EOF
[mysqld]
log-error=mysqld.12.err
datadir=/home/mysql/MySQL_Cluster/id12/
tmpdir=/home/mysql/MySQL_Cluster/id12/tmp
basedir=/opt/mysql/server-5.6/
port=3306
ndbcluster=on
#ndbcluster
ndb-nodeid=12
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
socket=/home/mysql/MySQL_Cluster/id12/mysql.socket

[mysql_cluster]
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
EOF

Redéfinissons les droits sur /home/mysql :

chown -R mysql:mysql /home/mysql/

Puis initialisons le serveur :

mysql_install_db –basedir=/opt/mysql/server-5.6 –datadir=/home/mysql/MySQL_Cluster/id12 –user=mysql

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id12/sql3.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id12/my.cnf

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id12/sql3.pid –exec /opt/mysql/server-5.6/bin/mysqld

Installation de SQL4

Nous allons passer maintenant à l’installation du dernier serveur de traitement.

La procédure est très proche des précédentes :

Téléchargeons le package d’installation pour debian (plusieurs distribution sont prise en charge) :

cd /opt

wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Installons le package, puis supprimons le fichier source afin d’économiser de la place :

dpkg -i mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

rm mysql-cluster-gpl-7.3.6-debian6.0-x86_64.deb

Nous allons avoir besoin de quelques paquets supplémentaires :

aptitude install python-paramiko python-pycryptopp libaio-dev

Préparons un peu le terrain :

ln -s /opt/mysql/server-5.6/bin/* /usr/bin/

ln -s /opt/mysql/server-5.6/scripts/mysql_install_db /usr/bin/

adduser mysql

chown -R mysql:mysql /opt/mysql/

mkdir -p /home/mysql/MySQL_Cluster/id13/tmp

Créons le fichier de configuration :

cat > /home/mysql/MySQL_Cluster/id13/my.cnf << EOF
[mysqld]
log-error=mysqld.13.err
datadir=/home/mysql/MySQL_Cluster/id13/
tmpdir=/home/mysql/MySQL_Cluster/id13/tmp
basedir=/opt/mysql/server-5.6/
port=3306
ndbcluster=on
#ndbcluster
ndb-nodeid=13
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
socket=/home/mysql/MySQL_Cluster/id13/mysql.socket

[mysql_cluster]
ndb-connectstring=10.66.1.182:1186,10.66.1.183:1186,
EOF

Redéfinissons les droits sur /home/mysql :

chown -R mysql:mysql /home/mysql/

Puis initialisons le serveur :

mysql_install_db –basedir=/opt/mysql/server-5.6 –datadir=/home/mysql/MySQL_Cluster/id13 –user=mysql

Voici les deux commandes pour le lancer et l’arrêter :

start-stop-daemon –start –pidfile /home/mysql/MySQL_Cluster/id13/sql4.pid –background –chuid mysql –exec /opt/mysql/server-5.6/bin/mysqld_safe — –defaults-file=/home/mysql/MySQL_Cluster/id13/my.cnf

start-stop-daemon –stop –pidfile /home/mysql/MySQL_Cluster/id13/sql4.pid –exec /opt/mysql/server-5.6/bin/mysqld

Conclusion

Nous en avons maintenant terminé avec l’installation d’une architecture MySQL à haute disponibilité et hautement performante.

Dans un prochain article, je publierai quelques procédures d’exploitation de cluster.

Articles plus anciens «