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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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 环境的日常操作,例如如何启动、如何关闭及当某个节点出现故障时,如何进行修复等内容进行讲解。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
21天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
20天前
|
SQL 关系型数据库 MySQL
MySQL 高级(进阶) SQL 语句
MySQL 提供了丰富的高级 SQL 语句功能,能够处理复杂的数据查询和管理需求。通过掌握窗口函数、子查询、联合查询、复杂连接操作和事务处理等高级技术,能够大幅提升数据库操作的效率和灵活性。在实际应用中,合理使用这些高级功能,可以更高效地管理和查询数据,满足多样化的业务需求。
62 3
|
23天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
25天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
分布式计算 关系型数据库 MySQL
E-Mapreduce如何处理RDS的数据
目前网站的一些业务数据存在了数据库中,这些数据往往需要做进一步的分析,如:需要跟一些日志数据关联分析,或者需要进行一些如机器学习的分析。在阿里云上,目前E-Mapreduce可以满足这类进一步分析的需求。
4981 0
|
5天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
19 3
|
5天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
24 3
|
5天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
29 2
|
18天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
130 15