上次的博文中咱们介绍了一下集群的相关概念,今天的博文咱们介绍一下MySQL集群的相关内容。
node
MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,加强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性获得保障。
MySQL群集须要有一组计算机,每台计算机的角色多是不同的。MySQL群集中有三种节点:管理节点、数据节点和SQL节点。群集中的某计算机多是某一种节点,也多是两种或三种节点的集合。这三种节点只是在逻辑上的划分,因此它们不必定和物理计算机是一一对应的关系。
管理节点(也能够称管理服务器)主要负责管理数据节点和SQL节点,还有群集配置文件和群集日志文件。它监控其余节点的工做状态,可以启动、关闭或重启某个节点。其余节点从管理节点检索配置数据,当数据节点有新事件时就把事件信息发送给管理节点并写入群集日志。
数据节点用于存储数据。
SQL节点跟通常的MySQL服务器是同样的,咱们能够经过它进行SQL操做。
mysql
下图中画出了三种群集节点及应用程序间的关系:sql
下载MySQL集群:http://dev.mysql.com/downloads/cluster/数据库
mysql-cluster-gpl-7.3.5-winx64.zip:
http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.5-winx64.zip
mysql-cluster-gpl-7.3.5-win32.zip:
http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.5-win32.zip
安全
首先找三台电脑,或者是开三个虚拟机,管理节点部署在一台机子上,其余两台每台都部署一个数据节点和一个SQL节点。这里以两台机子举例,其中一台(IP为192.168.24.16)部署管理节点、数据节点和SQL节点,另外一台(IP为192.168.24.43)部署数据节点和SQL节点。
实际应用中,不要将管理节点跟数据节点部署到一台机子上,由于若是数据节点宕机会致使管理节点不可用,同时整个MySQL群集也就都不可用了。因此一个MySQL群集理想状况下至少有三台服务器,将管理节点单独放到一台服务器上。这里以两台举例,只是为了说明三种节点的配置启动方法。
服务器
一、在IP为192.168.24.16的主机的C盘中新建文件夹mysql,而后在此文件夹下新建子目录bin和mysql-cluster,再将安装包中的bin目录下的ndb_mgm.exe和ndb_mgmd.exe拷贝到C:\mysql\bin下。在目录C:\mysql\bin下新建cluster-logs目录、config.ini文件和my.ini文件。
二、config.ini文件内容以下:编辑器
[ndbd default] # Options affecting ndbd processes on all data nodes: # Number of replicas NoOfReplicas=2 DataDir=c:/mysqlcluster/datanode/mysql/bin/cluster-data # Directory for each data node's data files # Memory allocated to data storage DataMemory=80M # Memory allocated to index storage IndexMemory=18M # For DataMemory and IndexMemory, we have used the # default values. [ndb_mgmd] # Management process options: # Hostname or IP address of management node HostName=192.168.24.16 # Directory for management node log files DataDir=C:/mysql/bin/cluster-logs [ndbd] # Options for data node "A": # (one [ndbd] section per data node) # Hostname or IP address HostName=192.168.24.16 [ndbd] # Options for data node "B": # Hostname or IP address HostName=192.168.24.43 [mysqld] # SQL node options: # Hostname or IP address HostName=192.168.24.16 [mysqld] # SQL node options: # Hostname or IP address HostName=192.168.24.43
三、my.ini中的内容以下:分布式
[mysql_cluster] # Options for management node process config-file=C:/mysql/bin/config.ini
一、在IP为192.168.24.16的主机中新建文件夹C:\mysqlcluster\datanode\mysql,而后在此文件夹中继续新建子目录bin和cluster-data,bin下再建一个子目录也叫cluster-data。
二、将安装包data目录下的全部文件拷贝到C:\mysqlcluster\datanode\mysql\cluster-data下
三、将安装包中bin目录下的ndbd.exe拷贝到C:\mysqlcluster\datanode\mysql\bin下,并在C:\mysqlcluster\datanode\mysql中新建my.ini文件,文件内容为:测试
[mysql_cluster] # Optionsfor data node process: #location of management server ndb-connectstring=192.168.24.16
注:由于数据节点的配置是同样的,因此咱们能够直接将192.168.24.16主机中的文件夹C:\mysqlcluster拷贝到192.168.24.43主机的C盘下。
spa
一、在192.168.24.16主机的C:\mysqlcluster下新建子目录sqlnode,在C:\mysqlcluster\sqlnode下新建子目录mysql,将安装包文件解压到mysql目录下,而后在C:\mysqlcluster\sqlnode\mysql下新建my.ini文件,文件内容为:
[mysqld] # Options for mysqld process: # run NDB storage engine ndbcluster # location of management server ndb-connectstring=192.168.24.16
二、将my-default.ini 文件删除或改名为my-default.ini.bak
注:由于SQL节点的配置也是同样的,因此咱们能够直接将192.168.24.16主机中的文件夹C:\mysqlcluster\sqlnode文件夹整个拷贝到192.168.24.43主机的C盘下。
在启动MySQL Cluster以前,首先要作的是保证每一个SQL节点上的MySQL服务可以启动成功,并为每一个SQL节点进行相关权限的分配以保证可以远程登陆访问。而后依次启动三种节点。三种节点服务启动时,必定要按照先启动管理节点,后启动数据节点,再启动SQL节点的顺序进行。
一、进入C:\mysqlcluster\sqlnode\mysql\bin目录下,使用mysqld –install安装MySQL服务
二、使用net start mysql命令启动MySQL服务
一、进入C:\mysqlcluster\sqlnode\mysql\bin目录下,使用mysql –uroot –p,而后输入密码,设置root用户密码。
注:第一次输入的密码,即默认设置为root密码。
二、切换到mysql数据库,输入如下命令,为root用户分配远程链接的相关权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
一、在192.168.24.16主机中打开命令行窗口,切到C:\mysql\bin目录,输入:
ndb_mgmd -f config.ini --configdir=C:\mysql\mysql-cluster
回车,管理节点服务就启动了,命令行上可能没有任何提示信息,能够打开C:\mysql\bin\cluster-logs\ndb_1_cluster.log日志文件查看启动信息。
注意,此命令行窗口不能关闭,除非你想中止服务。
二、也能够将其作成服务,在命令行中输入:
ndb_mgmd --install=ndb_mgmd -f config.ini --configdir=C:\mysql\mysql-cluster
一、在192.168.24.16主机中打开新命令行窗口,切到C:\mysqlcluster\datanode\mysql\bin,输入:
ndbd
二、也能够将其作成服务,在命令行中输入:
ndbd --install=ndbd
三、以相同的方法在其余数据节点,即192.168.24.43中启动数据节点服务。
四、在192.168.24.16主机中打开新命令行窗口,切到目录C:\mysql\bin,输入:
ndb_mgm
回车,而后再输入:
ALL STATUS
回车,就能够查看数据节点的链接信息了。
一、在192.168.24.16主机中打开新命令行窗口,切到C:\mysqlcluster\sqlnode\mysql\bin,输入:
mysqld --console
回车,SQL节点启动。
二、也能够将其作成服务,输入:
mysqld -install mysql
三、以相同的方法在其余SQL节点,即192.168.24.43中启动SQL节点。
四、想要查看SQL节点的启动状况能够在192.168.1.10主机中一样打开新命令行,输入:
ndb_mgm
回车,再输入:
SHOW
回车,就能够看到SQL节点的链接状况了。
1)、在任一SQL结点,即192.168.24.16主机上新建立一个数据库myDB,能够看到其余SQL结点,即192.168.24.43均建立了一个MyDB数据库
2)、在任一SQL结点,即192.168.24.16主机上的myDB中使用
create table student (id int(2)) engine=ndbcluster;
新建一个student表,能够看到其余SQL结点,即192.168.24.43均在myDB数据库中建立了一个student表
3)、在任一SQL结点,即192.168.24.16主机上的myDB中的student表插入几条数据以后,能够看到其余SQL结点,即192.168.24.43均做了相关的变化
注:与没有使用 Cluster的MySQL相比,在MySQL Cluster内操做数据的方式没有太大的区别。执行这类操做时应记住两点:
一、表必须用ENGINE=NDB或ENGINE=NDBCLUSTER选项建立,或用ALTER TABLE选项更改,以使用NDB Cluster存储引擎在 Cluster内复制它们。若是使用mysqldump的输出从已有数据库导入表,可在文本编辑器中打开SQL脚本,并将该选项添加到任何表建立语句,或用这类选项之一替换任何已有的ENGINE(或TYPE)选项。
二、另外还请记住,每一个NDB表必须有一个主键。若是在建立表时用户未定义主键,NDB Cluster存储引擎将自动生成隐含的主键。(注释:该隐含 键也将占用空间,就像任何其余的表索引同样。因为没有足够的内存来容纳这些自动建立的键,出现问题并不罕见)。
到此为止关于MySQL集群的搭建就讲解完毕了,可是单纯的按照这样搭建还有一个缺陷,什么缺陷呢?我们下次讲解,敬请期待!