领导给派了个安装MySQL集群的活,然后就开始啃文档,啃完之后自己配置,然后一堆的错,没法处理,耽误了好久,弄了两个星期多才弄出来,中间很苦逼,就是Linux很菜的,所以文件权限,iptables,ip地址这些就整疯了哦,但是最终也还是弄出来了,开心到死啊,简单记录一下。
首先上文档:
为集群的每台host下载MySQL集群版本,假定放入到每台机器的/var/tmp目录下。
我们现有四台机器,他们的IP如下:
192.168.13.134-----------安装为管理节点
192.168.13.136-----------安装为SQL节点
192.168.13.129-----------安装为数据节点
192.168.13.132-----------安装为数据节点
在四台计算机上建立mysql用户:
shell> groupadd mysql shell> useradd -g mysql -s /bin/false mysql |
1.安装
1.1安装SQL节点
在被指派为hostSQL节点的每一台机器上,以系统root用户执行下面的步骤:
1. 定位到包含下载文件的路径下,解压文件,然后创建一个名为mysql的象征性连接到这个mysql文件夹。
shell> cd /var/tmp shell> tar -C /usr/local -xzvf mysql-cluster-gpl-7.4.11-linux2.6.tar.gz shell> ln -s /usr/local/mysql-cluster-gpl-7.4.11-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启动脚本到合适的目录,使他可执行,并且将它设置为当操作系统启动时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 |
根绝你的操作系统和版本,这个启动脚本目录可能不同,比如,在一些Linux版本中,这个目录是/etc/init.d。
在这里我们使用红帽的chkconfig来创建到启动脚本的连接,在你的平台上只要能达到这个目的,你可以使用任意方式,比如在Debian上使用update-rc.d。
之前的步骤必须在SQL节点所在的每一台机器上执行一遍。我们只在192.168.1.101上执行。
1.2安装数据节点
数据节点的安装不需要mysqld程序。只需要MySQL集群数据节点执行的ndbd(单线程)或ndbmtd(多线程)守护进程。这些可执行文件也可以在.tar.gz文件中获得。
以系统root账号(也就是,在使用sudo,su root或者你的系统的等价命令之后,暂时假定以系统管理源账号的权限)执行下面的步骤 在数据节点的host上安装数据节点复体:
1. 定位到/var/tmp路径下,从压缩文件中抽取ndbd和ndbmtd到一个合适的路径下,比如/usr/local/bin路径下:
shell> cd /var/tmp shell> tar -zxvf mysql-5.6.29-ndb-7.4.11-linux-i686-glibc23.tar.gz shell> cd mysql-5.6.29-ndb-7.4.11-linux-i686-glibc23 shell> cp bin/ndbd /usr/local/bin/ndbd shell> cp bin/ndbmtd /usr/local/bin/ndbmtd |
2. 定位到你讲文件拷贝进入的目录下,然后使这两者可执行:
shell> cd /usr/local/bin shell> chmod +x ndb* |
步骤应该在每一台数据host上执行一遍。我们需要在192.168.1.102和192.168.1.103上执行。
即使数据节点可执行程序中只需要一个来运行一个MySQL集群节点,我们将如何安装ndbd和ndbmtd的方式都show给您。即使你只打算使用它们中的一个,我们建议当安装或升级MySQL集群时这样做,因为这将会在你之后从一个改变到另一个时保存时间和问题。
注意:在每个机器中保存数据节点的数据目录在 /usr/local/mysql/data。当配置管理节点时这条信息时必要的。(参见章节18.2.4——“MySQL集群的初始化配置”)。这个目录,没有的话要新建一下,并给mysql用户授权。
1.3安装管理节点
管理节点的安装不需要mysqld二进制。只需要MySQL集群管理服务(ndb_mgmd);你大概可能也想安装管理客户端(ndb_mgm).这两个二进制也是在.tar.gz archive那个压缩文件中找。同样的,我们假设你已经将这个文件放在/var/tmp路径下。
以系统root账号,执行下面的步骤来在管理节点主机上安装ndb_mgmd和ndb_mgm:
1. 切换路径到/var/tmp目录下,从压缩文件中抽取ndb_mgm 和 ndb_mgmd到一个合适的路径下,比如 /usr/local/bin下:
shell> cd /var/tmp shell> tar -zxvf mysql-5.6.29-ndb-7.4.11-linux2.6-i686.tar.gz shell> cd mysql-5.6.29-ndb-7.4.11-linux2.6-i686 shell> cp bin/ndb_mgm* /usr/local/bin |
2. 切换路径到你拷贝进入的那个路径下,然后使这两个文件可执行:
shell> cd /usr/local/bin shell> chmod +x ndb_mgm* |
2.MySQL集群的初始化配置
对我们的四个节点,四台主机的集群(参看集群节点和host计算机),需要写四个配置文件,每个节点host写一个文件。
每个数据节点或SQL节点需要一个my.cnf文件,该文件提供两条信息:一个连接字符串告诉节点到哪里去找主机节点,一行告诉在这台host(持有数据节点的机器)上的MySQL服务器使NDBCLUSTER存储引擎可用。
管理节点需要一个config.ini文件来告诉它有多少个副本要维持,为每个数据节点上的数据和索引分配多少内存,到哪里去查找数据节点,每个数据节点上的数据存储到磁盘哪里,到哪里去查找SQL节点。
2.1SQL节点和数据节点的配置
配置数据节点和SQL节点。数据节点需要的my.cnf文件相当的简单。配置文件应该位于/etc
路径下并且可被使用任何文本编辑器来编辑。(如果文件不存在就创建这个文件。)例如:
|
在我们的示例建设中,对于每一个数据节点和SQL节点,my.cnf应该看起来像这样:
|
为数据节点“A”,数据节点“B”,和SQL节点的机器做这些操作。
2.2管理节点的配置
配置管理节点。配置管理节点的第一步就是创建目录,在这个目录中可以找到配置文件,然后创建这个文件,例如(以系统root账号):
|
对于我们的代表性的配置,config.ini文件应该像下面这样:
备注:数据目录可以自定义,但是一定要记得给mysql权限啊!!!!! |
在所有的配置文件都被创建,这些最基本选项被指明之后,你就准备着手启动集群,验证所有进程都运行。
注意:集群管理节点的默认端口号是1186,数据节点默认端口号是2202(这个2202还是很有用的).然而,集群可以为数据节点从那些尚闲置的端口号中自动分配端口号。
3.MySQL集群的初始化启动
3.1启动管理节点
在管理host上,在系统shell执行下面的命令来启动管理节点进程:
shell> ndb_mgmd -f /var/lib/mysql-cluster/config.ini |
首次启动的时候,必须告诉ndb_mgmd到哪里去找他的配置文件,使用-f或--config-file选项。
3.2启动数据节点
在每一台数据host上,执行下面的命令来启动ndbd进程:
shell> ndbd |
3.3启动SQL节点
cd /usr/local/mysql bin/mysqld_safe --user=mysql & |
如果你已经运行好了,集群已经被正确的建立,你可以通过使用ndb_mgm管理节点来测试。输出结果应该像下面显示的这样,即时你可能在输出中看到一些稍微的不同,这取决于你使用的MySQL的具体版本。
类似下面这样。 shell> 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.0.30 (Version: 5.6.29-ndb-7.4.11, Nodegroup: 0, *) id=3 @192.168.0.40 (Version: 5.6.29-ndb-7.4.11, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.10 (Version: 5.6.29-ndb-7.4.11)
[mysqld(API)] 1 node(s) id=4 @192.168.0.20 (Version: 5.6.29-ndb-7.4.11) |
这里提到到SQL节点是指mysqld,mysqld反映了一个事实:mysqld进程是扮演一个MySQL集群的API节点的角色.
4.问题处理
4.1虚拟机的ip有时候重启后不一样,导致需要重新更改配置文件(正式服务器配置应该不会有这个问题)
解决方法:
1).chkconfig | grep NetworkManager
返回如图所示说明此服务开启,需要将之关闭
2).关闭NetworkManager服务:service NetworkManager stop
3).此时进行检查
发现还是有这个服务,因为NetworkManager是开机启动的,需要关闭开机启动:
4).chkconfig NetworkManager --del 进行删除,再检查
5)重启网络服务:service network restart
可以看到输出中Detemining IP information for eth0...因为此时的IP是dhcp分配的,我们需要手工设置一下固定IP:
6). vim /etc/sysconfig/network-scripts/ifcfg-eth0
进入编辑,
将NM_CONTROLLER改为no,表示网络不受其他软件(NetworkManager)管理,
将BOOTPROTO由dhcp改为none,表示不由dhcp自动分配IP,
然后手工添加本机的IP地址,子网掩码,网关,可参考route -n的列出项设置:
在此我们编辑IPADDR=192.168.13.129
NETMASK=255.255.255.0
GATEWAY=192.168.13.2
然后保存退出
重启网络服务:service network restart
检查能否上网。然后IP地址就固定了。
4.2 在关闭iptables的情况下集群成功,不关闭则无法启动。
解决:启动管理节点,启动数据节点之后,在数据节点host查看端口,发现ndbd启动了端口号为2202的tcp服务,
那我们的数据节点会通过彼此的2202端口连接彼此,并向管理节点发起连接,所以添加一下语句,将规则添加在在管理节点,数据节点的iptables中:
iptables -A INPUT -i eth0 -p tcp --sport 2202 -j ACCEPT
然后发现SQL节点启动后仍连不上,ndb_mgm显示not connected,原因是SQL节点无法访问数据节点,所以添加如下规则:
iptables -I INPUT -i eth0 -p tcp -sport 3306 -J ACCEPT #允许来源为3306的访问
iptables -I INPUT -i eth0 -p tcp --dport 2202 -j ACCEPT #允许访问本地的2202端口。
4.3文件权限问题
注意mysql的用户权限问题。
4.4调试查看的工具
管理节点上可以通过ndb_mgm -e show来查看各个节点的连接状况,
查看ndb_1_cluster.log查看日志
哦,暂时就这么多吧,一开始是在service ipatbles stop来的情况下建起来的。额,后面学了一点儿Linux搞了搞。
有不对的请高手指教!