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)

黄舟
Libérer: 2017-03-10 10:54:25
original
1093 Les gens l'ont consulté

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
Copier après la connexion

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

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
Copier après la connexion

# 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
Copier après la connexion

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
Copier après la connexion
[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
Copier après la connexion

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

Enfin redémarrer le système

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

gedit /etc/my.cnf
Copier après la connexion
Copier après la connexion


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
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
gedit /etc/my.cnf
Copier après la connexion
Copier après la connexion

[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
Copier après la connexion
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
Copier après la connexion
Copier après la connexion

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 .
Copier après la connexion
Copier après la connexion
Copier après la connexion

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server
Copier après la connexion
Copier après la connexion
Copier après la connexion

2. Configurez le fichier de configuration my.cnf

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

ndb_mgm
Copier après la connexion
Copier après la connexion

Le contenu du fichier de configuration mon .cnf est le suivant :
/usr/local/mysql/bin/ndbd --initial
Copier après la connexion
Copier après la connexion
/usr/local/mysql/bin/ndbd
Copier après la connexion
Copier après la connexion

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 &
Copier après la connexion
Copier après la connexion

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;
Copier après la connexion
Copier après la connexion

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;
Copier après la connexion
Copier après la connexion

#/usr/local/mysql/bin/ndbd --initial#service mysqld start
Copier après la connexion
Copier après la connexion

5. Configuration du service MySQL
# /usr/local/mysql/bin/mysql -u root –p
Copier après la connexion
Copier après la connexion

Exécutez la commande suivante dans le shell :

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown
Copier après la connexion
Copier après la connexion

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
Copier après la connexion
Copier après la connexion
<🎜><🎜><🎜>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!
Copier après la connexion
Copier après la connexion
<🎜><🎜><🎜><🎜><🎜>< 🎜>2. Configurez le fichier de configuration my.cnf<🎜 ><🎜><🎜>Exé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 .
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

五、Cluster环境启动

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

1. 启动管理结点

在shell中运行以下命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Copier après la connexion
Copier après la connexion

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

ndb_mgm
Copier après la connexion
Copier après la connexion

2. 启动数据结点

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

/usr/local/mysql/bin/ndbd --initial
Copier après la connexion
Copier après la connexion

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

/usr/local/mysql/bin/ndbd
Copier après la connexion
Copier après la connexion

3. 启动SQL结点

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

/usr/local/mysql/bin/mysqld_safe --user=mysql &amp;
Copier après la connexion
Copier après la connexion

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;
Copier après la connexion
Copier après la connexion

然后在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;
Copier après la connexion
Copier après la connexion

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

#/usr/local/mysql/bin/ndbd --initial#service mysqld start
Copier après la connexion
Copier après la connexion


然后登录进去查看数据

# /usr/local/mysql/bin/mysql -u root –p
Copier après la connexion
Copier après la connexion


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

七、关闭集群

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

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown
Copier après la connexion
Copier après la connexion

显示

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

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

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!
Copier après la connexion
Copier après la connexion

注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal