探索MySQL-Cluster奥秘系列之SQL节点和数据节点配置(7)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 上一小节中,我们讲解了MySQL-Cluster集群的管理节点的配置方法,在这一小节中,我们来学习下关于SQL节点和数据节点的配置方法。

在上一小节中,我们演示了 MySQL Cluster 集群管理节点的配置,这一小节,我们来看一下 SQL 节点和数据节点是如何来配置的。

SQL 节点的配置

在前面我讲到了,MySQL Cluster 集群环境的 SQL 节点,其实和普通的 MySQL 环境区别并不大,它的主进程也是 mysqld,主要区别是使用的安装介质和配置文件不一样。不过,SQL 节点的配置步骤和管理节点的配置步骤非常类似,主要有以下 6 个步骤:

  • 拷贝安装介质至 SQL 节点服务器,并对其解压
  • 创建 mysql 用户及组
  • 将 MySQL Cluster 安装介质移动到指定的位置或者创建 link
  • 配置 SQL 节点的配置文件
  • 修改环境变量
  • 启动 MySQL Cluster 集群的 SQL 节点服务

接下来,我们来配置一下 SQL 节点。

第一步,我们同样是将 MySQL Cluster 的安装介质拷贝到之前规划好的 mysql04 和 mysql05 服务器上(可以回顾一下“Linux 安装和配置-安装”小节),并对其进行解压操作。mysql04 节点:

[root@mysql04 ~]# tar xvf mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar

mysql05 节点:

[root@mysql05 ~]# tar xvf mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar

第二步,在 mysql04 和 mysql05 上创建 mysql 用户及组。mysql04 节点:

[root@mysql03 ~]# groupadd mysql
[root@mysql03 ~]# useradd -g mysql mysql

mysql05节点:

[root@mysql03 ~]# groupadd mysql
[root@mysql03 ~]# useradd -g mysql mysql

第三步,为了使用方便,我们可以将解压好的安装介质移动到 /usr/local 目录下,然后创建一个 link,同时将该目录的属主和属组修改为 mysql。mysql04节点:

[root@mysql04 ~]# mv mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64  /usr/local
[root@mysql04 ~]# cd /usr/local
[root@mysql04 local]# ln -s mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/  mysql
[root@mysql04 local]# chown -R mysql:mysql  mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/

mysql05节点:

[root@mysql05 ~]# mv mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64  /usr/local
[root@mysql05 ~]# cd /usr/local
[root@mysql05 local]# ln -s mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/  mysql
[root@mysql05 local]# chown -R mysql:mysql  mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/

第四步,SQL 节点的配置文件,即是 /etc/my.cnf。大家一定要注意,如果本地有安装 MySQL 数据库环境,需要将其进行卸载,以下是需要配置的 SQL 节点的配置信息。mysql04节点:

[root@mysql04 mydata]# more /etc/my.cnf
[mysqld]
ndbcluster
datadir=/mysql/mydata
basedir=/usr/local/mysql
socket=/mysql/mydata/mysql.sock
port=3306
character_set-server=utf8
ndb-connectstring=192.168.1.3
user=mysql
ndbcluster
ndb-connectstring=192.168.1.3
[mysql_cluster]
ndb-connectstring=192.168.1.3
[client]
default_character_set=utf8
socket=/mysql/mydata/mysql.sock

mysql05节点:

[root@mysql05 ~]# more /etc/my.cnf
[mysqld]
ndbcluster
datadir=/mysql/mydata
basedir=/usr/local/mysql
socket=/mysql/mydata/mysql.sock
port=3306
character_set-server=utf8
user=mysql
ndbcluster
ndb-connectstring=192.168.1.3
[mysql_cluster]
ndb-connectstring=192.168.1.3
[client]
default_character_set=utf8
socket=/mysql/mydata/mysql.sock

在上面的配置文件中,大部分的内容在 MySQL 技能点中(可以去看 MySQL 技能点对应的图文内容)都有讲到,那么和普通的 MySQL 环境不同的是,在 MySQL Cluster 环境中,存在 [mysql_cluster] 信息,在这一段中是需要配置管理节点的地址信息。

这样,SQL节点的配置文件就配置好了。接下来,需要修改下环境变量,使系统可以找到MySQL Cluster 相关的命令。

那么第五步就是在 mysql 用户的家目录下,修改文件.bash_profile。需要在这个文件中添加指定的目录信息,并使其环境变量生效。mysql04 节点:

