Maison >base de données >tutoriel mysql >Optimisation MySQL - Explication détaillée des étapes du code de création de cluster (image)

Optimisation MySQL - Explication détaillée des étapes du code de création de cluster (image)

黄舟
黄舟original
2017-03-10 10:54:251090parcourir

1 Présentation


MySQL Cluster est une version très pratique, évolutive, hautes performances et haute redondance de MySQL, adaptée aux environnements informatiques distribués. recherche et développement L'intention initiale de la conception est de répondre aux exigences d'application les plus strictes dans de nombreuses industries. Ces applications nécessitent souvent une fiabilité de fonctionnement de la base de données atteignant 99,999 %. MySQL Cluster permet le déploiement de clusters de bases de données « en mémoire » dans des systèmes sans partage. Grâce à l'architecture sans partage, le système peut utiliser du matériel bon marché et n'a aucune exigence particulière en matière de logiciels et de matériel. De plus, étant donné que chaque composant possède sa propre mémoire et son propre disque, il n’existe aucun point de défaillance unique.

En fait, MySQL Cluster intègre un moteur de stockage de cluster de mémoire appelé NDB avec le serveur MySQL standard. Il se compose d'un ensemble d'ordinateurs, chacun exécutant un ou plusieurs processus, pouvant inclure un serveur MySQL, un nœud de données, un serveur de gestion et un programme propriétaire d'accès aux données.

Le cluster MySQL a la capacité de configurer le moteur de stockage NDB avec une variété d'options de basculement et d'équilibrage de charge, mais il est plus simple de le faire sur le moteur de stockage au niveau du cluster. Voici le diagramme de structure du cluster MySQL,


MySQL est composé de trois types de nœuds (ordinateurs ou processus) d'un point de vue structurel , à savoir :

Nœud de gestion : utilisé pour fournir la configuration, la gestion, l'arbitrage et d'autres fonctions pour les autres nœuds de l'ensemble du cluster. En théorie, il suffit de fournir des services via un seul serveur.

Nœud de données : le cœur du cluster MySQL, qui stocke les données et les journaux et fournit divers services de gestion des données. Lorsqu'il y a plus de 2 nœuds, la garantie de haute disponibilité du cluster peut être obtenue. Lorsque le nombre de nœuds de base de données augmente, la vitesse de traitement du cluster ralentit.

Nœud SQL (API) : utilisé pour accéder aux données du cluster MySQL et fournir des services d'application externes. L'ajout de nœuds API améliorera la vitesse d'accès simultané et le débit global de l'ensemble du cluster. Le nœud peut être déployé sur le serveur d'applications Web, sur un serveur dédié ou sur le même serveur que la base de données.

2 Moteur NDB


MySQL Cluster utilise un moteur de stockage NDB dédié basé sur la mémoire. L'avantage est qu'il est rapide et n'a pas de goulot d'étranglement d'E/S de disque. , mais comme elle est basée sur la mémoire, la taille de la base de données est limitée par la mémoire totale du système si le serveur MySQL exécutant NDB doit disposer d'une mémoire suffisamment grande, comme 4G, 8G ou même 16G. Le moteur NDB est distribué et peut être configuré sur plusieurs serveurs pour assurer la fiabilité et l'évolutivité des données. En théorie, en configurant deux nœuds de stockage NDB, la redondance de l'ensemble du cluster de bases de données et le problème du point de défaillance unique peuvent être résolus.


2.1 Défauts


  • En fonction de la mémoire, la taille de la base de données est limitée par la taille totale de la mémoire du cluster

    En fonction de la mémoire, des données peuvent être perdues après une panne de courant. Cela doit être vérifié par des tests.

    Plusieurs nœuds mettent en œuvre la communication, la synchronisation des données, les requêtes et d'autres opérations via le réseau, de sorte que l'intégrité est affectée par la vitesse du réseau,

    La vitesse est donc également relativement lente

    2.2 Avantages


    • Plusieurs nœuds peuvent être distribués dans différents emplacements géographiques, c'est donc également une solution pour mettre en œuvre une base de données distribuée.

      L'évolutivité est très bonne et le cluster de bases de données peut être étendu en ajoutant des nœuds.

      La redondance est très bonne. Il existe des données de base de données complètes sur plusieurs nœuds, donc tout temps d'arrêt de nœud n'entraînera pas d'interruption de service.

      Le coût de mise en œuvre de la haute disponibilité est relativement faible. Contrairement aux solutions de haute disponibilité traditionnelles qui nécessitent des périphériques de stockage partagés et des logiciels dédiés, NDB peut être mis en œuvre tant qu'il y a suffisamment de mémoire.

2. Construction du cluster

Un système de cluster MySQL le plus simple sera construit. Toutes les commandes de la méthode de configuration sont exécutées en tant que compte root. Ce cluster MySQL contient un nœud de gestion, deux nœuds de données et deux nœuds SQL. Ces cinq nœuds seront installés respectivement sur cinq machines virtuelles. Les noms et adresses IP des machines virtuelles sont les suivants :

.

Nœud de gestion

mysql-mgm

192.168.124.141

Nœud de données 1

mysql-ndbd-1

192.168.124.142

Nœud de données 2

mysql-ndbd-2

192.168.124.143

SQL Nœud 1

mysql-sql-1

192.168. 124.144

SQL Nœud2

mysql-sql-2

192.168.124.145

>

Veuillez configurer les éléments de configuration ici sur les trois machines virtuelles respectivement. 1. Installez la machine virtuelle

Le système d'exploitation de la machine virtuelle installe la version x86_64 de CentOS 6.4, utilise le réseau NAT et installe également vmware-tools. la méthode d'installation spécifique est ici Non détaillée ici.

2. Copiez le cluster mysql

Téléchargez la version suivante de MySQL-Cluster :

http://www.php.cn/ Copiez le package compressé téléchargé dans le répertoire /root/Downloads de la machine virtuelle, puis exécutez la commande suivante dans le shell :

cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql

3. Désactivez la politique de sécurité
chkconfig --level 35 iptables off

Désactivez la politique de sécurité. désactivez le pare-feu iptables (ou activez le pare-feu 1186, 3306 ports), exécutez la commande suivante dans le Shell :

gedit /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Désactivez SELinux et exécutez la commande suivante dans le Shell :

mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
gedit config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster
[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data
[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data
[mysqld]NodeId=4hostname=192.168.124.144
[mysqld]
NodeId=5
hostname=192.168.124.145

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*

Modifiez l'élément SELINUX dans le fichier de configuration sur désactivé. Le fichier de configuration est le suivant :

groupadd mysql
useradd -g mysql mysql

Enfin redémarrer le système

2. Nœud de gestion de configuration (192.168.124.141)

gedit /etc/my.cnf


1. Fichier de configuration config.ini

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.124.141

dans Exécutez la commande suivante dans le shell :

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .

Le contenu du fichier de configuration config.ini est le suivant :

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

2. le nœud de gestion

Installez le nœud de gestion, aucun fichier binaire mysqld n'est requis. Seuls le programme serveur MySQL Cluster (ndb_mgmd) et le programme client d'écoute (ndb_mgm) sont requis. Exécutez la commande suivante dans le shell :
groupadd mysql
useradd -g mysql mysql
gedit /etc/my.cnf

[client]
socket=/usr/local/mysql/sock/mysql.sock
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141
[mysql_cluster]
ndb-connectstring=192.168.124.141
3. Configurer les nœuds de données (192.168.124.142, 192.168.124.143)

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

1. 🎜>

Exécutez la commande suivante dans le shell :

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

2. Configurez le fichier de configuration my.cnf

ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Exécutez la commande suivante dans le shell :

ndb_mgm

Le contenu du fichier de configuration mon .cnf est le suivant :
/usr/local/mysql/bin/ndbd --initial
/usr/local/mysql/bin/ndbd

3. Créez une base de données système Exécutez la commande suivante dans le shell :

/usr/local/mysql/bin/mysqld_safe --user=mysql &

4. Définissez le répertoire de données
shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;

Exécutez le commande suivante dans le shell :

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;

#/usr/local/mysql/bin/ndbd --initial#service mysqld start

5. Configuration du service MySQL
# /usr/local/mysql/bin/mysql -u root –p

Exécutez la commande suivante dans le shell :

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
4. Configurer les nœuds SQL (192.168.124.144 , 192.168.124.145) 1. Ajoutez un groupe mysql et un utilisateur Exécutez la commande suivante dans le shell :
shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!
2. Configurez le fichier de configuration my.cnfExécutez la commande suivante dans le shell :
Le contenu du fichier de configuration my.cnf est le suivant :
3. Créez la base de données système Exécutez la commande suivante dans le shell :

4. 设置数据目录

在shell中运行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .

5. 配置MySQL服务

在shell中运行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

五、Cluster环境启动

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1. 启动管理结点

在shell中运行以下命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

还可以使用ndb_mgm来监听客户端,如下:

ndb_mgm

2. 启动数据结点

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

/usr/local/mysql/bin/ndbd --initial

如果不是首次启动,则执行下面的命令。

/usr/local/mysql/bin/ndbd

3. 启动SQL结点

若MySQL服务没有运行,则在shell中运行以下命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

4. 启动测试

查看管理节点,启动成功:

六、集群测试

1. 测试一

现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

在SQL结点1(192.168.124.144)上执行:

shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;

然后在SQL结点2上看数据是否同步过来了

经过测试,在非master上创建数据,可以同步到master上

查看表的引擎是不是NDB,>show create table 表名;

2. 测试二

关闭一个数据节点 ,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。

首先把数据结点1重启,然后在结点2上添加数据

在SQL结点2(192.168.124.145)上操作如下:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;

等数据结点1启动完毕,启动数据结点1的服务

#/usr/local/mysql/bin/ndbd --initial#service mysqld start


然后登录进去查看数据

# /usr/local/mysql/bin/mysql -u root –p


可以看到数据已经同步过来了,说明数据可以双向同步了。

七、关闭集群

1. 关闭管理节点和数据节点,只需要在管理节点(ClusterMgm--134)里执行:

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown

显示

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.

2. 然后关闭Sql节点(135,136),分别在2个节点里运行:

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!

注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-initial”参数了。


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn