집 >데이터 베이스 >MySQL 튜토리얼 >MySQL集群在IBM服务器上配置安装详解_MySQL
IBMMysql集群IBM服务器服务器集群mysql安装
本文只是介绍安装和配置,关于一些名词和原理,请参考MySQL手册。
一.环境:
IBM x3560
Vmware esx 4.0
centos 5.3 –32bit
MySQL-max-5.0.24-linux-i686.tar.gz
为了快速搭建所需环境,我选择了一台IBM服务器安装了Vmware esx 4.0,用vm的ovf模板部署了3台centos,一台作为管理(MGM),节点两台作为SQL节点和数据节点。计算机名和IP地址如下:
DB1 192.168.20.201
DB2 192.168.20.202
MGM 192.168.20.203
二,在DB1和DB2上部署MySQL(配置过程相同)
听说MySQL5.1以及集成了MySQL集群功能,但是看了好多资料(包括MySQL5.1手册),都没有介绍安装配置的方法,很郁闷,最后还是选择了MySQL-max-5.0.24这个版本,MySQL-max是二进制的包,所以也省去了安装的麻烦,只需要几步简单的设置。
1, 建立MySQL用户组,MySQL-max-5.0.24-linux-i686.tar.gz解压后移动到/usr/local/MySQL
<ol class="dp-xml"> <li class="alt"><span><span>[root@db1 software]#groupadd MySQL </span></span></li> <li><span>[root@db1 software]#useradd –g MySQL MySQL </span></li> <li class="alt"><span>[root@db1 software]# tar -zxf MySQL-max-5.0.24-linux-i686.tar.gz </span></li> <li><span>[root@db1 software]#mv MySQL-max-5.0.24-linux-i686 MySQL </span></li> <li class="alt"><span>[root@db1 software]#mv MySQL /usr/local/MySQL </span></li> </ol>
2, 拷贝MySQL配置文件到/etc/下,初始化数据库,设置目录权限,启动MySQL
<ol class="dp-sql"> <li class="alt"><span><span>[root@db1 software]# cd /usr/</span><span class="keyword"><strong><font color="#006699">local</font></strong></span><span>/MySQL/ </span></span></li> <li><span>[root@db1 MySQL]# cp support-files/my-medium.cnf /etc/my.cnf </span></li> <li class="alt"> <span>[root@db1 MySQL]# scripts/MySQL_install_db </span><span class="comment"><font color="#008200">--user=MySQL </font></span><span> </span> </li> <li><span>[root@db1 MySQL]#chown -R root . </span></li> <li class="alt"><span>[root@db1 MySQL]#chown -R MySQL data </span></li> <li><span>[root@db1 MySQL]#chgrp -R MySQL . </span></li> <li class="alt"> <span>[root@db1 MySQL]# bin/MySQLd_safe </span><span class="comment"><font color="#008200">--user=MySQL &</font></span><span> </span> </li> </ol>
3, 将MySQL写入服务,初始化MySQL的root密码
<ol class="dp-sql"> <li class="alt"><span><span>[root@db1 MySQL]# cp support-files/MySQL.server /etc/rc.d/init.d/MySQLd </span></span></li> <li> <span>[root@db1 MySQL]# chkconfig </span><span class="comment"><font color="#008200">--add MySQLd </font></span><span> </span> </li> <li class="alt"> <span>[root@db1 MySQL]# bin/MySQLadmin -u root </span><span class="keyword"><strong><font color="#006699">password</font></strong></span><span> 123456 </span> </li> </ol>
4, 停止MySQL服务,修改配置文件
<ol class="dp-sql"> <li class="alt"><span><span>[root@db1 MySQL]# service MySQLd stop </span></span></li> <li><span>[root@db1 MySQL]# vi /etc/my.cnf </span></li> </ol>
在最下面添加内容:
<ol class="dp-sql"> <li class="alt"><span><span>[MySQLD] </span></span></li> <li><span>ndbcluster </span></li> <li class="alt"><span>ndb-connectstring=192.168.20.203 </span></li> <li><span> </span></li> <li class="alt"><span>[MySQL_CLUSTER] </span></li> <li><span>ndb-connectstring=192.168.20.203 </span></li> </ol>
保存退出,先不要启动MySQL服务
三,部署管理节点
管理节点的配置也很简单,但它是MySQL cluster配置中最关键的一步。
1, 解压MySQL-max-5.0.24-linux-i686.tar.gz包,拷贝包里bin目录下的ndb_mgm和ndb_mgmd两文件到/usr/bin/目录中(看一下是否具有可执行权限)。
<ol class="dp-sql"><li class="alt"><span><span>[root@mgm MySQL-</span><span class="keyword"><strong><font color="#006699">max</font></strong></span><span>-5.0.24-linux-i686]# cd bin/ndb_mgm* /usr/bin </span></span></li></ol>
2, 创建管理节点数据库目录,并且在此目录中建立配置文件config.ini
<ol class="dp-xml"> <li class="alt"><span><span>Mkdir /usr/local/MySQL-cluster </span></span></li> <li><span>Cd /usr/local/MySQL-cluster </span></li> <li class="alt"><span>Vi config.ini </span></li> </ol>
添加如下内容:
<ol class="dp-xml"> <li class="alt"><span><span>[NDBD DEFAULT] </span></span></li> <li> <span class="attribute"><font color="#ff0000">NoOfReplicas</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">2</font></span><span> </span> </li> <li class="alt"> <span class="attribute"><font color="#ff0000">DataMemory</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">200M</font></span><span> </span> </li> <li> <span class="attribute"><font color="#ff0000">IndexMemory</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">100M</font></span><span> </span> </li> <li class="alt"><span> </span></li> <li><span>[TCP DEFAULT] </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">portnumber</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">2202</font></span><span> </span> </li> <li><span> </span></li> <li class="alt"><span>[NDB_MGMD] </span></li> <li><span> </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">hostname</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">192</font></span><span>.168.20.203 </span> </li> <li> <span class="attribute"><font color="#ff0000">datadir</font></span><span>=/usr/local/MySQL-cluster </span> </li> <li class="alt"><span> </span></li> <li><span>[NDBD] </span></li> <li class="alt"><span> </span></li> <li> <span class="attribute"><font color="#ff0000">hostname</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">192</font></span><span>.168.20.201 </span> </li> <li class="alt"> <span class="attribute"><font color="#ff0000">datadir</font></span><span>=/usr/local/MySQL/data </span> </li> <li><span> </span></li> <li class="alt"><span>[NDBD] </span></li> <li><span> </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">hostname</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">192</font></span><span>.168.20.202 </span> </li> <li> <span class="attribute"><font color="#ff0000">datadir</font></span><span>=/usr/local/MySQL/data </span> </li> <li class="alt"><span> </span></li> <li><span>[MySQLD] </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">hostname</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">192</font></span><span>.168.20.201 </span> </li> <li><span> </span></li> <li class="alt"><span>[MySQLD] </span></li> <li> <span class="attribute"><font color="#ff0000">hostname</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">192</font></span><span>.168.20.202 </span> </li> </ol>
保存退出
四,MySQL cluster的启动
MySQL cluster的启动顺序:管理节点--数据节点-SQL节点。
1,[root@mgm MySQL-cluster]# ndb_mgmd -f ./config.ini
如果没有提示,表示启动成功,Ps -aux查看进程,看是否已经启动
<ol class="dp-xml"><li class="alt"><span><span>root 4700 0.0 0.6 5984 1668 ? Ssl 14:20 0:00 ndb_mgmd -f ./config.ini </span></span></li></ol>
2,分别在DB1和DB2上启动数据节点
<ol class="dp-xml"><li class="alt"><span><span>[root@db1 MySQL]# bin/ndbd –initial </span></span></li></ol>
问题出来了:
提示:
<ol class="dp-xml"> <li class="alt"><span><span>[root@db1 MySQL]# bin/ndbd --initial </span></span></li> <li> <span>Unable to connect with connect string: </span><span class="attribute"><font color="#ff0000">nodeid</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>,192.168.20.203:1186 </span> </li> <li class="alt"><span>Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed. </span></li> <li> <span class="attribute"><font color="#ff0000">error</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">2350</font></span><span> </span> </li> <li class="alt"><span>2010-05-05 14:21:21 [ndbd] INFO -- Error handler restarting system </span></li> <li><span>2010-05-05 14:21:21 [ndbd] INFO -- Error handler shutdown completed - exiting </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">sphase</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span> </span> </li> <li> <span class="attribute"><font color="#ff0000">exit</font></span><span>=-1 </span> </li> </ol>
在网上找答案,出这个问题的人还真不少,而且答案五花八门,统统试了一遍,还是不行,问题到底出在哪里呢?
查看错误日志,内容如下:
<ol class="dp-xml"> <li class="alt"><span><span> [root@db1 MySQL]# more ndb_pid4968_error.log </span></span></li> <li><span>Current byte-offset of file-pointer is: 568 </span></li> <li class="alt"><span> </span></li> <li><span>Time: Wednesday 5 May 2010 - 14:17:25 </span></li> <li class="alt"><span>Status: Permanent error, external action needed </span></li> <li><span>Message: Invalid configuration received from Management Server (Configuration error) </span></li> <li class="alt"><span>Error: 2350 </span></li> <li><span>Error data: Could not connect to ndb_mgmd </span></li> <li class="alt"><span>Error object: </span></li> <li><span>Program: bin/ndbd </span></li> <li class="alt"><span>Pid: 4968 </span></li> <li> <span>Trace: </span><strong><font color="#006699"><span class="tag"><span class="tag-name">no</span></span></font></strong><span> tracefile</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> </span> </li> <li class="alt"><span>Version: Version 5.0.24 </span></li> <li><span>***EOM*** </span></li> </ol>
看带下划线处,不能连接到管理节点,我的管理节点启动是ok的啊,突然一下明白了,防火墙是开着的(系统默认是开启的),关掉防火墙和SELinux,重新ndbd –initial,启动成功
3, 启动SQL节点上的MySQL服务
<ol class="dp-xml"><li class="alt"><span><span>Service MySQLd start </span></span></li></ol>
4,全部节点都启动成功后,在MGM节点上用ndb_mgm工具的show命令查看群集的状态
<ol class="dp-xml"> <li class="alt"><span><span> [root@mgm ~]# ndb_mgm </span></span></li> <li><span>-- NDB Cluster -- Management Client -- </span></li> <li class="alt"> <span>ndb_mgm</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> show </span> </li> <li><span>Connected to Management Server at: localhost:1186 </span></li> <li class="alt"><span>Cluster Configuration </span></li> <li><span>--------------------- </span></li> <li class="alt"><span>[ndbd(NDB)] 2 node(s) </span></li> <li> <span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">2</font></span><span> @192.168.20.201 (Version: 5.0.24, Nodegroup: 0, Master) </span> </li> <li class="alt"> <span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">3</font></span><span> @192.168.20.202 (Version: 5.0.24, Nodegroup: 0) </span> </li> <li><span> </span></li> <li class="alt"><span>[ndb_mgmd(MGM)] 1 node(s) </span></li> <li> <span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">1</font></span><span> @192.168.20.203 (Version: 5.0.24) </span> </li> <li class="alt"><span> </span></li> <li><span>[MySQLd(API)] 2 node(s) </span></li> <li class="alt"> <span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">4</font></span><span> @192.168.20.201 (Version: 5.0.24) </span> </li> <li> <span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">5</font></span><span> @192.168.20.202 (Version: 5.0.24) </span> </li> </ol>
看蓝色标示的字段,可以看到管理节点,sql节点和数据节点,还有一个连接端口。
五.MySQL cluster的测试
声明一点,要使用MySQL cluster,表的存储引擎必须是ndb的。
在DB1(192.168.20.201)中创建表,插入数据:
<ol class="dp-xml"> <li class="alt"><span><span> MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> use test </span></span></li> <li><span>Database changed </span></li> <li class="alt"><span> </span></li> <li> <span>MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> create table mingxing(name char(3))</span><span class="attribute"><font color="#ff0000">engine</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">ndb</font></span><span>; </span> </li> <li class="alt"><span>Query OK, 0 rows affected (0.57 sec) </span></li> <li><span> </span></li> <li class="alt"> <span>MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> insert into mingxing value('jay'),('cyl'),('ldh'); </span> </li> <li><span>Query OK, 3 rows affected (0.04 sec) </span></li> <li class="alt"><span>Records: 3 Duplicates: 0 Warnings: 0 </span></li> </ol>
然后再DB2(192.168.20.202)上看到了刚才创建的表和表里的数据
<ol class="dp-xml"> <li class="alt"><span><span>MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> use test </span></span></li> <li><span>Database changed </span></li> <li class="alt"> <span>MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> show tables; </span> </li> <li><span>+----------------+ </span></li> <li class="alt"><span>| Tables_in_test | </span></li> <li><span>+----------------+ </span></li> <li class="alt"><span>| mingxing | </span></li> <li><span>+----------------+ </span></li> <li class="alt"><span>1 row in set (0.01 sec) </span></li> <li><span> </span></li> <li class="alt"> <span>MySQL</span><span class="tag"><strong><font color="#006699">></font></strong></span><span> select * from mingxing; </span> </li> <li><span>+------+ </span></li> <li class="alt"><span>| name | </span></li> <li><span>+------+ </span></li> <li class="alt"><span>| jay | </span></li> <li><span>| cyl | </span></li> <li class="alt"><span>| ldh | </span></li> <li><span>+------+ </span></li> <li class="alt"><span>3 rows in set (0.00 sec) </span></li> </ol>
到此,MySQL的安装和配置基本完成。
注意: 如果在db1上创建一个数据库是不能同步到db2上去的,两边需要有相同名字的库名,库中的数据才能同步过去