[mysql@mysql04 ~]$ more .bash_profile 
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
User specific environment and startup programs
export PATH=/usr/local/mysql/bin:$PATH:$HOME/.local/bin:$HOME/bin
[mysql@mysql04 ~]$ source .bash_profile

mysql05 节点:

[mysql@mysql05 ~]$ more .bash_profile 
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
User specific environment and startup programs
export PATH=/usr/local/mysql/bin:$PATH:$HOME/.local/bin:$HOME/bin
[mysql@mysql05 ~]$ source .bash_profile

第六步,我们就可以启动 MySQL Cluster 集群的 SQL 节点服务了,在启动 SQL 节点服务的时候,和普通的 MySQL 环境的操作是相同的。我们使用如下的命令进行启动。

mysql04节点:

[mysql@mysql04 ~]$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

mysql05节点:

[mysql@mysql05 ~]$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

其实对这么长的启动命令,我们可以对其设置一个别名,这样在操作时会简化不少。比如可以在环境变量中配置如下一行内容:alias start='/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &'在启动服务器时,直接执行 start 即可。

这样,MySQL Cluster 集群的SQL节点就配置好了,我们可以通过 SQL 节点的服务登录到 MySQL Cluster 环境进行查看。

[mysql@mysql04 ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.36-ndb-7.6.20-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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>

可以看到,正常登录是没有问题的,同时登录后显示的是"Server version: 5.7.36-ndb-7.6.20-cluster-gpl MySQL Cluster Community Server (GPL)"信息,说明我们的配置没有问题,至此,MySQL Cluster集群环境 SQL 节点方面的内容就配置好了。

接下来,我们来对 MySQL Cluster 集群环境的数据节点方面的配置进行讲解。

数据节点的配置

关于数据节点方面的配置和 SQL 节点方面的操作步骤类似。

第一步,我们同样是将 MySQL Cluster 的安装介质拷贝至之前规划好的 mysql06 和 mysql07 服务器上,并对其进行解压操作。mysql06 节点:

[root@mysql06 ~]# tar xvf mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar

mysql07 节点:

[root@mysql07 ~]# tar xvf mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64.tar

第二步,在 mysql06 和 mysql07 上创建 mysql 用户及组。mysql06节点:

[root@mysql06 ~]# groupadd mysql
[root@mysql06 ~]# useradd -g mysql mysql

mysql07节点:

[root@mysql07 ~]# groupadd mysql
[root@mysql07 ~]# useradd -g mysql mysql

第三步,同样为了使用方便,我们可以将解压好的安装介质移动到 /usr/local 目录下,然后创建一个link,同时将该目录的属主和属组修改为 mysql。mysql06节点:

[root@mysql06 ~]# mv mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64  /usr/local
[root@mysql06 ~]# cd /usr/local
[root@mysql06 local]# ln -s mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/  mysql
[root@mysql06 local]# chown -R mysql:mysql  mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/

mysql07节点:

[root@mysql07 ~]# mv mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64  /usr/local
[root@mysql07 ~]# cd /usr/local
[root@mysql07 local]# ln -s mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/  mysql
[root@mysql07 local]# chown -R mysql:mysql  mysql-cluster-gpl-7.6.20-linux-glibc2.12-x86_64/

第四步,数据节点的配置文件也是/etc/my.cnf。以下是需要配置的 SQL 节点的配置信息。mysql06 节点:

[root@mysql06 local]# more /etc/my.cnf
[mysqld]
datadir=/mysql/mydata
basedir=/usr/local/mysql
socket=/mysql/mydata/mysql.sock
port=3306
character_set-server=utf8
[mysql_cluster]
ndb-connectstring=192.168.1.3

mysql07节点:

[root@mysql07 ~]# more /etc/my.cnf
[mysqld]
datadir=/mysql/mydata
basedir=/usr/local/mysql
socket=/mysql/mydata/mysql.sock
port=3306
character_set-server=utf8
[mysql_cluster]
ndb-connectstring=192.168.1.3

第五步,对于环境变量的配置,和 SQL 节点的配置是一样的,即需要在 mysql 用户家目录下的.bash_profile 文件中添加 mysql 相应的路径。mysql06节点:

[mysql@mysql06 ~]$ more .bash_profile 
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
User specific environment and startup programs
export PATH=/usr/local/mysql/bin:$PATH:$HOME/.local/bin:$HOME/bin
[mysql@mysql07 ~]$ source .bash_profile

mysql07 节点:

[mysql@mysql07 ~]$ more .bash_profile 
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
User specific environment and startup programs
export PATH=/usr/local/mysql/bin:$PATH:$HOME/.local/bin:$HOME/bin
[mysql@mysql07 ~]$ source .bash_profile

第六步,针对 MySQL Cluster 集群环境的数据节点,在配置好环境变量之后,要想使用数据节点,你必须要先对其进行初始化操作,使其生效生成初始化数据文件,这是和管理节点、SQL节点所不一样的地方。具体操作是在 mysql06 和 mysql07 节点上执行如下命令。mysql06节点:

[mysql@mysql06 ~]$ ndbd --initial

mysql07 节点:

[mysql@mysql07 ~]$ ndbd --initial

然后我们就可以在 mysql06 和 mysql07 节点上,查看到已经生成了相应的初始化数据文件。mysql06节点:

[root@mysql06 ndb_2_fs]# ls -l /mysql/mydata/
total 52
drwxr-x--- 11 root root    99 Mar  8 22:34 ndb_2_fs
-rw-r--r--  1 root root 47989 Mar 10 06:52 ndb_2_out.log
-rw-r--r--  1 root root     4 Mar  8 22:34 ndb_2.pid
[root@mysql06 ndb_2_fs]# ls -l /mysql/mydata/ndb_2_fs
total 0
drwxr-x--- 5 root root 48 Mar  8 22:34 D1
drwxr-x--- 3 root root 19 Mar  8 22:34 D10
drwxr-x--- 3 root root 19 Mar  8 22:34 D11
drwxr-x--- 5 root root 48 Mar  8 22:34 D2
drwxr-x--- 3 root root 19 Mar  8 22:34 D8
drwxr-x--- 3 root root 19 Mar  8 22:34 D9
drwxr-x--- 5 root root 33 Mar  9 16:55 LCP
drwxr-x--- 2 root root  6 Mar  8 22:34 LG
drwxr-x--- 2 root root  6 Mar  8 22:34 TS

同时可以可以看到,在 mysql06 和 mysql07 节点上,启动了相应的进程。mysql06 节点:

[mysql@mysql06 ~]$ ps -ef | grep mysql
mysql      1299      1  0 Mar08 ?        00:00:54 /usr/local/mysql/bin/ndbd --initial
mysql      1300   1299  2 Mar08 ?        00:48:52 /usr/local/mysql/bin/ndbd --initial

mysql07 节点:

[mysql@mysql07 ~]$ ps -ef | grep mysql
mysql      1297      1  0 Mar08 ?        00:00:52 /usr/local/mysql/bin/ndbd --initial
mysql      1298   1297  2 Mar08 ?        00:46:51 /usr/local/mysql/bin/ndbd --initial

最后,我们再回到管理节点上,查看下 MySQL Cluster 集群环境的配置信息。

[mysql@mysql03 ~]$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.6 (mysql-5.7.36 ndb-7.6.20, Nodegroup: 0, *)
id=3 @192.168.1.7 (mysql-5.7.36 ndb-7.6.20, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.3 (mysql-5.7.36 ndb-7.6.20)
[mysqld(API)] 2 node(s)
id=4 @192.168.1.4 (mysql-5.7.36 ndb-7.6.20)
id=5 @192.168.1.5 (mysql-5.7.36 ndb-7.6.20)

好了,到现在为止,我们用了 3 个小节来对 MySQL Cluster 集群环境的安装配置进行了讲解和演示。整个的安装过程其实是非常简单的,大家可以按照上面讲解的步骤在自己的环境中多多练习。

在下面的几个小节中,我们会对配置好的 MySQL Cluster 环境的日常操作,例如如何启动、如何关闭及当某个节点出现故障时,如何进行修复等内容进行讲解。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
7天前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
4天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
27 6
|
4天前
|
关系型数据库 MySQL 数据处理
针对MySQL亿级数据的高效插入策略与性能优化技巧
在处理MySQL亿级数据的高效插入和性能优化时,以上提到的策略和技巧可以显著提升数据处理速度,减少系统负担,并保持数据的稳定性和一致性。正确实施这些策略需要深入理解MySQL的工作原理和业务需求,以便做出最适合的配置调整。
29 6
|
5天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
19 2
|
4天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
6天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
69 11
|
25天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
29天前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
1天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
27 13
MySQL的安装&数据库的简单操作