1 Übersicht
MySQL Cluster ist eine äußerst praktische, skalierbare, leistungsstarke und hochredundante Version von MySQL, die für verteilte Computerumgebungen geeignet ist Forschung und Entwicklung Die ursprüngliche Absicht des Designs besteht darin, die strengsten Anwendungsanforderungen in vielen Branchen zu erfüllen. Diese Anwendungen erfordern häufig eine Zuverlässigkeit des Datenbankbetriebs von 99,999 %. MySQL Cluster ermöglicht die Bereitstellung von „In-Memory“-Datenbankclustern in Shared-Nothing-Systemen. Durch die Shared-Nothing-Architektur kann das System kostengünstige Hardware verwenden und stellt keine besonderen Anforderungen an Software und Hardware. Da außerdem jede Komponente über einen eigenen Speicher und eine eigene Festplatte verfügt, gibt es keinen Single Point of Failure.
Tatsächlich integriert MySQL Cluster eine Speicher-Cluster-Speicher-Engine namens NDB in den Standard-MySQL-Server. Es besteht aus einer Reihe von Computern, auf denen jeweils ein oder mehrere Prozesse ausgeführt werden, zu denen ein MySQL-Server, ein Datenknoten, ein Verwaltungsserver und ein proprietäres Datenzugriffsprogramm gehören können.
MySQL-Cluster bietet die Möglichkeit, die NDB-Speicher-Engine mit einer Vielzahl von Failover- und Lastausgleichsoptionen zu konfigurieren. Am einfachsten ist dies jedoch auf der Speicher-Engine auf Cluster-Ebene. Das Folgende ist das MySQL-Clusterstrukturdiagramm:
MySQL besteht aus struktureller Sicht aus drei Arten von Knoten (Computern oder Prozessen). , nämlich:
Verwaltungsknoten: Wird verwendet, um Konfigurations-, Verwaltungs-, Vermittlungs- und andere Funktionen für andere Knoten im gesamten Cluster bereitzustellen. Theoretisch reicht es aus, Dienste über einen Server bereitzustellen.
Datenknoten: Der Kern des MySQL-Clusters, der Daten und Protokolle speichert und verschiedene Verwaltungsdienste für Daten bereitstellt. Wenn mehr als zwei Knoten vorhanden sind, kann die Hochverfügbarkeitsgarantie des Clusters erreicht werden. Wenn die Anzahl der DB-Knoten zunimmt, verlangsamt sich die Verarbeitungsgeschwindigkeit des Clusters.
SQL-Knoten (API): Wird für den Zugriff auf MySQL-Cluster-Daten und die Bereitstellung externer Anwendungsdienste verwendet. Durch das Hinzufügen von API-Knoten wird die Geschwindigkeit des gleichzeitigen Zugriffs und der Gesamtdurchsatz des gesamten Clusters verbessert. Der Knoten kann auf dem Webanwendungsserver, auf einem dedizierten Server oder auf demselben Server wie die Datenbank bereitgestellt werden.
2 NDB-Engine
MySQL Cluster verwendet eine dedizierte speicherbasierte Speicher-Engine – NDB-Engine. Der Vorteil davon ist, dass es schnell ist und keinen Festplatten-E/A-Engpass aufweist. Da es jedoch auf dem Speicher basiert, ist die Größe der Datenbank durch den Gesamtspeicher des Systems begrenzt. Wenn der MySQL-Server, auf dem NDB ausgeführt wird, über ausreichend Speicher verfügen muss, z. B. 4G, 8G oder sogar 16G. Die NDB-Engine ist verteilt und kann auf mehreren Servern konfiguriert werden, um Datenzuverlässigkeit und Skalierbarkeit zu erreichen. Theoretisch kann durch die Konfiguration von zwei NDB-Speicherknoten die Redundanz des gesamten Datenbankclusters erreicht und das Single-Point-of-Failure-Problem gelöst werden. .
2.1 Mängel
-
Basierend auf dem Speicher ist die Größe der Datenbank durch die Gesamtspeichergröße des Clusters begrenzt
Aufgrund des Speichers können Daten nach einem Stromausfall verloren gehen. Dies muss durch Tests überprüft werden.
Mehrere Knoten implementieren Kommunikation, Datensynchronisation, Abfrage und andere Vorgänge über das Netzwerk, sodass die Integrität von der Netzwerkgeschwindigkeit beeinflusst wird.
Daher ist die Geschwindigkeit auch relativ langsam
2.2 Vorteile
-
Mehrere Knoten können an verschiedenen geografischen Standorten verteilt werden, daher ist es auch eine Lösung zur Implementierung einer verteilten Datenbank.
Die Skalierbarkeit ist sehr gut und der Datenbankcluster kann durch Hinzufügen von Knoten erweitert werden.
Die Redundanz ist sehr gut. Es liegen vollständige Datenbankdaten auf mehreren Knoten vor, sodass Knotenausfallzeiten nicht zu Dienstunterbrechungen führen.
Die Kosten für die Implementierung von Hochverfügbarkeit sind relativ gering. Im Gegensatz zu herkömmlichen Hochverfügbarkeitslösungen, die gemeinsam genutzte Speichergeräte und dedizierte Software erfordern, kann NDB implementiert werden, solange genügend Speicher vorhanden ist.
2. Clusteraufbau
Ein einfachstes MySQL-Clustersystem wird als Root-Konto ausgeführt. Dieser MySQL-Cluster enthält einen Verwaltungsknoten, zwei Datenknoten und zwei SQL-Knoten. Die Namen und IPs der virtuellen Maschinen lauten wie folgt:
Verwaltungsknoten | mysql-mgm |
192.168.124.141 |
Datenknoten 1 | mysql-ndbd-1 |
192.168.124.142 |
Datenknoten 2 |
mysql-ndbd-2 |
192.168.124.143 |
SQL Knoten 1 |
mysql-sql-1 |
192.168. 124.144 |
SQL Knoten2 |
mysql-sql-2 |
192.168.124.145 |
>
Bitte konfigurieren Sie die Konfigurationselemente hier jeweils auf den drei virtuellen Maschinen. 1. Installieren Sie die virtuelle Maschine
Das Betriebssystem der virtuellen Maschine installiert die x86_64-Version von CentOS 6.4, verwendet das NAT-Netzwerk und installiert auch VMware-Tools Die spezifische Installationsmethode finden Sie hier. Hier nicht näher erläutert.
2. MySQL-Cluster kopieren
Laden Sie die folgende Version von MySQL-Cluster herunter:
http://www.php.cn/ Kopieren Sie das heruntergeladene komprimierte Paket in das Verzeichnis /root/Downloads der virtuellen Maschine und führen Sie dann den folgenden Befehl in der Shell aus:
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. Schalten Sie die Sicherheitsrichtlinie aus chkconfig --level 35 iptables off |
Einschalten Deaktivieren Sie die iptables-Firewall (oder schalten Sie die Ports 1186 und 3306 der Firewall ein) und führen Sie den folgenden Befehl in der Shell aus:
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 |
Schalten Sie SELinux aus und führen Sie den folgenden Befehl in der Shell aus:
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* |
Ändern Sie das SELINUX-Element in der Konfigurationsdatei auf „Deaktiviert“. Die Konfigurationsdatei lautet wie folgt:
groupadd mysql
useradd -g mysql mysql Endlich das System neu starten
2. Konfigurationsverwaltungsknoten (192.168.124.141)
1 config.ini-Konfigurationsdatei
[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 |
in Führen Sie den folgenden Befehl in der Shell aus: 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 . |
Der Inhalt der Konfigurationsdatei config.ini ist wie folgt: cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server 2 Der Verwaltungsknoten
Installieren Sie den Verwaltungsknoten, es ist keine mysqld-Binärdatei erforderlich. Nur das MySQL-Cluster-Serverprogramm (ndb_mgmd) und das Listening-Client-Programm (ndb_mgm) sind erforderlich. Führen Sie den folgenden Befehl in der Shell aus: 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. Konfigurieren Sie Datenknoten (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 🎜> Führen Sie den folgenden Befehl in der Shell aus:
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. Konfigurieren Sie die my.cnf-Konfigurationsdatei
ndb_mgmd -f /var/lib/mysql-cluster/config.ini | Führen Sie den folgenden Befehl in der Shell aus:
ndb_mgm Der Inhalt der Konfigurationsdatei my .cnf lautet wie folgt:/usr/local/mysql/bin/ndbd --initial |
/usr/local/mysql/bin/ndbd 3. Erstellen Sie eine Systemdatenbank Führen Sie den folgenden Befehl in der Shell aus:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
4 Legen Sie das Datenverzeichnis fest 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; |
Führen Sie das aus Folgender Befehl in der 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. MySQL-Dienst konfigurieren # /usr/local/mysql/bin/mysql -u root –p |
Führen Sie den folgenden Befehl in der Shell aus:
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. SQL-Knoten konfigurieren (192.168.124.144 , 192.168.124.145) 1. MySQL-Gruppe und Benutzer hinzufügen Führen Sie den folgenden Befehl in der Shell aus: shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS! 2. Konfigurieren Sie die my.cnf-KonfigurationsdateiFühren Sie den folgenden Befehl in der Shell aus: Der Inhalt der Konfigurationsdatei my.cnf lautet wie folgt: 3. Erstellen Sie die Systemdatenbank Führen Sie den folgenden Befehl in der Shell aus:
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来监听客户端,如下:
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”参数了。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Das obige ist der detaillierte Inhalt vonMySQL-Optimierung – Detaillierte Erläuterung der Schritte zum Cluster-Building-Code (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!