Cet article vous expliquera comment configurer une base de données MySQL 5 à trois nœuds. cluster de serveurs. : Deux nœuds de stockage et un
nœud de gestion.
Le cluster estun équilibreur de charge à haute disponibilité
composé de deux nœuds utilisant le package d'installation Ultra Monkey
qui fournit un périphérique "heartbeat" (utilisé pour vérifier si un autre nœud est actif) et
"ldirectord" (distribuant les requêtes aux nœuds du cluster MySQL). .Dans cet article, chacun de nos nœuds utilise le système Linux Debian Sarge. L'installation d'autres distributions Linux peut être légèrement
différente. Nous utilisons MySQL version 5.0.19. Si vous ne souhaitez pas utiliser MySQL 5, vous pouvez également utiliser MySQL 4.1,
même si
je ne l'ai pas encore testé.Cet article est un guide d’application pratique ; il n’implique pas trop de théorie. Vous pouvez trouver de nombreuses théories sur le clustering en ligne.
Pour un serveur,
j'utilise le serveur Debian suivant, ils sont tous sur le même segment de réseau (cet exemple : 192.168.0.x) :
sql1.test.com : 192.168.0.101 MySQL Cluster Node 1
sql2.test.com : 192.168. 0.102 Nœud de cluster MySQL 2
loadb1.test.com : 192.168.0.103 Équilibrage de charge 1 / Serveur de gestion de cluster MySQL
loadb2.test.com : 192.168.0.104 Équilibrage de charge 2
De plus, nous avons besoin d'une adresse IP virtuelle : 192.168.0.105. Il organisera l'équilibrage de charge pour ce cluster MySQL afin que
les applications puissent accéder au cluster via une adresse IP unique unifiée.
Même si nous souhaitons utiliser deux nœuds dans MySQL Cluster, nous avons toujours besoin d'un troisième nœud, le MySQL Cluster Management Server
, pour une raison principale : si l'un des nœuds du cluster MySQL tombe en panne et que MySQL Cluster Management Server ne fonctionne pas, alors
Les données sur les deux nœuds du cluster seront alors incohérentes (« cerveau divisé »). Nous en avons besoin pour configurer MySQL Cluster.
Notre installation nécessite donc généralement cinq machines :
2 nœuds de cluster MySQL + 1 serveur de gestion de cluster + 2 équilibreurs de charge = 5.
Parce que le serveur de gestion de cluster n'utilise pas beaucoup de ressources, le système sera vide. Ne fait rien, nous pouvons donc placer notre
premier
équilibreur de charge sur la même machine que lui, ce qui nous permet d'économiser un serveur, donc idéalement nous n'avons besoin que de quatremachines.
2. Configurez le serveur de gestion de cluster MySQL.
Nous devons d'abord télécharger MySQL 5.0.19 et installer le serveur de gestion de cluster (ndb_mgmd) et le client de gestion de cluster (ndb_mgm - qui
peut être utilisé pour surveiller le fonctionnement du cluster). les étapes sont dans loadb1.test .com (192.168.0.103) :
loadb1.test.com :
mkdir /usr/src/mysql-mgm
cd /usr/src/mysql-mgm
wget http://dev.mysql.com/get /Téléchargements/ MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql- max-5.0 .19-linux-i686-glibc23.tar.gz
cd mysql-max-5.0.19-linux-i686-glibc23
mv bin/ndb_mgm /usr/bin
mv bin/ndb_mgmd /usr/bin
chmod 755 /usr/ bin/ndb_mg *
cd /usr/src
rm -rf /usr/src/mysql-mgm
Ensuite, nous devons créer le fichier de configuration du cluster, /var/lib/mysql-cluster/config.ini :
loadb1.test.com :
mkdir /var /lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
————-
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Section pour le cluster nœud de gestion
[ NDB_MGMD]
# Adresse IP du nœud de gestion (ce système)
HostName=192.168.0.103
# Section pour les nœuds de stockage
[NDBD]
# Adresse IP du premier nœud de stockage
HostName=192.168.0.101
DataDir= /var/lib/ mysql-cluster
[NDBD]
# Adresse IP du deuxième nœud de stockage
HostName=192.168.0.102
DataDir=/var/lib/mysql-cluster
# un [MYSQLD] par nœud de stockage
[MYSQLD]
[MYSQLD]
———-
Dans l'application réelle , veuillez modifier le fichier. Remplacez l'adresse IP par votre IP correspondante.
Ensuite, nous démarrons le serveur de gestion du cluster :
loadb1.test.com :
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Nous devrions également pouvoir démarrer automatiquement le serveur de gestion au démarrage du serveur, nous créons donc un
script d'initialisation très simple et la connexion de démarrage correspondante :
loadb1.test.com :
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init. d/ ndb_mgmd
update-rc.d ndb_mgmd par défaut
Trois nœuds de cluster MySQL de configuration (nœuds de stockage)
Nous allons maintenant installer mysql-max-5.0.19 sur sql1.test.com et sql2.test.com respectivement :
sql1.example.com/ sql2 .example.com :
groupadd mysql
useradd -g mysql mysql
cd /usr/local/
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz
ln -s mysql - max-5.0.19-linux-i686-glibc23 mysql
cd mysql
scripts/mysql_install_db –user=mysql
chown -R root:mysql
chown -R mysql data
cp support-files/mysql.server /etc/init.d/
chmod
.755 /etc/init.d/mysql.server
update-rc.d mysql.server par défaut
cd /usr/local/mysql/bin
mv * /usr/bin
cd ../
rm -fr /usr/local/mysql/bin
ln -s /usr/bin /usr/local/mysql/bin
Ensuite on crée le fichier de configuration MySQL /etc/my.cnf sur chaque nœud :
vi /etc/my.cnf
–
[mysqld]
ndbcluster
# Adresse IP du cluster nœud de gestion
ndb-connectstring=192.168.0.103
[mysql_cluster]
# Adresse IP du nœud de gestion du cluster
ndb-connectstring=192.168.0.103
–
Assurez-vous de saisir l'adresse IP correcte dans le serveur de gestion du cluster.
Ensuite, nous créons le répertoire de données et démarrons le serveur MySQL sur chaque nœud du cluster :
sql1.test.com / sql2.test.com :
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
ndbd – initial
/ etc/init.d/mysql.server start
(N'oubliez pas : nous démarrons MySQL uniquement pour la première fois ou lorsque /var/lib/mysql-cluster/config.ini sur loadb1.test.com
change. Utilisez uniquement ndbd –initial)
Maintenant, il est temps de définir le mot de passe du compte root MySQL :
sql1.test.com / sql2.test.com :
mysqladmin -u root password yourrootsqlpassword
Nous devons démarrer le nœud du cluster au démarrage du serveur, nous créons donc une initialisation ndbd script et la
connexion de démarrage du système correspondante :
sql1.test.com / sql2.test.com :
echo 'ndbd' > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc par défaut.
4 Test du cluster MySQL
Notre configuration du cluster MySQL est terminée, il est maintenant temps de la tester. Sur le serveur de gestion de cluster
(loadb1.test.com), exécutez le client de gestion de cluster ndb_mgm pour vérifier si les nœuds du cluster sont connectés :
loadb1.test.com :
ndb_mgm
Vous verrez ceci :
– Cluster NDB — Client de gestion –
ndb_mgm >
Dans Enter show;
show sur la ligne de commande ;
les informations de sortie doivent ressembler à ceci :
ndb_mgm> show;
Connecté au serveur de gestion à : localhost:1186
Configuration du cluster
———————
[ndbd(NDB)] 2 node( s)
id= 2 @192.168.0.101 (Version : 5.0.19, groupe de nœuds : 0, maître)
id=3 @192.168.0.102 (Version : 5.0.19, groupe de nœuds : 0)
[ndb_mgmd(MGM)] 1 nœud(s
))
id=1 @192.168.0.103 (Version : 5.0.19)
[mysqld(API)] 2 nœud(s)
id=4 @192.168.0.101 (Version : 5.0.19)
id=5 @192.168.0.102 (Version : 5.0.19)
ndb_mgm>
Si vous voyez que tous vos nœuds sont connectés. Alors tout se passe bien !
Entrez
quit ;
pour quitter la console client ndb_mgm.
Maintenant,
nous créons une base de données de test sur le nœud sql1.test.com, créons une table de test et
remplissons quelques données de test :
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
;
INSERT INTO testtable () VALUES (1);
SELECT * FROM testtable
quit;
(Regardez l'instruction CREATE ci-dessus : les tables de toutes les bases de données que nous voulons regrouper doivent utiliser ENGINE=NDBCLUSTER !
Si vous utilisez un autre ENGINE, alors le clustering le fera. ne fonctionne pas !)
Le résultat de SELECT devrait être :
mysql> SELECT * FROM testtable;
+——+
|
+
——
+
1 ligne dans l'ensemble (0,03 sec
)
même base de données sur le nœud sql2.test.com (oui, nous devons encore la créer, maisles données seront copiées sur sql2.test.com
après la création de la table de test
, car la table de test utilise ENGINE=NDBCLUSTER) :sql2. test.com :
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
SELECT * FROM testtable
Le résultat de SELECT doit être le même que celui de sql1.test.com ci-dessus :
mysql
> SELECT * FROM testtable ;
—+
| i |
+——+
| 1
+——+
1 ligne dans l'ensemble (0,04 sec)
Nous voyons que les données ont été copiées du nœud sql1.test.com vers le nœud sql2.example.com. Maintenant, nous
insérons une autre ligne dans la table test :
sql2.test.com:
INSERT INTO testtable () VALUES (2);
retournons
maintenant au nœud sql1.example.com et vérifions si nous pouvons voir la ligne nouvellement insérée :
sql1.example.com :
mysql -u root -p
USE mysqlclustertest;
SELECT * FROM testtable
quit ;
Vous
devriez voirun
résultat
comme ceci :
mysql
> SELECT * FROM testtable;
| 2 |
+——+
2 lignes dans l'ensemble (0,05 sec)
pour que chaque nœud du cluster ait les mêmes données !
Voyons maintenant si nous arrêtons le nœud 1 (sql1.example.com) : exécutez
sql1.example.com:
killall ndbd
et vérifiez
ps aux | grep grep -iv grep
pour voir que tous les processus ndbd sont terminés. Si vous voyez toujours des processus ndbd, exécutez
à nouveaukillall ndbd
jusqu'à ce que tous les processus ndbd soient terminés.
Maintenant, sur notre serveur de gestion, vérifiez l'état du cluster (loadb1.example.com) :
loadb1.example.com :
ndb_mgm
Tapezshow ;
sur la console ndb_mgm
.Vous devriez voir ceci :
ndb_mgm> show
Connected to Management Server à : localhost
;:1186
Configuration du cluster
————————
[ndbd(NDB)] 2 nœud(s)
id=2 (non connecté, acceptant la connexion de 192.168.0.101)
id=3 @192.168.0.102 (Version : 5.0 .19 , Groupe de nœuds : 0, Maître)
[ndb_mgmd(MGM)] 1 nœud(s)
id=1 @192.168.0.103 (Version : 5.0.19)
[mysqld(API)] 2 nœud(s)
id=4 @192.168 .0.101 (Version : 5.0.19)
id=5 @192.168.0.102 (Version : 5.0.19)
ndb_mgm>
Vous voyez, le nœud sql1.example.com n'est pas connecté.
Entrée :
quitter ;
quitter la console ndb_mgm.
Vérifions le nœud sql2.example.com :
sql2.example.com :
mysql -u root -p
USE
mysqlclustertest;
SELECT
* FROM testtable
quit
;+— —+
|
+——+
| 1
| 2 |
+——+
2 lignes dans l'ensemble (0,17 sec)
Ok, tous les tests sont normaux, redémarrons maintenant le nœud sql1.test.com
: .example .com :
ndbd
5 Comment redémarrer le cluster
Imaginons maintenant que vousdeviez redémarrer le cluster MySQL
en raison d'une modification de /var/lib/mysql-cluster/config.ini sur le nœud loadb1.test.com
ou autre raisons.Pour ce faire, vous utilisez
le client de gestion de cluster ndb_mgm sur le nœud loadb1.example.com :
loadb1.test.com :
ndb_mgm
Sur la console ndb_mgm, vous tapez
shutdown ;
vous verrez un message comme celui-ci :
ndb_mgm> shutdown
Node 3
;: Arrêt du cluster initié
Nœud 2 : Arrêt du nœud terminé.
2 nœuds du cluster NDB ont été arrêtés
ndb_mgm
>
Cela signifie que les nœuds du cluster sql1.test.com et sql2.test.com ont été arrêtés. les serveurs de gestion de cluster ont tous été arrêtés.
Exécutez
quit ;
quittez la console ndb_mgm.
Pour démarrer le serveur de gestion de cluster, faites ceci sur loadb1.test.com :
loadb1.test.com :
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
et sur sql1.test.com et sql2.test.com Exécuter sur :
sql1.example.com / sql2.example.com :
ndbd
Ou bien, vous venez de modifier le fichier /var/lib/mysql-cluster/config.ini sur loadb1.test.com :
ndbd –initial
Après cela, vous Vous pouvez vérifier sur loadb1.test.com pour voir si le cluster a été redémarré :
loadb1.test.com :
ndb_mgm
Dans la console ndb_mgm, entrez
show
pour afficher l'état actuel du cluster. Cela peut prendre un certain temps avant que tous les nœuds signalent qu'ils sont connectés après le redémarrage.
Entrée :
quitter ;
quitter la console ndb_mgm.
6. Configuration de l'équilibrage de charge
Notre cluster MySQL est maintenant terminé et vous pouvez maintenant commencer à l'utiliser.
Cependant, nous n'avons pas d'adresse
IP distinctepour accéder au cluster
, ce qui signifie que vous devez configurer une partie de l'application pour utiliser le nœud 1 du cluster MySQL (sql1.test.com) et une autre partie pour utiliser le nœud 2 (sql2. test.com).Bien sûr, toutes les applications ne doivent utiliser qu'un seul nœud, mais si vous
ne souhaitez pas diviser la charge entre les nœuds du cluster, alors à quoi sert un cluster. Une autre question est :
que se passe-t-il si un seul cluster
?le nœud tombe en panne ? Les applications utilisant ce nœud de cluster ne pourront alors pas fonctionner du tout.
La solution ici est de configurer un équilibreur de charge devant MySQL Cluster pour équilibrer la charge entre chaque nœud MySQL Cluster.
L'équilibreur de charge configure une adresse IP virtuelle partagée entre les nœuds du cluster, et toutes vos applications utilisent cette adresse IP virtuelle pour
accéder au cluster. Si l'un des nœuds tombe en panne, votre application fonctionnera toujours car l'équilibreur de charge transférera les requêtes
vers l'autre nœud qui fonctionne correctement.
Maintenant, dans cet exemple, l'équilibreur de charge devient le goulot d'étranglement. Et si cet équilibreur de charge tombe en panne ? Nous allons donc
configurer deux équilibreurs de charge en mode d'installation (actif/passif) actif/passif. Cela signifie que nous avons un équilibreur de charge actif et un autre en
veille chaude, et lorsque l'équilibreur actif tombe en panne, il devient actif. Chaque équilibreur de charge utilise Heartbeat pour vérifier
l'activité de l'autre équilibreur de charge, et l'équilibreur de charge utilise également ldirectord, qui est responsable de la distribution du trafic vers les nœuds du cluster.
Heartbeat et ldirectord sont inclus dans le package d'installation d'Ultra Monkey que nous allons installer.
Il est très important que le noyau système des nœuds Loadb1.test.com et Loadb2.test.com prenne en charge IPVS (IP Virtual Server).
IPVS effectue l'équilibrage de charge au niveau de la couche de transport du noyau Linux.
6.1 Installer Ultra Monkey
OK, commençons maintenant : Tout d'abord, nous activons IPVS sur les nœuds loadb1.test.com et loadb2.test.com :
loadb1.example.com / loadb2.example.com :
modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe
ip_vs_nq
modprobe ip_vs_rr modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr
Pour activer les modules IPVS au démarrage, nous énumérons les modules dans /etc/modules :
loadb1.test.com / :
vi /etc /
modulesip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
Maintenant, nous éditons /etc/apt/sources.list, ajoutons le point de téléchargement d'Ultra Monkey, puis nous installons Ultra Monkey :
loadb1.test .com/loadb2.test. com:
vi / etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge principal
deb-src http://www.ultramonkey.org/download/3 sarge principal
apt-get mise à jour
apt-get installez ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev
Maintenant,
Ultra
Monkey a été installé, si vous voyez l'avertissement suivant
:
|
libsensors3 ne sera pas fonctionnel sur votre système
|
Si vous souhaitez l'activer,
consultez «
Prise en charge des capteurs matériels I2C » dans la configuration de votre noyau.
Répondez à la question suivante :
Voulez-vous charger automatiquement les règles IPVS au démarrage ?
<-- Non
Sélectionnez une méthode démon
<-- none
Le package d'installation libdbd-mysql-perl que je viens d'installer ne fonctionne pas sur MySQL 5 (nous sommes en Cluster MySQL utilisant MySQL 5),
nous installons donc le dernier package d'installation DBD::mysql Perl :
loadb1.test.com / loadb2.test.com :
cd /tmp
wget
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD- mysql -3.0002
perl Makefile.PL
make
make install
Nous devons d'abord activer le transfert de paquets :
loadb1.example.com / loadb2.example.com :
vi /etc/sysctl.conf
# Active le transfert de paquetsnet.ipv4.ip_forward = 1
6.2 Configurer le rythme cardiaque ( heartbeat )
Nous configurons le heartbeat en créant trois fichiers (les fichiers de loadb1.test.com et de loadb2.test.com doivent être exactement les mêmes) :
loadb1.test.com / loadb2.test.com :
vi /etc/ha.d /ha .cf
logfacility local0
bcast eth0
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
Rappelez-vous : vous devez lister le nom du nœud (ce Dans l'exemple, Loadb1 et Loadb2)
uname -n
En dehors de ceux-ci, nous n'avons pas besoin d'apporter de modifications à ce fichier.
vi /etc/ha.d/haresources
loadb1
ldirectord::ldirectord.cf
LVSSyncDaemonSwap::master
IPaddr2::192.168.0.105/24/eth0/192.168.0.255
Vous devez énumérer l'un des noms de nœud d'équilibrage de charge (ici : loadb1), et répertorie
l'adresse IP virtuelle (192.168.0.105) et l'adresse de diffusion (192.168.0.255)
vi /etc/ha.d/authkeys
auth 3
3 md5 somerandomstring
somerandomstring sont les deux battements de cœur utilisés par Loadb1 et Loadb2 pour s'authentifier chacun. other. Le mot de passe du démon.
Définissez votre propre mot de passe ici. Vous pouvez choisir parmi 3 méthodes de cryptage. J'utilise généralement md5 pour le cryptage.
/etc/ha.d/authkeys doit être en lecture seule pour le compte root. Ici, nous faisons ceci :
loadb1.test.com / loadb2.test.com :
chmod 600 /etc/ha.d/authkeys
6.3 Configuration de ldirectord
Maintenant, nous allons le faire. créer pour ldirectord Fichier de configuration, équilibreur de charge :
loadb1.example.com / loadb2.example.com :
vi /etc/ha.d/ldirectord.cf
# Directives globales
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
quiescent = oui
virtuel = 192.168.0.105:3306
service = mysql
réel = 192.168.0.101:3306 gate
real = 192.168.0.102:3306 gate
checktype = négocier
login = "ldirector"
passwd = "ldirectorpassword"
base de données = "ldirectordb"
request = "SELECT * FROM connectioncheck"
planificateur = wrr
Veuillez remplir l'adresse IP virtuelle correcte (192.168.0.105) et l'adresse IP correcte du nœud du cluster MySQL (192.168.0.101 et 192.168.0.102).
3306 est le port par défaut lorsque MySQL est en cours d'exécution. Nous avons également spécifié un utilisateur MySQL (ldirector) et un mot de passe (ldirectorpassword), une base de données (ldirectordb) et
une requête SQL. ldirectord utilise ces informations pour tester les nœuds du cluster MySQL afin de vérifier qu'ils sont toujours disponibles. Ensuite, nous utiliserons l'utilisateur ldirector pour
créer la base de données ldirectordb.
Maintenant, nous créons les connexions de démarrage nécessaires pour Heartbeat et supprimons ldirectord (car ldirectord sera démarré par Heartbeat) :
loadb1.test.com / loadb2.test.com :
update-rc.d -f heartbeat Remove
update-rc.d Heartbeat Start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirector remove
6.4 Créer la base de données ldirector
Ensuite, nous créons la base de données ldirector sur les nœuds du cluster MySQL sql1.test.com et sql2.test.com. Cette base de données sera utilisée par notre équilibreur de charge pour vérifier
la disponibilité des nœuds du cluster MySQL.
sql1.test.com :
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword'
;
CREATE DATABASE ldirectordb
USE
CREATE TABLE connectioncheck (i INT) ENGINE ; =NDBCLUSTER;
INSERT INTO connectioncheck () VALUES (1)
;
sql2.test.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword'
;
CREATE DATABASE ldirectordb;
quit;
6.4 Préparation des nœuds du cluster MySQL pour l'équilibrage de charge
Enfin, nous devons configurer les nœuds du cluster MySQL sql1.test.com et sql2.test.com pour accepter l'adresse IP virtuelle 192.168.0.105.
sql1.test.com / sql2.test.com :
apt-get install iproute
Ajoutez le contenu suivant dans /etc/sysctl.conf :
vi /etc/sysctl.conf
# Activez la configuration de l'option arp_ignore
net.ipv4.conf.all . arp_ignore = 1
# Lorsqu'une requête arp est reçue sur eth0, ne répondez que si cette adresse est
# configurée sur eth0 En particulier, ne répondez pas si l'adresse est
# configurée sur lo
net.ipv4.conf.eth0.arp_ignore = 1
#. Idem pour eth1, ajoutez pour toutes les interfaces ARPing
#net.ipv4.conf.eth1.arp_ignore = 1
# Activer la configuration de l'option arp_announce
net.ipv4.conf.all.arp_announce = 2
# Lors d'une requête ARP envoyée via eth0 Utilisez toujours un adresse qui
# est configurée sur eth0 comme adresse source de la requête ARP. Si ce
# n'est pas défini et que des paquets sont envoyés eth0 pour une adresse qui est sur
# lo et qu'une requête arp est requise, alors l'adresse sur. lo sera utilisé.
# Comme l'adresse IP source des requêtes arp est entrée dans le cache ARP sur
# la destination, cela a pour effet d'annoncer cette adresse
# non souhaitable dans ce cas car les adresses sur lo sur le réel -. les serveurs devraient
# être annoncés uniquement par le directeur Linux.
net.ipv4.conf.eth0.arp_announce = 2
# Idem pour eth1, ajouter pour toutes les interfaces ARPing
#net.ipv4.conf.eth1.arp_announce = 2
sysctl -p
ajoutera le paragraphe suivant dans /etc/network/interfaces :
sql1.test.com / sql2.test.com :
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet
adresse statique 192.168.0.105
masque de réseau 255.255.255.255
pré - up sysctl -p > /dev/null
ifup lo:0
7. Démarrez l'équilibreur de charge et testez
Maintenant, nous démarrons deux gestionnaires d'équilibrage de charge :
loadb1.test.com / loadb2.test.com :
/etc/init.d /ldirectord stop
/etc/init.d/heartbeat start
Si vous ne voyez pas d'erreurs, vous devez redémarrer chaque équilibreur de charge maintenant :
loadb1.test.com / loadb2.test.com :
shutdown -r now
Après le redémarrage, nous pouvons vérifier si les deux se chargent. les équilibreurs fonctionnent comme prévu :
loadb1.test.com / loadb2.test.com :
ip addr sh eth0
L'équilibreur de charge actif doit répertorier l'adresse IP virtuelle (192.168.0.105) :
2 : eth0 : mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.103/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.105/24 brd
L'équilibreur de charge pour
192.168.0.255 scope global secondaire eth0 passif (hot stand up) doit apparaître comme suit :2 : eth0 : mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:16:c1:4e brd ff:ff:ff :ff:ff:ff
inet 192.168.0.104/24 brd 192.168.0.255 scope global eth0
loadb1.test.com / loadb2.test.com :
ldirectord ldirectord.cf status
Sortie sur l'équilibreur de charge actif :
ldirectord pour /etc/ha .d/ldirectord.cf est en cours d'exécution avec pid : 1603
Sortie sur l'équilibreur de charge passif :
ldirectord est arrêté pour /etc/ha.d/ldirectord.cf
loadb1.example.com / loadb2.example.com :
ipvsadm -L - nSortie
sur l'équilibreur de charge actif :
version du serveur virtuel IP 1.2.1 (taille = 4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.105:3306 wrr
-> 192.168.0.101:3306 Route 1 0 0
-> 192.168.0.102:3306
Sortie sur Équilibreur de charge passif Route 1 0 0 :
IP Virtual Server version 1.2.1 (taille = 4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
loadb1.test.com / loadb2.test.com :
/etc/ ha.d/resource.d/LVSSyncDaemonSwap état du maître
Sortie sur l'équilibreur de charge actif :
maître en cours d'exécution
(pid ipvs_syncmaster : 1766)
Sortie sur l'équilibreur de charge passif :
maître arrêté
(pid ipvs_syncbackup : 1440)
Si vos tests sont tous normaux, vous pouvez maintenant accéder la base de données MySQL depuis d'autres serveurs du même réseau (192.168.0.x) en utilisant l'adresse IP virtuelle 192.168.0.105 :
mysql -h 192.168 .0.105 -u ldirector -p
(N'oubliez pas : votre client MySQL doit être au moins en version 4.1 ; les anciennes versions n'exécuteront pas MySQL5. )
Vous pouvez maintenant arrêter l'un des nœuds du cluster MySQL pour tester ; vous devriez toujours pouvoir vous connecter à la base de données MySQL.
8 Notes
Lors de l'exécution d'un cluster MySQL, voici quelques points importants à retenir :
– Toutes les données sont en mémoire ! Vous avez donc besoin d'une grande quantité de mémoire sur vos nœuds de cluster. Voici
la formule de calcul de la capacité mémoire requise pour chaque nœud :
(Taille de la base de données SizeofDatabase * Nombre de répliques NumberOfReplicas * 1.1 ) / Nombre de nœuds de données NumberOfDataNodes
Donc si vous avez une taille de base de données de 1 Go, vous devez équiper chaque nœud de 1,1 Go de mémoire !
–Le nœud de gestion du cluster écoute toute connexion sur le port 1186. Cela signifie donc que ce n'est pas très sécurisé, vous devez donc exécuter MySQL Cluster sur un réseau distinct.