MySQL 是一个免费、开源的关系型数据库管理系统。它用于以各种目的存储数据,包括数据仓库、电子商务和日志记录应用程序。MySQL Cluster 是一种以低成本提供可扩展性和可用性的技术。
在本文中,我们将使用一个主节点来存储集群的配置,并使用两个数据节点来存储集群数据。每个节点的IP地址如下所示:
- 主节点或管理节点 - 104.245.33.61
- 数据节点 1 - 104.245.32.195
- 数据节点 2 - 69.87.218.169
先决条件
- 三台运行 Debian 10 的服务器,一台用于管理节点,另一台是数据节点。
- 在每台服务器上都设置了 root 密码。
入门
首先,您需要将所有服务器更新到最新版本。您可以使用以下命令更新所有内容:
apt-get update -y
更新所有服务器后,您可以继续下一步。
安装和设置 MySQL 集群管理器
首先,您需要在主节点上安装 MySQL 集群管理包。默认情况下,该软件包不包含在 Debian 10 默认存储库中。所以你需要从 MySQL 官方网站下载它。
您可以使用以下命令下载它:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
下载 deb 文件后,使用以下命令安装它:
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
安装完成后,使用以下命令创建一个目录来存储集群配置:
mkdir /var/lib/mysql-cluster
接下来,使用以下命令创建一个新的配置文件:
nano /var/lib/mysql-cluster/config.ini
添加以下几行:
[ndbd default]
NoOfReplicas=2 # Number of replicas
[ndb_mgmd]
# Management process options:
hostname=104.245.33.61 #IP of the MySQL Cluster Manager
datadir=/var/lib/mysql-cluster
[ndbd]
hostname=104.245.32.195 #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=69.87.218.169 #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=104.245.33.61 #IP of the MySQL Cluster Manager
完成后保存并关闭文件,然后使用以下命令启动集群管理器:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
你应该得到以下输出:
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24
2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
现在,使用以下命令终止正在运行的服务器:
pkill -f ndb_mgmd
接下来,为 MySQL Cluster Manager 创建一个 systemd 服务文件来管理该服务:
nano /etc/systemd/system/ndb_mgmd.service
添加以下几行:
[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 守护进程:
systemctl daemon-reload
接下来,使用以下命令启动集群管理器并使其在系统重新启动时启动:
systemctl start ndb_mgmd
systemctl enable ndb_mgmd
您现在可以使用以下命令检查服务的状态:
systemctl status ndb_mgmd
你应该得到以下输出:
? ndb_mgmd.service - MySQL NDB Cluster Management Server
Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago
Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
Main PID: 985 (ndb_mgmd)
Tasks: 12 (limit: 2359)
Memory: 6.5M
CGroup: /system.slice/ndb_mgmd.service
??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server...
May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24
May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
完成后,您可以继续下一步。
安装和配置数据节点
接下来,我们将数据节点打包到其他服务器上,并配置它与 MySQL Cluster Manager 进行通信。
首先,使用以下命令在两个数据节点上安装所需的依赖项:
apt-get install libclass-methodmaker-perl -y
安装所有依赖项后,使用以下命令下载最新版本的 MySQL Data Nodes deb 文件:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
下载完成后,使用以下命令安装下载的文件:
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
默认情况下,数据节点将所有配置存储在 /etc/my.cnf 文件中。
因此,使用以下命令在两个数据节点上创建一个新的 /etc/my.cnf 文件:
mkdir -p /usr/local/mysql/data
添加集群IP,如下图:
ndbd
保存并关闭文件,然后在两个数据节点上创建一个数据目录:
mkdir -p /usr/local/mysql/data
现在,使用以下命令启动数据节点:
你应该得到以下输出:
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186'
2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
接下来,使用以下命令终止正在运行的 ndbd 进程:
pkill -f ndbd
接下来,使用以下命令在两个数据节点上为 ndbd 创建一个 systemd 服务文件:
nano /etc/systemd/system/ndbd.service
添加以下几行:
[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 守护进程:
systemctl daemon-reload
接下来,使用以下命令启动 ndbd 服务并使其在系统重新启动时启动:
systemctl start ndbd
systemctl enable ndbd
您还可以使用以下命令检查 ndbd 服务的状态:
systemctl status ndbd
你应该得到以下输出:
? ndbd.service - MySQL NDB Data Node Daemon
Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago
Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS)
Main PID: 741 (ndbd)
Tasks: 46 (limit: 2359)
Memory: 827.1M
CGroup: /system.slice/ndbd.service
??741 /usr/sbin/ndbd
??742 /usr/sbin/ndbd
May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon...
May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186'
May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2
May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
安装和配置 MySQL 服务器
接下来,我们将在 MySQL 集群管理器节点上下载并安装 MySQL 服务器和客户端包。
首先,使用以下命令下载最新版本的 MySQL Cluster Bundle:
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
接下来,使用以下命令将下载的文件解压缩到 /opt 目录中:
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
接下来,将目录更改为 /opt 并使用以下命令安装所需的依赖项:
cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y
接下来,使用以下命令安装 MySQL Common deb 文件:
dpkg -i mysql-common*
接下来,使用以下命令安装 MySQL 客户端软件包:
nano /etc/mysql/my.cnf
如果您遇到任何依赖项错误,请运行以下命令:
apt-get install -f
接下来,使用以下命令安装 MySQL 服务器包:
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
在安装过程中,系统会提示您设置 MySQL 根密码。
安装 MySQL 服务器后,您需要编辑 MySQL 主配置文件并定义集群 IP:
添加以下几行:
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
完成后保存并关闭文件。接下来,重新启动 MySQL 服务并使其在系统重新启动时启动:
systemctl restart mysql
systemctl enable mysql
您可以使用以下命令检查 MySQL 服务器状态:
systemctl status mysql
您应该看到以下输出:
? mysql.service - MySQL Cluster Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 1985 (mysqld)
Status: "Server is operational"
Tasks: 47 (limit: 2359)
Memory: 372.0M
CGroup: /system.slice/mysql.service
??1985 /usr/sbin/mysqld
May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server...
May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
完成后,您可以继续下一步。
测试 MySQL 集群
至此,我们已经成功安装并配置了三节点 MySQL 集群。接下来,您需要验证它是否正常工作。
首先,登录MySQL Cluster Manager节点,使用以下命令登录MySQL:
mysql -u root -p
提供您的 MySQL 根密码,然后使用以下命令检查集群信息:
mysql> SHOW ENGINE NDB STATUS \G
如果一切正常,您应该得到以下输出:
*************************** 1. row ***************************
Type: ndbclus
Name: connection
Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0
*************************** 2. row ***************************
Type: ndbclus
Name: NdbTransaction
Status: created=2, free=2, sizeof=392
*************************** 3. row ***************************
Type: ndbclus
Name: NdbOperation
Status: created=4, free=4, sizeof=944
*************************** 4. row ***************************
Type: ndbclus
Name: NdbIndexScanOperation
Status: created=0, free=0, sizeof=1152
*************************** 5. row ***************************
Type: ndbclus
Name: NdbIndexOperation
Status: created=0, free=0, sizeof=952
*************************** 6. row ***************************
Type: ndbclus
Name: NdbRecAttr
Status: created=0, free=0, sizeof=88
*************************** 7. row ***************************
Type: ndbclus
Name: NdbApiSignal
Status: created=16, free=16, sizeof=144
*************************** 8. row ***************************
Type: ndbclus
Name: NdbLabel
Status: created=0, free=0, sizeof=200
*************************** 9. row ***************************
Type: ndbclus
Name: NdbBranch
Status: created=0, free=0, sizeof=32
*************************** 10. row ***************************
Type: ndbclus
Name: NdbSubroutine
Status: created=0, free=0, sizeof=72
*************************** 11. row ***************************
Type: ndbclus
Name: NdbCall
Status: created=0, free=0, sizeof=24
*************************** 12. row ***************************
Type: ndbclus
Name: NdbBlob
Status: created=0, free=0, sizeof=592
*************************** 13. row ***************************
Type: ndbclus
Name: NdbReceiver
Status: created=0, free=0, sizeof=128
*************************** 14. row ***************************
Type: ndbclus
Name: NdbLockHandle
Status: created=0, free=0, sizeof=48
*************************** 15. row ***************************
Type: ndbclus
Name: binlog
Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0
15 rows in set (0.00 sec)
现在,使用以下命令退出 MySQL shell:
mysql> exit
现在,我们将执行另一项测试以确认集群运行正常。
使用以下命令连接集群管理控制台:
ndb_mgm
您应该看到以下输出:
-- NDB Cluster -- Management Client --
ndb_mgm>
现在,运行以下命令来检查所有数据 ndo:
ndb_mgm> SHOW
你应该得到以下输出:
Connected to Management Server at: 104.245.33.61:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *)
id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
[mysqld(API)] 1 node(s)
id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
要检查第一个数据节点的状态,请运行以下命令:
ndb_mgm> 2 STATUS
您应该看到以下输出:
Node 2: started (mysql-8.0.24 ndb-8.0.24)
要检查第二个数据节点的状态,请运行以下命令:
ndb_mgm> 3 STATUS
您应该看到以下输出:
Node 3: started (mysql-8.0.24 ndb-8.0.24)
最后
恭喜!您已在 Debian 10 服务器上成功安装并设置了一个三节点 MySQL 集群。您现在可以在生产环境中使用此设置来实现可扩展性和可用性。