MySQL Cluster分布式数据库为MySQL数据库管理系统提供高可用性和吞吐量。MySQL Cluster由一个或多个管理节点(ndb_mgmd
)组成,这些节点存储集群的配置并控制存储集群的数据节点(ndbd
)。与管理节点通信后,客户端(MySQL客户端,服务器或本机API)直接连接到这些数据节点。使用MySQL Cluster,通常不会复制数据,而是数据节点同步。为此,必须使用特殊的数据引擎 - NDBCluster(NDB)。将集群视为具有冗余组件的单个逻辑MySQL环境是有帮助的。因此,MySQL Cluster可以与其他MySQL群集一起参与复制。
要完成本教程,您将需要总共三台服务器:两台服务器用于冗余MySQL数据节点(ndbd
),一台服务器用于Cluster Manager(ndb_mgmd
)和MySQL服务器/客户机(mysqld
和mysql
)。如果您还没有腾讯云的服务器,可以先点击这里进行免费套餐的试用。免费套餐包含企业版和个人版,超过11款热门产品和42款长期免费的云产品可以供您选择。如果您有长期搭建服务器的需求的话,可以点击这里进行服务器的购买,现在的促销力度很大哦。
安装和配置Cluster Manager
MySQL Cluster在无共享环境中运行最佳。理想情况下,没有两个组件应该共享相同的硬件。出于简化和演示的目的,我们仅限于使用三台服务器。我们将设置两个服务器作为数据节点,在它们之间同步数据。第三台服务器将用于Cluster Manager以及MySQL服务器/客户端。如果启动其他服务器,则可以向群集添加更多数据节点,将群集管理器与MySQL服务器/客户端分离,并将更多服务器配置为群集管理器和MySQL服务器/客户端。
在同一个数据中心中,创建启用了专用网络的 CVM,请务必记下三个CVM 的私有 IP地址。在本教程中,我们的群集节点具有以下私有IP地址:
198.51.100.0
将是第一个MySQL Cluster数据节点198.51.100.1
将是第二个数据节点198.51.100.2
将是Cluster Manager和MySQL服务器节点
一旦您启动了CVM,配置了非root用户,并记下3个节点的IP地址,您就可以开始学习本教程了。
我们首先要下载并安装MySQL Cluster Manager ndb_mgmd
。
要安装Cluster Manager,我们首先需要从官方MySQL Cluster 下载页面获取相应的.deb
安装程序文件。
在此页面的“ 选择操作系统”下,选择“ Ubuntu Linux”。然后,在Select OS Version下,选择Ubuntu Linux 18.04(x86,64位)。
向下滚动,直到看到DEB Package,NDB Management Server,然后单击不包含dbgsym
的下载链接(除非您需要调试符号)。您将进入“ 开始下载”页面。在这里,右键单击“ 不,谢谢”,开始下载。并将链接复制到.deb
文件。
现在,登录到Cluster Manager CVM(在本教程中198.51.100.2
),并下载此.deb
文件:
cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb
使用dpkg
安装ndb_mgmd
:
sudo dpkg -i mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb
我们现在需要在首次运行之前进行配置ndb_mgmd
; 正确的配置将确保数据节点之间的正确同步和负载分配。
Cluster Manager应该是在任何MySQL集群中启动的第一个组件。它需要一个配置文件,作为参数传递给它的可执行文件。我们将创建并使用以下配置文件:/var/lib/mysql-cluster/config.ini
。
在Cluster Manager CVM上,创建此文件所在的/var/lib/mysql-cluster
目录:
sudo mkdir /var/lib/mysql-cluster
然后使用首选的文本编辑器创建和编辑配置文件:
代码语言:javascript复制sudo nano /var/lib/mysql-cluster/config.ini
将以下文本粘贴到编辑器中:
代码语言:javascript复制[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
[ndb_mgmd]
# Management process options:
hostname=198.51.100.2 # Hostname of the manager
datadir=/var/lib/mysql-cluster # Directory for the log files
[ndbd]
hostname=198.51.100.0 # Hostname/IP of the first data node
NodeId=2 # Node ID for this data node
datadir=/usr/local/mysql/data # Remote directory for the data files
[ndbd]
hostname=198.51.100.1 # Hostname/IP of the second data node
NodeId=3 # Node ID for this data node
datadir=/usr/local/mysql/data # Remote directory for the data files
[mysqld]
# SQL node options:
hostname=198.51.100.2 # In our case the MySQL server/client is on the same CVM as the cluster manager
粘贴在本文中后,请务必hostname
使用您配置的CVM的正确IP地址替换上面的值。设置此hostname
参数是一项重要的安全措施,可防止其他服务器连接到Cluster Manager。
保存文件并关闭文本编辑器。
这是一个用于MySQL Cluster的简化配置文件。您应该根据生产需要自定义此文件中的参数。有关完整配置的ndb_mgmd
配置文件示例,请参阅MySQL Cluster 文档。
在上面的文件中,您可以通过将实例附加到相应的部分来添加其他组件,如数据节点(ndbd
)或MySQL服务器节点(mysqld
)。
我们现在可以通过执行ndb_mgmd
二进制文件并使用-f
标志指定其配置文件来启动管理器:
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini
您应该看到以下输出:
代码语言:javascript复制MySQL Cluster Management Server mysql-5.7.22 ndb-7.6.6
2018-07-25 21:48:39 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2018-07-25 21:48:39 [MgmtSrvr] INFO -- Successfully created config directory
这表明MySQL Cluster Management服务器已成功安装,现在正在您的CVM上运行。
理想情况下,我们希望在启动时自动启动Cluster Management服务器。为此,我们将创建并启用systemd服务。
在我们创建服务之前,我们需要终止正在运行的服务器:
代码语言:javascript复制sudo pkill -f ndb_mgmd
现在,使用您喜欢的编辑器打开并编辑以下systemd单元文件:
代码语言:javascript复制sudo nano /etc/systemd/system/ndb_mgmd.service
粘贴以下代码:
代码语言:javascript复制[Unit]
Description=MySQL NDB Cluster Management Server
After=network.target auditd.service
[Service]
Type=forking
ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
在这里,我们添加了一组最小的选项,指导systemd如何启动,停止和重启ndb_mgmd
过程。要了解有关本机配置中使用的选项的更多信息,请参阅systemd 手册。
保存并关闭文件。
现在,使用以下daemon-reload
命令重新加载systemd的管理器配置:
sudo systemctl daemon-reload
我们将启用刚创建的服务,以便MySQL Cluster Manager在重启时启动:
代码语言:javascript复制sudo systemctl enable ndb_mgmd
最后,我们将启动该服务:
代码语言:javascript复制sudo systemctl start ndb_mgmd
您可以验证NDB群集管理服务是否正在运行:
代码语言:javascript复制sudo systemctl status ndb_mgmd
您应该看到以下输出:
代码语言:javascript复制● ndb_mgmd.service - MySQL NDB Cluster Management Server
Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-26 21:23:37 UTC; 3s ago
Process: 11184 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
Main PID: 11193 (ndb_mgmd)
Tasks: 11 (limit: 4915)
CGroup: /system.slice/ndb_mgmd.service
└─11193 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
这表明ndb_mgmd
MySQL Cluster Management服务器现在作为systemd服务运行。
设置Cluster Manager的最后一步是允许来自我们专用网络上其他MySQL Cluster节点的传入连接。
如果在设置此CVM时未配置ufw
防火墙,则可以跳到下一部分。
我们将添加规则以允许来自两个数据节点的本地传入连接:
代码语言:javascript复制sudo ufw allow from 198.51.100.0
sudo ufw allow from 198.51.100.1
输入这些命令后,您应该看到以下输出:
代码语言:javascript复制Rule added
现在,Cluster Manager应该已启动并正在运行,并且能够通过专用网络与其他Cluster节点进行通信。
安装和配置数据节点
注意:本节中的所有命令都应在两个数据节点上执行。
在此步骤中,我们将安装ndbd
MySQL Cluster数据节点守护程序,并配置节点以便它们可以与Cluster Manager通信。
要安装数据节点二进制文件,我们首先需要从官方MySQL 下载页面获取相应.deb
的安装程序文件。
在此页面的“ 选择操作系统”下,选择“ Ubuntu Linux”。然后,在Select OS Version下,选择Ubuntu Linux 18.04(x86,64位)。
向下滚动,直到看到DEB包,NDB数据节点二进制文件,然后单击不包含dbgsym
的下载链接(除非您需要调试符号)。您将进入“ 开始下载”页面。在这里,右键单击“ 不,谢谢”,开始下载。并将链接复制到该.deb
文件。
现在,登录到您的第一个数据节点Ubunta(在本教程中198.51.100.0
),并下载此.deb
文件:
cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb
在我们安装数据节点二进制文件之前,我们需要安装一个依赖项,libclass-methodmaker-perl
:
sudo apt update
sudo apt install libclass-methodmaker-perl
我们现在可以使用dpkg
以下方法安装数据备注二进
sudo dpkg -i mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb
数据节点从MySQL的标准位置提取其配置 /etc/my.cnf
。使用您喜欢的文本编辑器创建此文件并开始编辑它:
sudo nano /etc/my.cnf
将以下配置参数添加到文件中:
代码语言:javascript复制[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.2 # location of cluster manager
指定Cluster Manager节点的位置是ndbd
启动所需的唯一配置。其余配置将直接从管理器中提取。
保存并退出该文件。
在我们的示例中,数据节点将根据管理器的配置找出其数据目录是/usr/local/mysql/data
。在启动守护程序之前,我们将在节点上创建此目录:
sudo mkdir -p /usr/local/mysql/data
现在我们可以使用以下命令启动数据节点:
代码语言:javascript复制sudo ndbd
您应该看到以下输出:
代码语言:javascript复制2018-07-18 19:48:21 [ndbd] INFO -- Angel connected to '198.51.100.2:1186'
2018-07-18 19:48:21 [ndbd] INFO -- Angel allocated nodeid: 2
NDB数据节点守护程序已成功安装,现在正在您的服务器上运行。
我们还需要通过专用网络允许来自其他MySQL Cluster节点的传入连接。
如果在设置此CVM时未配置ufw
防火墙,则可以跳过为设置systemd服务ndbd
。
我们将添加规则以允许来自Cluster Manager和其他数据节点的传入连接:
代码语言:javascript复制sudo ufw allow from 198.51.100.0
sudo ufw allow from 198.51.100.2
输入这些命令后,您应该看到以下输出:
代码语言:javascript复制Rule added
您的MySQL数据节点CVM现在可以通过专用网络与Cluster Manager和其他数据节点进行通信。
最后,我们还希望数据节点守护进程在服务器引导时自动启动。我们将遵循与Cluster Manager相同的过程,并创建systemd服务。
在我们创建服务之前,我们将终止正在运行的ndbd
进程:
sudo pkill -f ndbd
现在,使用您喜欢的编辑器打开并编辑以下systemd单元文件:
代码语言:javascript复制sudo nano /etc/systemd/system/ndbd.service
粘贴以下代码:
代码语言:javascript复制[Unit]
Description=MySQL NDB Data Node Daemon
After=network.target auditd.service
[Service]
Type=forking
ExecStart=/usr/sbin/ndbd
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
在这里,我们添加了一组最小的选项,指导systemd如何启动,停止和重启ndbd
过程。要了解有关本机配置中使用的选项的更多信息,请参阅systemd 手册。
保存并关闭文件。
现在,使用以下daemon-reload
命令重新加载systemd的管理器配置:
sudo systemctl daemon-reload
我们现在将启用刚刚创建的服务,以便数据节点守护程序在重新启动时启动:
代码语言:javascript复制sudo systemctl enable ndbd
最后,我们将启动该服务:
代码语言:javascript复制sudo systemctl start ndbd
您可以验证NDB群集管理服务是否正在运行:
代码语言:javascript复制sudo systemctl status ndbd
您应该看到以下输出:
代码语言:javascript复制● ndbd.service - MySQL NDB Data Node Daemon
Loaded: loaded (/etc/systemd/system/ndbd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-26 20:56:29 UTC; 8s ago
Process: 11972 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS)
Main PID: 11984 (ndbd)
Tasks: 46 (limit: 4915)
CGroup: /system.slice/ndbd.service
├─11984 /usr/sbin/ndbd
└─11987 /usr/sbin/ndbd
这表示ndbd
MySQL Cluster数据节点守护程序现在作为systemd服务运行。您的数据节点现在应该功能齐全,并且能够连接到MySQL Cluster Manager。
完成第一个数据节点的设置后,在其他数据节点上重复本节中的步骤(198.51.100.1
在本教程中)。
配置和启动MySQL服务器和客户端
标准的MySQL服务器,例如Ubuntu的APT存储库中提供的服务器,不支持MySQL Cluster引擎NDB。这意味着我们需要安装与我们在本教程中安装的其他MySQL Cluster软件一起打包的自定义SQL服务器。
我们将再次从官方MySQL Cluster 下载页面中获取MySQL Cluster Server二进制文件。
在此页面的“ 选择操作系统”下,选择“ Ubuntu Linux”。然后,在Select OS Version下,选择Ubuntu Linux 18.04(x86,64位)。
向下滚动直到看到DEB Bundle,然后单击Download链接(它应该是列表中的第一个)。您将进入“ 开始下载”页面。在这里,右键单击“ 不,谢谢”,开始下载。并将链接复制到.tar
存档。
现在,登录到Cluster Manager CVM(在本教程中198.51.100.2
),并下载此.tar
存档(回想一下我们在与Cluster Manager相同的节点上安装MySQL Server - 在生产环境中,您应该在不同的节点上运行这些守护进程) :
cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar
我们现在将此存档提取到一个名为install
的目录中。首先,创建目录:
mkdir install
现在将存档解压缩到此目录中:
代码语言:javascript复制tar -xvf mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar -C install/
进入此目录,其中包含解压缩的MySQL Cluster组件二进制文件:
代码语言:javascript复制cd install
在我们安装MySQL服务器二进制文件之前,我们需要安装几个依赖项:
代码语言:javascript复制sudo apt update
sudo apt install libaio1 libmecab2
现在,我们需要安装MySQL Cluster依赖项,捆绑在我们刚提取的tar
存档中:
sudo dpkg -i mysql-common_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-server_7.6.6-1ubuntu18.04_amd64.deb
安装mysql-cluster-community-server
时,应出现配置提示,要求您为MySQL数据库的root帐户设置密码。选择一个强大的安全密码,然后点击<确定>。出现提示时重新输入此root密码,再次按<Ok>键完成安装。
我们现在可以用dpkg
安装MySQL服务器二进制文件:
mysql-server_7.6.6-1ubuntu18.04_amd64.deb
我们现在需要配置此MySQL服务器安装。
MySQL Server的配置存储在默认/etc/mysql/my.cnf
文件中。
使用您喜欢的编辑器打开此配置文件:
代码语言:javascript复制sudo nano /etc/mysql/my.cnf
您应该看到以下文本:
代码语言:javascript复制# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Cluster Community Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
将以下配置附加到其中:
代码语言:javascript复制. . .
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.2 # location of management server
保存并退出该文件。
重新启动MySQL服务器以使这些更改生效:
代码语言:javascript复制sudo systemctl restart mysql
默认情况下,MySQL应在服务器重新启动时自动启动。如果没有,则以下命令应解决此问题:
代码语言:javascript复制sudo systemctl enable mysql
现在,SQL Server应在Cluster Manager / MySQL Server CVM上运行。
在下一步中,我们将运行一些命令来验证我们的MySQL Cluster安装是否按预期运行。
验证MySQL群集安装
要验证MySQL Cluster安装,请登录到Cluster Manager / SQL Server节点。
我们将从命令行打开MySQL客户端,并通过输入以下命令连接到我们刚刚配置的root帐户:
代码语言:javascript复制mysql -u root -p
在提示时输入您的密码,然后点击ENTER
。
您应该看到类似于的输出:
代码语言:javascript复制Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.7.22-ndb-7.6.6 MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
进入MySQL客户端后,运行以下命令:
代码语言:javascript复制SHOW ENGINE NDB STATUS G
您现在应该看到有关NDB集群引擎的信息,从连接参数开始:
代码语言:javascript复制*************************** 1. row ***************************
Type: ndbcluster
Name: connection
Status: cluster_node_id=4, connected_host=198.51.100.2, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0
. . .
这表明您已成功连接到MySQL群集。
请注意这里ready_data_nodes
的数量:2。此冗余允许您的MySQL集群继续运行,即使其中一个数据节点发生故障。它还意味着您的SQL查询将在两个数据节点之间进行负载平衡。
您可以尝试关闭其中一个数据节点以测试群集稳定性。最简单的测试是重新启动数据节点CVM,以便完全测试恢复过程。当节点重新启动并重新连接到Cluster Manager时,您应该会看到number_of_ready_data_nodes
更改的值1
并再次备份2
。
要退出MySQL提示,只需键入quit
或按CTRL-D
。
这是第一个表明MySQL集群,服务器和客户端正在运行的测试。我们现在将进行一项额外的测试,以确认群集是否正常运行。
使用以下ndb_mgm
命令打开群集管理控制台:
ndb_mgm
您应该看到以下输出:
代码语言:javascript复制-- NDB Cluster -- Management Client --
ndb_mgm>
进入控制台后,输入命令SHOW
并点击ENTER
:
SHOW
您应该看到以下输出:
代码语言:javascript复制Connected to Management Server at: 198.51.100.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @198.51.100.0 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0, *)
id=3 @198.51.100.1 (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @198.51.100.2 (mysql-5.7.22 ndb-7.6.6)
[mysqld(API)] 1 node(s)
id=4 @198.51.100.2 (mysql-5.7.22 ndb-7.6.6)
以上显示有两个数据节点与node-id
s 2和3 连接。还有一个管理节点有node-id
1个和一个MySQL服务器node-id
4。您可以通过使用以下STATUS
命令键入其编号来显示有关每个ID的更多信息:
2 STATUS
以上命令显示节点2的状态,MySQL版本和NDB版本:
代码语言:javascript复制Node 2: started (mysql-5.7.22 ndb-7.6.6)
退出管理控制台类型quit
,然后单击ENTER
。
管理控制台功能非常强大,为管理群集及其数据提供了许多其他选项,包括创建在线备份。有关更多信息,请参阅MySQL官方文档。
此时,您已经完全测试了MySQL Cluster安装。本指南的结束步骤向您展示如何创建测试数据并将其插入此MySQL群集。
将数据插入MySQL群集
为了演示集群的功能,让我们使用NDB引擎创建一个新表,并将一些示例数据插入其中。请注意,为了使用群集功能,必须将引擎明确指定为NDB。如果使用InnoDB(默认)或任何其他引擎,则不会使用群集。
首先,让我们创建一个clustertest
使用以下命令调用的数据库:
CREATE DATABASE clustertest;
接下来,切换到新数据库:
代码语言:javascript复制USE clustertest;
现在,创建一个名为test_table
这样的简单表:
CREATE TABLE test_table (name VARCHAR(20), value VARCHAR(20)) ENGINE=ndbcluster;
我们已经明确指定了ndbcluster
引擎以便使用集群。
现在,我们可以使用此SQL查询开始插入数据:
代码语言:javascript复制INSERT INTO test_table (name,value) VALUES('some_name','some_value');
要验证是否已插入数据,请运行以下select查询:
代码语言:javascript复制SELECT * FROM test_table;
向ndbcluster
表中插入数据并从表中选择数据时,群集负载平衡所有可用数据节点之间的查询。这样可以提高MySQL数据库安装的稳定性和性能。
您还可以在我们之前编辑的my.cnf
文件中设置默认ndbcluster
存储引擎。如果执行此操作,则无需ENGINE
在创建表时指定选项。要了解更多信息,请参阅MySQL 参考手册。
结论
在本教程中,我们演示了如何在Ubuntu 18.04服务器上设置和配置MySQL Cluster。值得注意的是,这是一个用于演示安装过程的最小化,简化的体系结构,在生产中部署MySQL Cluster之前,有许多高级选项和功能值得学习(例如,执行备份)。要了解更多信息,请参阅官方MySQL Cluster文档。若您觉得部署过程过于复杂,推荐您试用腾讯云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。