Redhat 6.5下MySQL5.6集群配置方法完整版
1、准备三台服务器
2、为三台机器分别安装Linux操作系统(OracleLinux/RHEL6.5x86_64bit)
3、分别IP地址
管理节点 192.168.1.110 (负责管理整个集群)
SQL节点 192.168.1.111 (负责操作数据库)
SQL节点 192.168.1.112 (负责操作数据库)
数据节点 192.168.1.111 (负责存储数据)
数据节点 192.168.1.112 (负责存储数据)
SQL节点和数据节点可以同在一台机器上
4、修改三台服务器的/etc/hosts文件,修改完后的内容如下:
127.0.0.1 localhost localhost.domain
192.168.1.110 node01
192.168.1.111 node02
192.168.1.112 node03
5、修改三台服务器的/etc/sysconfig/nework文件,修改完后的内容分别如下:
NETWORKING=yes HOSTNAME=node01 GATEWAY=192.168.1.1 (网关地址因所处网络的不同而不同) NETWORKING=yes HOSTNAME=node02 GATEWAY=192.168.1.1 (网关地址因所处网络的不同而不同) NETWORKING=yes HOSTNAME=node03 GATEWAY=192.168.1.1 (网关地址因所处网络的不同而不同)
6、分别重启三台服务器
7、下载NDB集群软件mysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz
集群软件有三种格式:
a、以tar.gz结尾的二制进格式
b、以rpm结尾的rpm包形式
c、以源文件编译安装方式
rpm包安装方式,由于是自动安装的,所以不方便配置软件安装位置和数据存储位置
所以通常选用.tar.gz结尾的二进制格式的安装文件
注意:mysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz包含了mysql数据库软件和NDB集群软件
8、分别复制mysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz文件到三台服务器上的/usr/local/目录下
9、新建用户mysql
#groupaddmysql
#useradd-r-gmysqlmysql (由于mysql用户只是用于安装配置NDB集群或mysql软件,而不用用于登陆系统)
(所以以-r参数来创建mysql用户,并且不用为该用户设置密码)
10、分别在三台服务器上解压mysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz文件
#cd/usr/local #tarzxvfmysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz #ln-smysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64 mysql #chown-Rmysql.mysqlmysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64 #cdmysql #chown-Rmysql.mysql.
配置完成以后,结果如下
11、在192.168.1.111和192.168.1.112两个数据节点(两台服务器)上安装mysql数据库软件
由于是二进制安装,所以mysql数据库软件就安装在/usr/local/mysql下,
但数据库的数据可以存放到其它地方,如/u01/app/mysql/data/下面
注意:以下命令在两台数据节点服务器上都要执行
#mkdir-p/u01/app/mysql/data
#chown-Rmysql.mysql/u01
#cd/usr/local/mysql
#scripts/mysql_install_db--basedir=/usr/local/mysql --datadir=/u01/app/mysql/data--user=mysql
执行完这条命令以后,数据库的数据文件(包括mysql,test,performance_schema等数据库)就被安装到了
/u01/app/mysql/data目录下了
#cpbin/ndbd /usr/local/bin/
#cpbin/ndbmtd/usr/local/bin/
然后将启动数据库服务的启动文件复制到/etc/rc.d/init.d/目录下
#cpsupport-files/mysql.server /etc/rc.d/init.d/mysqld (改名)
执行完上面这条命令以后,就可以使用servicemysqldstart|stop|restart命令来管理数据库服务了
#cpmy.cnf /etc/my.cnf
#vi/etc/my.cnf
[mysqld]
ndbcluster
basedir=/usr/local/mysql
datadir=/u01/app/mysql/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql_cluster]
ndb-connectstring=192.168.1.110
再次注意:以上命令在两台数据节点服务器上都要执行
到此,数据节点和SQL节点的安装配置就结束了,如果数据节点和SQL节点是分开在不同的机器上,则每个数据节点
和每个SQL节点都要执行以上命令。
12、在管理节点上进行安装配置
由于第10步已经解压缩mysql-cluster-advanced-7.3.5-linux-glibc2.5-x86_64.tar.gz安装包到了/usr/local
目录下,并进行了软连接等操作,所以这些工作就不用重复做了,接着往下配置即可
#cd/usr/local/mysql
#mkdirmysql-cluster (创建mysql-cluster目录,后面启动集群管理服务时要用)
#cpbin/ndb_mgm* /usr/local/bin/
#cd/var/lib
#mkdirmysql-cluster
#cdmysql-cluster
#viconfig.ini (这是管理节点上的集群配置文件,很重要)
[ndbddefault]
NoOfReplicas=1 #Numberofreplicas
DataMemory=80M #Howmuchmemorytoallocatefordatastorage
IndexMemory=18M #Howmuchmemorytoallocateforindexstorage
#ForDataMemoryandIndexMemory,wehaveusedthe
#defaultvalues.Sincethe"world"databasetakesup
#onlyabout500KB,thisshouldbemorethanenoughfor
#thisexampleClustersetup.
[tcpdefault]
#Thisthedefault;however,youcanuseany
#portthatisfreeforallthehostsinthecluster
#Note:Itisrecommendedthatyoudonotspecifytheport
#numberatallandsimplyallowthedefaultvaluetobeused
#instead
[ndb_mgmd]
hostname=192.168.1.110 #HostnameorIPaddressofMGMnode
datadir=/var/lib/mysql-cluster #DirectoryforMGMnodelogfiles
NodeId=1
[ndbd]
hostname=192.168.1.111 #HostnameorIPaddress
datadir=/u01/app/mysql/data #Directoryforthisdatanode'sdatafiles
NodeId=2
[ndbd]
hostname=192.168.1.112 #HostnameorIPaddress
datadir=/u01/app/mysql/data #Directoryforthisdatanode'sdatafiles
NodeId=3
[mysqld]
hostname=192.168.1.111 #HostnameorIPaddress
NodeId=4 #(additionalmysqldconnectionscanbe
#specifiedforthisnodeforvarious
#purposessuchasrunningndb_restore)
[mysqld]
hostname=192.168.1.112 #HostnameorIPaddress
NodeId=5 #(additionalmysqldconnectionscanbe
#specifiedforthisnodeforvarious
#purposessuchasrunningndb_restore)
配置说明:
[ndbddefault] 这部分是公共部分,对于每一个数据节点都有效,只需要配置一份
NoOfReplicas=1 数据镜像几份(各数据节点之间相互备份)
[tcpdefault] 针对每个数据节点及管理节点之间使用哪个端口进行通讯,
在旧版本的NDB集群软件配置时,这个地方通常配置portnumber=2202
但新版的NDB软件这里不需要配置,并且MySQL官方也强烈建议不要配置
[ndb_mgmd] 管理节点的配置部分(通常只有一个)
注意NodeId=1指明管理节点的节点ID为1,如果不指定,在启动集群时,会报错
hostname=192.168.1.110 指明管理节点的IP地址
datadir=/var/lib/mysql-cluster 指明集群管理日志存放的位置
[ndbd] 数据节点配置部分,有几个数据节点就配置几个[ndbd]
hostname=192.168.1.111 指明数据节点的IP地址
datadir=/u01/app/mysql/data 指明数据节点上的数据库文件存放的位置
NodeId=2 指明该数据节点在整个集群中的nodeid号(很重要)
[mysqld] SQL节点配置部分,有几个SQL节点,就配置几个[mysqld]
13、配置好上面的所有配置以后就可以在管理节点上启动怎个集群了
注意:在管理节点上,不用执行/usr/local/mysql/scripts/mysql_install_db--basedir=--datadir=--user=命令
来安装数据库了。
#ndb_mgmd-f/var/lib/mysql-cluster/config.ini(第一次启动时这样执行,如果后面新添加了数据节点)
(执行此命令时,需要带上--initital参数,否则新添加的节点)
(无法被识别)
(#ndb_mgmd-f/var/lib/mysql-cluster/config.ini--initial)
#ndb_mgm(查看启动后的集群状态,看看集群是否成功启动,如果看到以下内容,表示集群已经成功配置并启动)
[root@mysql01mysql-cluster]#ndb_mgm
--NDBCluster--ManagementClient--
ndb_mgm>show
ConnectedtoManagementServerat:localhost:1186
ClusterConfiguration
---------------------
[ndbd(NDB)]2node(s)
id=2(notconnected,acceptingconnectfrom192.168.1.111)
id=3(notconnected,acceptingconnectfrom192.168.1.112)
[ndb_mgmd(MGM)]1node(s)
id=1@192.168.1.110(mysql-5.6.17ndb-7.3.5)
[mysqld(API)]2node(s)
id=4(notconnected,acceptingconnectfrom192.168.1.111)
id=5(notconnected,acceptingconnectfrom192.168.1.112)
现在看到集群中包含两个数据节点、一个管理节点、两个SQL节点,但是数据节点和SQL节点都还没有启动,
所以显示的连接状态是notconnected
14、分别登陆两台数据节点执行以下命令启动数据节点
#ndbd--initial(第一次启动时,需要加--initial来初始化数据节点,第二次启动时,就不需要这个参数了)
[root@mysql02support-files]#ndbd--initial
2014-06-1205:42:04[ndbd]INFO--Angelconnectedto'192.168.1.110:1186'
2014-06-1205:42:04[ndbd]INFO--Angelallocatednodeid:2
[root@mysql03bin]#ndbd--initial
2014-06-1205:41:38[ndbd]INFO--Angelconnectedto'192.168.1.110:1186'
2014-06-1205:41:38[ndbd]INFO--Angelallocatednodeid:3
15、再登陆到管理节点查看现在整个集群的状态
ndb_mgm>show
ClusterConfiguration
---------------------
[ndbd(NDB)]2node(s)
id=2@192.168.1.111(mysql-5.6.17ndb-7.3.5,Nodegroup:0,*)
id=3@192.168.1.112(mysql-5.6.17ndb-7.3.5,Nodegroup:1)
[ndb_mgmd(MGM)]1node(s)
id=1@192.168.1.110(mysql-5.6.17ndb-7.3.5)
[mysqld(API)]2node(s)
id=4(notconnected,acceptingconnectfrom192.168.1.111)
id=5(notconnected,acceptingconnectfrom192.168.1.112)
现在可以看到,两个数据节点已经连接上来了,表示两个数据节点成功启动了
16、分别登陆到两个SQL节点上启动SQL节点
[root@mysql02~]#cd/usr/local/mysql/bin
[root@mysql02bin]#./mysqld_safe--user=mysql
14061205:51:00mysqld_safeLoggingto'/u01/app/mysql/data/mysql02.err'.
14061205:51:00mysqld_safeStartingmysqlddaemonwithdatabasesfrom/u01/app/mysql/data
[root@mysql03~]#cd/usr/local/mysql/bin
[root@mysql03bin]#./mysqld_safe--user=mysql
14061205:52:07mysqld_safeLoggingto'/u01/app/mysql/data/mysql03.err'.
14061205:52:07mysqld_safeStartingmysqlddaemonwithdatabasesfrom/u01/app/mysql/data
17、再次回到管理节点查看整个集群的状态
ndb_mgm>show
ClusterConfiguration
---------------------
[ndbd(NDB)]2node(s)
id=2@192.168.1.111(mysql-5.6.17ndb-7.3.5,Nodegroup:0,*)
id=3@192.168.1.112(mysql-5.6.17ndb-7.3.5,Nodegroup:1)
[ndb_mgmd(MGM)]1node(s)
id=1@192.168.1.110(mysql-5.6.17ndb-7.3.5)
[mysqld(API)]2node(s)
id=4@192.168.1.111(mysql-5.6.17ndb-7.3.5)
id=5@192.168.1.112(mysql-5.6.17ndb-7.3.5)
到此整个集群就搭建完成,并成功启动运行了
18、安全关闭整个集群
首先登陆到两个SQL节点,执行servicemysqldstop命令关闭SQL节点
[root@mysql02~]#servicemysqldstop
ShuttingdownMySQL......SUCCESS!
[root@mysql03~]#servicemysqldstop
ShuttingdownMySQL.....SUCCESS!
然后登陆到管理节点上,执行shutdown命令关闭整个集群
[root@mysql01mysql-cluster]#ndb_mgm
--NDBCluster--ManagementClient--
ndb_mgm>show
ConnectedtoManagementServerat:localhost:1186
ClusterConfiguration
---------------------
[ndbd(NDB)]2node(s)
id=2(notconnected,acceptingconnectfrom192.168.1.111)
id=3(notconnected,acceptingconnectfrom192.168.1.112)
[ndb_mgmd(MGM)]1node(s)
id=1@192.168.1.110(mysql-5.6.17ndb-7.3.5)
[mysqld(API)]2node(s)
id=4(notconnected,acceptingconnectfrom192.168.1.111)
id=5(notconnected,acceptingconnectfrom192.168.1.112)
ndb_mgm>shutdown
1NDBClusternode(s)haveshutdown.
Disconnectingtoallowmanagementservertoshutdown.
ndb_mgm>exit
7测试。
1、从SQL节点A登录,创建数据库和表,进行简单测试。
mysql>createdatabasezxztest;
mysql>usezxztest;
Databasechanged
mysql>createtabletest1(idint,namevarchar(10))engine=ndb;
mysql>insertintotest1values(1,'linuxidc');
mysql>select*fromtest1;
+------+---------+
|id|name|
+------+---------+
|1|linuxidc|
+------+---------+