一。安装mysql集群版本
首先下载二进制版本的mysql集群 传送门 。这里我下载的是7.4.13.
二。sql节点:在每一个主机上使用root权限来执行一下步骤。
shell>groupadd mysql
shell>useradd -g mysql -s /bin/false mysql
执行上面命令,增加mysql用户组以及mysql用户。(注意,有些linux发行版本可能命令不一样,例如,我使用的Debian,使用的是上面的命令,但是有些可能是使用 adduser和addgroup命令)。
1. 将下载后的文件放在 /var/tmp 文件夹上,然后创建软连接。
shell>cd /var/tmp
shell>tar -C /usr/local -xzvf mysql-cluster-gpl-7.4.13-linux2.6.tar.gz
shell>ln -s /usr/local/mysql-cluster-gpl-7.4.13-linux2.6-i686 /usr/local/mysql
2. 进入mysql目录,执行提供的脚本创建系统数据库
shell>cd mysql
shell>scripts/mysql_install_db --user=mysql
3. 为mysql服务器和数据目录设置必要的权限
shell>chown -R root .
shell>chown -R mysql data
shell>chgrp -R mysql .
4. 拷贝mysql的启动脚本到相应的目录,让它可执行,并且设置为开机启动
shell>cp support-files/mysql.server /etc/rc.d/init.d/
shell>chmod +x /etc/rc.d/init.d/mysql.server
shell>chkconfig --add mysql.server
这里需要注意的是,不同的linxu发行版本的开机启动脚本的所在目录可能不尽相同,使用一切手段找到这个目录。我的Debian上,目录是 /etc/init.d
上面的chkconfig命令适用于ret hat,至于其他版本,需要你自己去搜索。在Debian上,命令是 update-rc.d --add mysql.server.
5. 上面每一个步骤,都需要在每个sql节点(主机)上设置相同的操作。
三。数据节点
安装数据节点并不需要用到mysqld二进制文件,只需要用到 ndbd(单线程)或者ndbmtd(多线程)即可。下面操作使用root权限
1. 进入/var/tmp/mysql目录,将bin/ndbd拷贝到/usr/local/bin/ndbd,将bin/ndbmtd拷贝到/usr/local/bin/ndbmtd
shell>cd mysql
shell>cp bin/ndbd /usr/local/bin/ndbd
shell>cp bin/ndbmtd /usr/local/bin/ndbmtd
2. 进入/usr/local/bin, 执行一下命令
shell>cd /usr/local/bin
shell>chmod +x ndb*
四。管理节点
1. 和上面安装数据节点一样,也是不需要mysqld,只需要管理服务ndb_mgmd即可。顺便也安装一下ndb_mgm命令吧,可以查看并且管理各种节点。
shell>cd /var/tmp/mysql
shell>cp bin/ndb_mgm* /usr/local/bin
2. 同样的,进入/usr/local/bin,赋予ndb_mgm*相关权限
shell>cd /usr/local/bin
shell>chmod +x ndb_mgm*
五。初始化配置文件
1. 每个数据节点和sql节点需要一个配置文件 my.cnf ,用来配置connection-string(找到相应的管理节点),并且让mysqld开启 ndbcluster 存储引擎
2. 每个管理节点需要配置文件 config.ini文件,来配置节点的部署以及内存限制等等相关事宜。
3. 数据节点和sql节点配置。使用你喜欢的工具打开/etc/my.cnf(不存在的话就新建一个),比如vim
shell> vi /etc/my.cnf
配置如下
[mysqld]
# Options for mysqld process:
ndbcluster
# run NDB storage engine
[mysql_cluster]
# Options for MySQL Cluster processes:
ndb-connectstring=192.168.0.10
# location of management server
在数据节点和sql节点均要配置此文件。
注意:一旦你使用了参数ndbcluster 和ndb-connectstring启动mysqld进程,正如先前的my.cnf文件的参数所示。 在集群没有完全开启之前,你不能执行创建或者改变表的语句,否则会报错。真的。
4. 配置管理节点
使用root权限执行一下步骤
shell>mkdir /var/lib/mysql-cluster
shell>cd /var/lib/mysql-cluster
shell>vi config.ini
键入以下代码
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
[tcp default]
# TCP/IP options:
portnumber=2202 # This the default; however, you can use any
# port that is free for all the hosts in the cluster
# Note: It is recommended that you do not specify the port
# number at all and simply allow the default value to be used
# instead
[ndb_mgmd]
# Management process options:
hostname=192.168.0.10 # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node log files
[ndbd]
# Options for data node "A":
# (one [ndbd] section per data node)
hostname=192.168.0.30 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[ndbd]
# Options for data node "B":
hostname=192.168.0.40 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[mysqld]
# SQL node options:
hostname=192.168.0.20 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
上面的注释就不多说了(我不懂,哈哈哈)
六。启动Mysql集群
只要配置成功之后,要启动集群并不是一件很难的事情(真的吗?)。每个node节点都分别启动。这里稍微注意的是,管理节点必须首先启动,然后是数据节点,最后才是sql节点。记住,不然会报错的。亲测。
1. 启动管理节点
shell>ndb_mgmd -f /var/lib/mysql-cluster/config.ini
首次启动管理节点,ndb_mgmd必须带上参数,告诉我们配置文件(使用 -f或者--config-file参数)
2. 在每个数据节点的主机,执行一下命令开启ndbd进程
shell>ndbd
3. 如果你使用RPM文件安装Mysql,你可以(必须)用提供的脚本启动Mysql服务进程启动sql节点。
4. 如果所有步骤都弄好了,那mysql集群也就算是搭建好了。你可以使用ndb_mgm命令来管理节点客户端(数据节点和sql节点)。看起来,应该像下面所示
shell>ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>SHOWConnected to Management Server at: localhost:1186Cluster Configuration---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.30 (Version: 5.6.32-ndb-7.4.13, Nodegroup: 0, *)
id=3 @192.168.0.40 (Version: 5.6.32-ndb-7.4.13, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.10 (Version: 5.6.32-ndb-7.4.13)
[mysqld(API)] 1 node(s)
id=4 @192.168.0.20 (Version: 5.6.32-ndb-7.4.13)
上面的[mysqld(API)]就是sql节点了。这就告诉我们一件事,mysqld进程作为一个集群api存在