搭建mysql cluster

虚拟机搭建Mysql Cluster

参考文档:http://www.cnblogs.com/jackluo/archive/2013/01/19/2868152.html

http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html

 

需要三台服务器。一个管理节点服务器。另外两个均充当数据节点和sql节点。

这里选用ubuntu64位操作系统。mysql cluster 对应也必须是64位的。去官方站点下载mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64。

(注:当在虚拟机操作时,vmware下,可以只先操作一个sql节点,然后虚拟机有克隆功能,直接整一份,这样另一个sql节点就基本搞定了,只需要更改下ip即可。在虚拟机实验下,最好整快照或克隆。

  我这里,管理节点ip是192.168.1.232

  另两个机器,既充当数据节点也是sql节点。ip是192.168.1.210 ;  192.168.1.219   

安装ubuntu操作系统后,更改ip,dns配置。

切换用户 sudo passwd root,然后创建个root用户密码。

su root后,输入root密码。

 以下操作利用root用户进行。

对每个机器的ip配置:

vim /etc/network/interfaces

改内容如下:(括号里的字去掉)

auto eth0

iface eth0 inet static  (这里没用dhcp动态,取静态ip)

address 192.168.1.219     (ip地址)

gateway 192.168.1.1    (网关地址)

netmask 255.255.255.0    (子网掩码)

dns-nameservers 192.168.1.1  (dns解析)

 

重启网络设置:

sudo /etc/init.d/networking restart  

  

一. 对数据节点和sql节点的操作

1. 创建组,用户

         groupadd mysql

 

         useradd -g mysql mysql

 

2. 下载mysql cluster64。传这个文件到某个目录下。这里直接上传到/usr/local(如果利用文件上传服务器,则需要赋给权限如chmod 777 /usr/local)

解压: tar -xvf mysql.tar.gz

改名: mv mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64  mysql

 

3. 修改mysql目录权限

cd mysql

 

chown -R root .

 

chown -R mysql data

 

chgrp -R mysql .

 

4. 安装mysql初始库

在mysql目录下: 

scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql

 

5. 把mysql设置为开机自启

可以把mysql服务开机自启。不整也行。

 

6.这里设置mysql配置文件,这里缺省了mysql配置的性能方面参数。

vim /etc/my.cnf

 

[client]

socket=/usr/local/mysql/sock/mysql.sock

 

[mysqld]

ndbcluster

datadir=/usr/local/mysql/data

socket=/usr/local/mysql/sock/mysql.sock

ndb-connectstring=192.168.1.232       #这个是管理节点的ip

old_passwords=1

 

[mysql_cluster]

ndb-connectstring=192.168.1.232  #这里配置的是管理节点服务器地址

 

7. 此时不必启动mysql服务。

 

以上的操作,需要在多台数据节点和sql节点机器上进行(要是虚拟机,就克隆就好了,然后改下ip)。

 

二. 对管理节点的操作

管理节点不需要安装mysql服务。只需要mysql-cluster解压后的两个文件,分别是

sql节点服务器上:/usr/local/mysql/bin/ndb_mgmd 和 /usr/local/mysql/bin/ndb_mgm

ndb_mgmd 是管理节点的服务

ndb_mgm  是管理节点的客户端查看用

1. 把sql节点上的这两个文件拷贝到管理节点的/usr/local/bin目录下。(我使用filezilla传过去的)

2. 在管理节点上,确保这两个文件可执行。

  cd /usr/local/bin

  chmod +x ndb_mgm*

3. 在/usr/local下创建mysql文件夹,确保数据节点打开服务时,可以生成log文件

  mkdir /usr/local/mysql

4. 创建一个管理节点的配置文件

  mkdir /var/lib/mysql-cluster

  cd /var/lib/mysql-cluster

  vim config.ini

 

 

[NDBD DEFAULT]

NoOfReplicas=2

 

[TCP DEFAULT]

portnumber=22202

 

[NDB_MGMD]

hostname=192.168.1.232                 #管理节点

datadir=/var/lib/mysql-cluster/

 

[NDBD]

hostname=192.168.1.210                 #数据节点

datadir=/usr/local/mysql/data/

[NDBD]

hostname=192.168.1.219                 #数据节点

datadir=/usr/local/mysql/data/

 

[MYSQLD]

# 这里配置sql节点,最好留空。

[MYSQLD]

  

三、启动mysql cluster

 

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1.  ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

第一次启动时,再加--initial参数,或者在更改config.ini节点时加

(启动时可能会报个WARNING,如WARNING  -- at line 7: [TCP] portnumber is deprecated,这个不用管。可以正常工作的。)

 

此时使用ndb_mgm来监听客户端

 

2.  数据节点

/usr/local/mysql/bin/ndbd

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

/usr/local/mysql/bin/ndbd --initial

(如果报错:日志文件不能生成,则手动创建这个目录)

 

此时,在管理节点上,ndb_mgm,使用show命令时,可以看到数据节点连接上了(多台数据节点都需要这样操作)

 

3.  sql节点

 

/usr/local/mysql/bin/mysqld_safe --user=mysql &

 

如果报错说某套接字连不上mysql,那么尝试下再次创建系统数据库,方法如下:

在mysql目录下 

 scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql

 再次启动

 /usr/local/mysql/bin/mysqld_safe --user=mysql &

 

查看管理节点。此时sql节点也应该连接上了。

  

四、测试

1、常规测试:

在节点4上面:

为了让表在cluster中正常复制,创建一个表必须使用ndbcluster引擎(engine=ndb Or engine=ndbcluster)方法如下:

mysql>use test

mysql>create table teacher(t_id int) engine=ndb;(这里引擎须要是ndb,而不是innodb)

 

 

如果是一个已经存在的表,用alter table修改表的引擎。

mysql>alter table student engine=ndb;

 

插入一条数据:

mysql>insert into teacher values(133);

然后在节点5上:

mysql>select * from teacher;

  

两个节点数据保持一致,恭喜你,测试成功!

  

模拟NDB节点Crash

 这基本参照文档:

  http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。