MySQL从结构看,由3类节点(计算机或进程)组成,分别是:
管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。理论上通过一台服务器提供服务就可以了。
数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。
SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在同一台服务器上。
NDB引擎
MySQL Cluster 使用了一个专用的基于内存的存储引擎——NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。
缺陷
一、公共配置
请在三个虚拟机上分别配置此处的配置项。
1. 安装虚拟机
虚拟机操作系统安装CentOS 6.4的x86_64版本,使用NAT网络,并且还要安装vmware-tools,具体安装方法此处不详述。
2. 拷贝mysql cluster
下载MySQL-Cluster:
下载得到的压缩包拷贝至虚拟机的/root/Downloads目录,然后在shell中运行以下命令:
cd /root/Downloadstar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gzmv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql3. 关闭安全策略
chkconfig --level 35 iptables off
gedit /etc/selinux/config将config文件中的SELINUX项改为disabled,修改后的config文件的内容如下:
# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.SELINUX=disabled# SELINUXTYPE= can take one of these two values:# targeted - Targeted processes are protected,# mls - Multi Level Security protection.SELINUXTYPE=targeted最后重启系统
mkdir /var/lib/mysql-clustercd /var/lib/mysql-clustergedit config.ini配置文件config.ini内容如下:
[ndbd default]NoOfReplicas=2DataMemory=80MIndexMemory=18M[ndb_mgmd]NodeId=1hostname=192.168.124.141datadir=/var/lib/mysql-cluster[ndbd]NodeId=2hostname=192.168.124.142datadir=/usr/local/mysql/data[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data[mysqld]NodeId=4hostname=192.168.124.144[mysqld]NodeId=5hostname=192.168.124.1452. 安装管理结点
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bincd /usr/local/binchmod +x ndb_mgm*三、配置数据结点(192.168.124.142、192.168.124.143)
groupadd mysqluseradd -g mysql mysql2. 配置my.cnf配置文件
gedit /etc/my.cnf配置文件my.cnf的内容如下:
[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/usr/local/mysql/sock/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[mysql_cluster]ndb-connectstring=192.168.124.1413. 创建系统数据库
cd /usr/local/mysqlmkdir sockscripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data4. 设置数据目录
chown -R root .chown -R mysql.mysql /usr/local/mysql/datachown -R mysql.mysql /usr/local/mysql/sockchgrp -R mysql .5. 配置MySQL服务
cp support-files/mysql.server /etc/rc.d/init.d/chmod +x /etc/rc.d/init.d/mysql.serverchkconfig --add mysql.server四、配置SQL结点(192.168.124.144、192.168.124.145)
groupadd mysqluseradd -g mysql mysql2. 配置my.cnf配置文件
gedit /etc/my.cnf配置文件my.cnf的内容如下:
[client]socket=/usr/local/mysql/sock/mysql.sock[mysqld]ndbclusterdatadir=/usr/local/mysql/datasocket=/usr/local/mysql/sock/mysql.sockndb-connectstring=192.168.124.141[mysql_cluster]ndb-connectstring=192.168.124.1413. 创建系统数据库
cd /usr/local/mysqlmkdir sockscripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data4. 设置数据目录
chown -R root .chown -R mysql.mysql /usr/local/mysql/datachown -R mysql.mysql /usr/local/mysql/sockchgrp -R mysql .5. 配置MySQL服务
cp support-files/mysql.server /etc/rc.d/init.d/chmod +x /etc/rc.d/init.d/mysql.serverchkconfig --add mysql.server五、Cluster环境启动
ndb_mgmd -f /var/lib/mysql-cluster/config.ini还可以使用ndb_mgm来监听客户端,如下:
/usr/local/mysql/bin/ndbd --initial如果不是首次启动,则执行下面的命令。
/usr/local/mysql/bin/ndbd3. 启动SQL结点
/usr/local/mysql/bin/mysqld_safe --user=mysql &4. 启动测试
shell> /usr/local/mysql/bin/mysql -u root -pmysql>show databases;mysql>create database aa;mysql>use aa;mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败mysql> INSERT INTO ctest2 () VALUES (1);mysql> SELECT * FROM ctest2;然后在SQL结点2上看数据是否同步过来了
mysql> create database bb;mysql> use bb;mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;mysql> use aa;mysql> INSERT INTO ctest2 () VALUES (3333);mysql> SELECT * FROM ctest2;等数据结点1启动完毕,启动数据结点1的服务
Connected to Management Server at: localhost:11862 NDB Cluster node(s) have shutdown.Disconnecting to allow management server to shutdown.显示
Connected to Management Server at: localhost:11862 NDB Cluster node(s) have shutdown.Disconnecting to allow management server to shutdown.2. 然后关闭Sql节点(135,136),分别在2个节点里运行:
shell> /etc/init.d/mysql.server stopShutting down MySQL... SUCCESS!注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-initial”参数了。