本文的英文版本连接是 https://xuri.me/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.html php
MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了 NDB Cluster 存储引擎,容许在1个 Cluster 中运行多个MySQL服务器。经过无共享体系结构,系统可以使用廉价的硬件,并且对软硬件无特殊要求。此外,因为每一个组件有本身的内存和磁盘,不存在单点故障。 html
开发者官方网站 www.oracle.com java
在这篇文章中,我会叙述如何 在 Ubuntu 12.04 LTS 构建高可用 MySQL 集群。 node
1. SQL Cluster 虚拟主机 mysql
要建立一个功能齐全的集群,至少须要3 台主机才能够完成。其中一个主机做为管理节点,另外两个作数据节点。若是数据节点脱机,群集仍然能够工做,可是一旦管理节点出现问题,将致使集群没法正常工做,因此在可能的状况下,创建两个管理节点。在个人例子中,我将使用二个管理节点的集群。 linux
这个例子中一共使用了 5 台主机,系统架构以下图所示 sql
虚拟机群平台 VMware ESXi 4.1 虚拟机操做系统 Ubuntu 12.04.3 LTS (Precise Pangolin) 64-bit
全部虚拟机都在同一 192.168.67.0/24 网络地址段当中,请根据你的网络状况来具体配置 IP 地址,在开始以前请确保全部主机网络链接设置正常。
shell
2. 安装管理节点 数据库
首先,咱们须要安装的 MySQL 集群的管理节点。咱们将开始与 MySQL-MGM-1,配置完成后按照相同的步骤配置第二个管理节点,若是只设定一个管理节点,那么继续下一步的配置。 ubuntu
在开始配置前,请访问 http://www.mysql.com/downloads/cluster/#downloads 确认当前安装文档的版本信息. 这里我所使用的 MySQL Cluster 版本是 7.3.3.
首先,咱们把 MySQL Cluster 安装包下载到管理主机上。进入到 /usr/src 文件夹并建立 mysql-mgm 目录。
mkdir /usr/src/mysql-mgm cd /usr/src/mysql-mgm
完成这一步后,在 MySQL 的官方网站下载最新的安装源代码,并解压软件包
wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz tar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
进入解压缩后的文件夹,而后移动二进制文件
cd mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64 cp bin/ndb_mgm /usr/bin cp bin/ndb_mgmd /usr/bin
更改目录的权限,并能够选择删除下载的源文件
chmod 755 /usr/bin/ndb_mg* cd /usr/src rm -rf /usr/src/mysql-mgm
接下来,咱们建立管理节点配置文件,在 /var/lib/mysql-cluster/ 文件夹中,名字叫作 config.ini ,这个文件夹事先不存在,建立它
mkdir /var/lib/mysql-cluster
在 config.ini 文件建立完成后,使用你喜欢的文本编辑器编辑此文件,内容相似于这样
[NDBD DEFAULT] NoOfReplicas=2 DataMemory=80M IndexMemory=18M [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] DataDir=/var/lib/mysql-cluster [TCP DEFAULT] # Section for the cluster management node [NDB_MGMD] NodeId=1 # IP address of the first management node (this system) HostName=192.168.67.10 [NDB_MGMD] NodeId=2 #IP address of the second management node HostName=192.168.67.11 # Section for the storage nodes [NDBD] # IP address of the first storage node HostName=192.168.67.12 DataDir= /var/lib/mysql-cluster [NDBD] # IP address of the second storage node HostName=192.168.67.13 DataDir=/var/lib/mysql-cluster # one [MYSQLD] per storage node [MYSQLD] [MYSQLD]
全部主机都定义在这个里,即便咱们只安装第一个。请注意,管理主机节点须要设定 NodeId,而 NDBD 节点不须要设定.
完成这步操做后,能够用下面的命令启动管理节点
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
完成这步操做后, 你能够经过下面的命令向 init.d 中添加一个条目,以自动启动程序
echo "ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/" > /etc/init.d/ndb_mgmd chmod 755 /etc/init.d/ndb_mgmd
若是一切顺利,第二个管理节点上遵循相同的步骤,并使用相同的配置。请不要改变的节点配置文件中的 ID
你可使用 ndb_mgm 命令来验证管理节点的运行,(只须要在终端中输入 ndb_mgm ) ,并经过键入 show,启动配置实用程序。此时 NDBD 节点和 MySQL 节点处于断开状态,须要将全部节点配置完成才能够输出正确的状态。
3. 数据节点
建立数据节点与建立管理节点的过程是相似的。让咱们开始建立一个 mysql 组,将用户 mysql 添加到 mysql 组中
groupadd mysql useradd -g mysql mysql
进入 /usr/local ,并下载和配置管理节点时使用的相同的压缩文档,并解压
cd /usr/local/ wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz tar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
建立一个名为 mysql 指向解压的文件夹(这之后将用于DB集群,因此不要删除它!)的的软链接。建立完成后,你能够安装数据库
ln -s mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64 mysql cd mysql apt-get install libaio1 libaio-dev scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
修改文件权限
chown -R root:mysql . chown -R mysql data
与管理节点上同样,咱们但愿的 DataBase 引擎自动启动,所以,咱们须要建立 init.d 命令
cp support-files/mysql.server /etc/init.d/ chmod 755 /etc/init.d/mysql.server
最后,复制 bin 文件夹到 /usr/bin 的位置,并建立一个符号连接,以保持可以正确的引用
cd /usr/local/mysql/bin mv * /usr/bin cd ../ rm -fr /usr/local/mysql/bin ln -s /usr/bin /usr/local/mysql/bin
MySQL 配置文件目前不存在,因此咱们须要本身建立它。该文件位于 /etc/ 中,并命名为 my.cnf 文件。使用你喜欢的文本编辑器,并添加如下几行
[mysqld] ndbcluster # IP address of the cluster management node ndb-connectstring=192.168.67.10,192.168.67.11 [mysql_cluster] # IP address of the cluster management node ndb-connectstring=192.168.67.10,192.168.67.11
请注意,这两个管理节点的地址,使用逗号分隔。若是你只有一个管理节点,只需在列表中删除第二个。一旦 my.cnf 文件已保存,咱们须要建立 MySQL 的数据文件夹
mkdir /var/lib/mysql-cluster
完成这些后,咱们须要初始化集群并启动该服务。只有当你开始第一次的节点,或当在管理节点上的 /var/lib/mysql-cluster/config.ini 文件被更改时,须要作初始化
cd /var/lib/mysql-cluster ndbd –-initial /etc/init.d/mysql.server start
接下来,经过运行相应的脚本安装 MySQL
/usr/local/mysql/bin/mysql_secure_installation
最后,咱们须要 NDB 自动启动
echo "ndbd" > /etc/init.d/ndbd chmod 755 /etc/init.d/ndbd
好了,咱们已经完成了第一个数据节点的配置,按照相同的方法和步骤去完成第二个数据节点的配置
4.验证与测试
若是一切正常,在管理节点终端中执行命令 ndb_mgm ,而后键入 show. 这个时候应该看到的数据库节点已填充的提示
root@MYSQL-MGM1:~# ndb_mgm ndb_mgm> show Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=3 @192.168.67.12 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *) id=4 @192.168.67.13 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0) [ndb_mgmd(MGM)] 2 node(s) id=1 @192.168.67.10 (mysql-5.6.14 ndb-7.3.3) id=2 @192.168.67.11 (mysql-5.6.14 ndb-7.3.3) [mysqld(API)] 2 node(s) id=5 @192.168.67.12 (mysql-5.6.14 ndb-7.3.3) id=6 @192.168.67.13 (mysql-5.6.14 ndb-7.3.3)
若是你可以看到相似的输出,去尝试一些基本的SQL命令。登陆到SQL数据库,并建立一个新的数据库,表,以验证数据同步。请注意,在建立数据库时,需使用 NDBCLUSTER 存储引擎。若是使用 InnoDB ,数据将不会在集群节点之间被复制。在使用 NDBCLUSTER 引擎时,会有一些问题,请参阅 MySQL 官方网站
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-unsupported.html
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-syntax.html
mysql -u root -p mysql> CREATE DATABASE mysqlclustertest; mysql> USE mysqlclustertest; mysql> CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER; mysql> INSERT INTO testtable () VALUES (1); mysql> SELECT * FROM testtable;
链接到第二个数据库节点,咱们看看,获得了相同的输出
mysql -u root -p mysql> USE mysqlclustertest; mysql> SELECT * FROM testtable;
应该看到相同的输出。如今,若是你插入一个新条目表,它会被复制回的第一个节点
5. 负载均衡
在这篇文章的最后部分是为 MySQL 集群安装负载均衡服务器,负载均衡可使用 mysql-proxy,很容易安装,固然你也可使用其余服务
root@mysql-proxy:~# apt-get install mysql-proxy root@mysql-proxy:~# mkdir /etc/mysql-proxy root@mysql-proxy:~# cd /etc/mysql-proxy root@mysql-proxy:/etc/mysql-proxy# nano mysql-proxy.conf
在 mysql-proxy.conf 文件中加入下面几行
[mysql-proxy] daemon = true proxy-address = 192.168.67.14:3306 proxy-skip-profiling = true keepalive = true event-threads = 50 pid-file = /var/run/mysql-proxy.pid log-file = /var/log/mysql-proxy.log log-level = debug proxy-backend-addresses = 192.168.67.12:3306,192.168.67.13:3306 proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/balance.lua
对于自动启动的附加选项建立如下文件 /etc/default/mysql-proxy
ENABLED="true" OPTIONS="--defaults-file=/etc/mysql-proxy.conf --plugins=proxy"
而后,你能够经过调用如下命令启动 mysql-proxy
/etc/init.d/mysql-proxy start/stop/status
完成后,你应该可以链接到 MySQL 服务器使用代理地址。记得这个工做,你须要建立一个新的用户具备特定的子网链接到它。还须要在 my.cnf 文件为 MySQL 服务器添加捆绑地址
SQL用户不用复制,因此相同的用户有单独被添加到全部的数据库节点。在数据节点登陆到 SQL shell,执行如下命令
CREATE USER 'newuser'@'192.168.67.%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; SELECT * FROM mysql.user;
更改 newuser,IP和密码,根据你的配置需求。 %做为通配符,从而对整个子网的IP地址的行为,它容许远程链接到这个数据库节点。请记得在这个集群中的节点中添加相同的用户具备相同配置的其余全部数据库
撰写本文参考了这篇文章 MySQL NDB Cluster setup on Ubuntu 12.04 LTS, 作了一些改动。
若是有哪里有误,欢迎指正,这篇文章的英文版本在个人我的网站 xuri.me 上,连接是 https://xuri.me/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.html 欢迎你们访问。