在上一小节中,我们简单讲解了 MySQL-Cluster 的管理节点,为了明白 MySQL-Cluster 集群中每个节点的作用,在这一小节中,我们来认识一下 MySQL-Cluster 集群中的 SQL 节点。
MySQL-Cluster 中的 SQL 节点,就是我们之前学习到的 mysqld 服务器,SQL节点是应用访问数据的入口,但却不存储任何数据。
在 MySQL-Cluster 集群中,数据是存储在数据节点上的,当业务系统需要访问数据时,首先会连接到 SQL 节点上,然后 SQL 节点接收 SQL 语句后进行解析,之后再到数据节点中进行数据的提取,最后再由 SQL 节点将数据返回给应用端。
具体流程图,如下所示:
一般来说,SQL 节点越多,分配到每个 SQL 节点的负荷就越小,MySQL-Cluster 整体的性能就越好。
那么对于 SQL 节点的日常操作和我们之前学习的 MySQL 的操作基本上相同。
对于 SQL 节点的服务同样是使用 mysqld 或者 mysql_safe 工具来启动,在 SQL 节点的配置文件中会记录服务的端口及数据目录还有管理节点的地址,具体 SQL 节点配置文件的示例如下所示:
[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
我们可以看到,在配置文件中,很多参数内容都和 MySQL 服务的内容一样,比如[mysqld]和[client]中配置的参数基本上是一样的。不过你要注意,虽然在 SQL 节点的配置文件中有数据文件目录参数,但是对于 MySQL-Cluster 集群的业务数据实际上是存储在数据节点上,所以在 SQL 节点上的数据目录下只会记录一些元数据信息。
那么,这里我要讲一个在工作中大家经常困惑的知识点,就是刚才我们提到,在对 MySQL-Cluster 进行数据操作时,需要连接 SQL 节点,但是在 MySQL-Cluster 的集群环境中,一般会配置多个 SQL 节点,这时你要连接哪个节点进行操作呢?
其实连接哪个节点都可以,在每个 SQL 节点之间数据是相互同步的。工作中,我们一般只会给应用提供一个连接数据库的地址,即一个 VIP,而 MySQL-Cluster 集群环境并没有 VIP 功能,所以使用 MySQL-Cluster 集群环境时往往要结合其他工具来进行使用,如Keepalived 工具就是使用比较普遍的一款 VIP 工具。
最后,还要强调一点的是,对于 MySQL-Cluster 集群环境下的表对象,我们要使用 NDB 存储引擎,而不是之前我们所熟悉的 InnoDB 存储引擎,即在创建表的时候,使用如下的方式来进行表创建:
mysql> create table tt1 (id int,name varchar(10)) ENGINE=ndb; Query OK, 0 rows affected (0.11 sec)
好了,关于 SQL 节点,我们就讲这么多,在下一小节我们来认识下 MySQL-Cluster 集群的数据节点,希望今天的内容你能有所收获。