本文作为为Doctor Zhang,有问题可以给我发信:[email protected]
很久没有配置MysqlCluster了,今天准备做个实验,配置最新版本为7.4.7,配置过程也碰到了一些问题,希望朋友们有所借鉴(其中很多命令是用sudo完成的)
10.92.1.207
10.92.1.244
其中:
207部署1)管理节点;2)数据节点;3)SQL节点
244部署1)数据节点;2)SQL节点
如果能联网 yum remove mysql
否则手动删除mysql
先看看都安装了什么包:
# rpm -qa|grep MySQL
然后把这些包都卸载掉
rpm -e MySQL-server-5.5.21-1.linux2.6
rpm -e MySQL-client-5.5.20-1.linux2.6
我下的最新版本为7.4.7:mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64.tar.gz
tar -C /usr/local-zxvf mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64.tar.gz
(可以安装到别的位置,但注意运行下面的mysql-install的时候一定要带上相应的datadir和basedir)
cd /usr/local
sudo mv mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz mysql
groupadd mysql
useradd mysql -g mysql
#cd /usr/local/mysql
# sudo chown –R root . //把mysql的目录设置成所有者为root
#sudo chown –R mysql /data //把data目录设置所有者为mysql
#sudo chgrp –R mysql . //改成所属组为mysql
#sudo scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
注意:这里一定要把--basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 加上,否则会最后启动MySQL服务的时候会出现"table mysql.plugin doesn't exist","Can\'t open the mysql.plugin table. Please run mysql_upgrade to create it."错误,以及"PID"获取失败的错误
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
cp /usr/local/mysql/bin/ndb_mgm,ndb_mgmd两个文件到/usr/local/bin
#cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
#mkdir /var/lib/mysql-cluster
#vim /var/lib/mysql-cluster/config.ini
输入下面内容(注意行与行之间不能有空行):
[ndbd default] NoOfReplicas=1 DataMemory=200M IndexMemory=20M [ndb_mgmd] NodeId=1 hostname=10.92.1.207 datadir=/var/lib/mysql-cluster/ [ndbd] NodeId=2 hostname=10.92.1.207 datadir=/usr/local/mysql/data/ [ndbd] NodeId=3 hostname=10.92.1.244 datadir=/usr/local/mysql/data/ [mysqld] hostname=10.92.1.207 [mysqld] hostname=10.92.1.244 [mysqld] [mysqld]注意:对上面配置内容解释如下:
[NDBD DEFAULT]:表示每个数据节点的默认配置在每个节点的[NDBD]中不用再写这些选项,只能有一个。
[NDB_MGMD]:表示管理节点的配置,只有一个。
[NDBD]:表示每个数据节点的配置,可以有多个。
[MYSQLD]:表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址。
mysql服务启动时会默认加载/etc/my.cnf作为其配置文件,修改10.92.1.207上的/ect/my.cnf
[mysqld]
ndbcluster #运行NDB存储引擎
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
port=3306
[mysql_cluster]
ndb-connectstring=10.32.34.116 #声明管理节点
#scp /etc/my.cnf 10.92.1.207:/etc/
节点的启动顺序为管理节点->数据节点->SQL节点。
#cd /usr/local/bin
# ./ndb_mgmd -f /var/lib/mysql-cluster/config.ini // ndb_mgmd是mysqlcluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。如果在启动后过了几天又添加了一个数据节点,这时修改了配置文件启动时就必须加上--initial参数,不然添加的节点不会作用在mysql cluster中
注:如果mysql没有安装在/usr/local/mysql下,会提示你加上--dir**选项,随便选个刚才的mysql-cluster目录即可
安装后第一次启动数据节点时要加上--initial参数,其它时候不要加,除非是在备份、恢复或配置变化后重启时
#cd /var/local/mysql/bin/ndbd –initial
2012-03-28 02:01:38 [ndbd] INFO -- Angel connected to '10.32.33.120:1186'
2012-03-28 02:01:38 [ndbd] INFO -- Angel allocated nodeid: 36
出现这种信息表示启动成功.
service mysqld start
#cd /usr/local/bin
#.ndb_mgm
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.32.33.120 (mysql-5.5.20 ndb-7.2.5, Nodegroup: 0, Master)
id=3 @10.32.34.116 (mysql-5.5.20 ndb-7.2.5, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.32.34.116 (mysql-5.5.20 ndb-7.2.5)
[mysqld(API)] 4 node(s)
id=4 @10.32.33.120 (mysql-5.5.20 ndb-7.2.5)
id=5 @10.32.34.116 (mysql-5.5.20 ndb-7.2.5)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
可以看到各个节点已经连接上了, mysql cluster配置完成.
如果看不到上述信息,可能是防火墙问题,你可以选择把CentOS的防火墙关掉,命令为:/etc/init.d/iptables stop
可以在任何一个节点使用mysql登录了操作了。
如果想远程登录,有可能会出现"MySQL ERROR 1130 (HY000): Host '192.168.1.8' is not allowed to connect to this MySQL server"错误。解决办法如下:从本地登录mysql,输入下面命令
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.8' IDENTIFIED BY 'password' WITH GRANT OPTION;
意思是允许远程以root登录,并且限定ip为192.163.1.8,链接密码位password。如果不想有IP限制为下面命令:
GRANT ALL PRIVILEGES ON *.* TO 'root' IDENTIFIED BY 'password' WITH GRANT OPTION;
七、测试数据
连接任何一个sql节点:mysql -u 用户名 -p密码 -h 服务器IP地址-P 服务器端MySQL端口号 -D 数据库名
本例中:mysql -uroot -h 10.92.2.85
mysql> create database zxztest ;
mysql> use zxztest;
Database changed
mysql> create table test1(id int,name varchar(10)) engine=ndb ;
mysql> insert into test1 values(1,'zhaoxuezhi');
mysql> select * from test1 ;
+------+---------+
| id | name |
+------+---------+
| 1 | zhaoxuezhi |
+------+---------+
登陆B节点,查看效果,库,表和数据已经同步。
从B节点插入一条数据,同样登陆A,也能看到数据已经同步。
注意:建表时一定要指明存储引擎为NDB,即engine=ndb,否则mysql默认建的时innodb的表,不会sharding到其他节点。写程序时建表也要指明ENGINE=NDB.
八、查看NDB各个节点本地存储的数据是否有变化
很多人不知道数据存储在哪,这里教大家一个方法:用lsof查看ndb打开的文件:
>sudo lsof -c ndb
发现其真正存储数据的位置在mysql/data/ndb_2_fs/下面,各个文件夹中的文件是以16.7M为单位存储的,临时文件达到16.7M后就另起一个,如图: