参考博文:
CentOS 6.2下MySQL Cluster 7.2 配置数据库集群
CentOS 6.5上安装MySQL-Cluster 7.3.4过程笔记--下一步学习
MySQL Cluster Installation 官方文档地址: http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-installation.html
Mysql Cluster7.4.6安装与配置 参考这篇博文配置
一、Mysql Cluster概述
MySql Cluster最显著的优点就是高可用性,高实时性,高冗余,扩展性强。
它允许在无共享的系统中部署"内存中"数据库的Cluster.通过无共享体系结构,系统能够使用廉价的硬件.此外,由于每个组件有自己的内存和磁盘,所以不存在单点故障.
它由一组计算机构成,每台计算机上均运行着多种进程,包括mysql服务器,NDB cluster的数据节点,管理服务启,以及专门的数据访问程序
所有的这些节点构成一个完整的mysql集群体系.数据保存在"NDB存储服务器"的存储引擎中,表(结构)则保存在"mysql服务器"中.应用程序通过"mysql服务器"访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理"NDB存储服务器".
基本概念
"NDB"是一种"内存中"的存储引擎,它具有可用性高和数据一致性好的特点.下面介绍mysql cluster 节点时,它表示进程.在单台计算机上可以有任意数目的节点.
管理节点(MGM):这类节点的作用是管理mysql cluster内的其他节点,如配置文件和cluster 日志,启动并停止节点,运行备份等.cluster中的每个节点从管理服务器上检索配置数据,并请求管理服务器所在位置的方式.当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器上,然后,又将这类信息写入cluster日志。由于这类节点负责管理其他节点的配置,所以应在启动其他节点之前首先启动这类节点.MGM节点是用命令"ndb_mgmd"来启动
数据节点(NDB):这类节点用于保存cluster的数据.数据节点的数目与副本的数目相关,是片段的倍数.假设有2个副本,每个副本有2个片段,那么就有4个数据节点.不过没有必要设置多个副本.数据节点是用命令"ndbd"来启动的.
SQL节点:这是用来访问cluster数据的节点.对于MYSQL cluster来说,客户端节点是使用NDB cluster存储引擎的传统Mysql服务器.通常,sql节点使用将"ndbcluster"添加到"my.cnf"后使用"mysqld" 启动
此外,可以有任意数目的cluster客户端进程或应该程序.它们分为两种类型,即标准mysql客户端和管理客户端.
标准mysql客户端:能够从php,perl,c,c++,java,python,ruby等编写的现有mysql应用程序上访问mysql cluster
管理客户端:这类客户端与管理服务器相连,并提供了启动和停止节点,启动和停止消息跟踪,显示节点版本和状态,启动和停止备份等命令.
以下是mysql cluster 架构示意图:
由于Mysql Cluster采用的是TCP/IP方式连接,并且节点之间的数据传输没有加密,最后使用单独的子网里
为了方便 这里我把管理节点,数据节点,sql节点放在一台机器上.
管理节点1 192.168.239.128 数据节点1 192.168.239.128 数据节点2 192.168.239.130 sql节点1 192.168.239.128 sql节点2 192.168.239.130
二、Mysql Cluster下载安装
1.1下载安装
1、下载,这里为了方便安装过程,这里直接使用了RPM包来安装,避开了编译安装的痛苦:
首先先到www.msyql.com下载如下的RPM安装包 (http://dev.mysql.com/downloads/cluster/);选择:Linux - Generic (注意:是 mysql-cluster-gpl-7.4.10-linux-glibc2.5-x86_64.tar.gz)
2、环境清理及安装
清理CentOS6.5自带的mysql服务,其中第一个命令我不执行也可以,其他系统如果不可以,还是建议执行 参考:如何卸载rpm包
( 创建用户群,groupadd mysql , 创建用户,useradd -g mysql mysql )
3、解压缩Mysql Cluster包到 /usr/local 注意权限设置
tar -C /usr/local -xzvf mysql-cluster-gpl-7.4.10-linux-glibc2.5-x86_64.tar.gz cd /usr/local/ ln -s /usr/local/mysql-cluster-gpl-7.4.10-linux-glibc2.5-x86_64 /usr/local/mysql #这么改是因为 后续中 启动函数调用目录是 mysql chown -R mysql:mysql /usr/local/mysql -R cd mysql
4、开始安装
scripts/mysql_install_db --user=mysql # 安装mysql-cluster cp support-files/mysql.server /etc/rc.d/init.d/mysqld # 注册mysql的service chmod +x /etc/rc.d/init.d/mysqld chkconfig --add mysqld 运行service mysqld start 即可启动mysql #暂时不启动
1.2 开始配置
一、管理节点安装步骤:
1.在管理节点服务器完成上述sql节点和ndb节点安装步骤后,输入cd /usr/local/mysql进入目录 2.cp bin/ndb_mgm* /usr/local/bin 3.cd /usr/local/bin 4.chmod +x ndb_mgm*
三、配置sql节点和ndb节点
mysql服务启动时会默认加载/etc/my.cnf作为其配置文件,要将一个mysql服务器配置成一个数据节点和SQL节点也非常的简单,这是配置前的my.cnf的内容:
1.[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
user= mysql
log-error=/var/lib/mysql/mysqld.err
2.在此基础上在最下方分别加入以下语句:
a) 如果是NDB服务器的情况下输入:
ndbcluster
ndb-connectstring=192.168.239.128
b) 如果是SQL节点服务器的情况下输入
[mysql_cluster]
ndb-connectstring=192.168.239.128
注意所有服务器必须具有相同的配置
配置后my.cnf文件如下:
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [client] port=3306 socket=/tmp/mysql.sock [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin basedir=/usr/local/mysql/ datadir=/usr/local/mysql/data user = mysql log-error=/var/lib/mysql/mysqld.err # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # Disabling symbolic-links is recommended to prevent assorted security risks # Recommended in standard MySQL setup ndbcluster ndb-connectstring=192.168.239.128 [mysql_cluster] ndb-connectstring=192.168.239.128 #[mysqld_safe] #log-error=/var/lib/mysql/mysqld.err #pid-file=/var/run/mysqld/mysqld.pid
三、管理节点服务器的配置
1.cd /var/lib
2.mkdir mysql-cluster
3.vi config.ini,创建配置文件
4.在config.ini文件中添加以下内容:(由于报错把注释去掉了 去掉注释的在后面)
[NDBD DEFAULT] #每个数据节点的镜像数量 NoOfReplicas=1 #每个数据节点中给数据分配的内存 DataMemory=500M #每个数据节点中给索引分配的内存 IndexMemory=300M [TCP DEFAULT] #数据节点的默认连接端口 portnumber=2202 #配置管理节点 [NDB_MGMD] #MGM1 hostname=192.168.239.128 #管理节点数据(日志)目录 datadir=/var/lib/mysql-cluster/ #数据节点配置 [NDBD] #NDB1 hostname=192.168.239.128 #数据节点目录 datadir=/usr/local/mysql/data/ [NDBD] #NDB2 hostname=192.168.239.130 datadir=/usr/local/mysql/data/ #SQL节点目录 [MYSQLD] #SQL1 hostname=192.168.239.128 [MYSQLD] #SQL2 hostname=192.168.239.130
//////////////启动时报错////////////////////////////////////////////////////////
2014-02-25 18:57:04 [MgmtSrvr] ERROR -- at line 1: Value specified outside section
2014-02-25 18:57:04 [MgmtSrvr] ERROR -- at line 1: Could not parse name-value pair in config file.
2014-02-25 18:57:04 [MgmtSrvr] ERROR -- Could not load configuration from '/usr/local/mysql/cluster-conf/config.ini'
2014-02-25 18:57:04 [MgmtSrvr] ERROR -- Could not determine which nodeid to use for this node. Specify it with --ndb-nodeid= on command line
检查是从window下copy到liux下,某些空格失效了。 后来把所有的注释写到单独一行好了
////////////////////////////////////////////////////////////
修改错误后结果如下: (使用id时报错:修改为:NodeId )
[NDBD DEFAULT] NoOfReplicas=1 DataMemory=300M IndexMemory=100M [TCP DEFAULT] portnumber=2202 [NDB_MGMD] NodeId = 1 hostname=192.168.239.128 datadir=/var/lib/mysql-cluster/ [NDBD] NodeId = 2 hostname=192.168.239.128 datadir=/usr/local/mysql/data/ [NDBD] NodeId = 3 hostname=192.168.239.130 datadir=/usr/local/mysql/data/ [MYSQLD] NodeId = 4 hostname=192.168.239.128 [MYSQLD] NodeId = 5 hostname=192.168.239.130
四、启动
1.管理节点的启动: (注意防火墙开启:3306 和 1186 端口)
a) Mysql cluster需要各个节点进行启动后方能够工作,节点的启动顺序为:管理节点——》NDB数据节点——》Sql节点。因此首先启管理节点
b) cd /usr/local/bin
c) ndb_mgmd -f /var/lib/mysql-cluster/config.ini
d) 注意以上为第一次配置的情况下,如果新增节点,使用./ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial 进行加载,不然添加的节点不会出现在集群中
e) 启动时可能会报个WARNING,如WARNING -- at line 7: [TCP] portnumber is deprecated,这个不用管。可以正常工作的。
f) 启动后可以使用 ndb_mgm -e show 查看运行状态
2.NDB节点的启动
a) cd /usr/local/bin 注意:如果目录下没有 从/usr/local/mysql/bin 下拷贝过来
b) ./ndbd --initial
c) 如果出现类似以下信息则表明成功连接到管理节点服务器:
2015-06-25 12:48:03 [ndbd] INFO -- Angel connected to 'MGM1:1186'
2015-06-25 12:48:03 [ndbd] INFO -- Angel allocated nodeid: 3
3.SQL节点的启动:
a) service mysqld start
//////////////启动时报错////////////////////////////////////////////////////////
Starting MySQL....................... ERROR! The server quit without updating PID file (/var/local/mysql/data/localhost.localdomain.pid).
[root@localhost bin]# ps -A|grep mysql
2336 ? 00:00:00 mysql-proxy
2340 ? 00:01:02 mysql-proxy
3047 ? 00:00:00 mysqld_safe
3150 ? 00:01:50 mysqld
[root@localhost bin]# kill 3150
后来发现是 my.cnf 中 datadir=/usr/local/mysql/data 写成了 datadir=/var/local/mysql/data 改过了就好了
////////////////////////////////////////////////////////////
4.客户端管理
a) 在管理服务器中输入cd /usr/local/bin/
b) ./ndb_mgm
c) 在ndb_mgm> 提示符下输入show:
ndb_mgm> show
ClusterConfiguration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @NDB1 (mysql-5.6.24 ndb-7.4.6,Nodegroup:0,Master)
id=3 @NDB2 (mysql-5.6.24 ndb-7.4.6,Nodegroup:1)
[ndb_mgmd(MGM)]1 node(s)
id=1 @MGM1 (mysql-5.6.24 ndb-7.4.6)
[mysqld(API)] 2 node(s)
id=4 @SQL1 (mysql-5.6.24 ndb-7.4.6)
id=5 @SQL2 (mysql-5.6.24 ndb-7.4.6)
我的显示如下:还有问题
[root@localhost mysql-cluster]# /usr/local/bin/ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: 192.168.239.128:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 (not connected, accepting connect from 192.168.239.128) id=3 (not connected, accepting connect from 192.168.239.130) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.239.128 (mysql-5.6.28 ndb-7.4.10) [mysqld(API)] 2 node(s) id=4 (not connected, accepting connect from 192.168.239.128) id=5 (not connected, accepting connect from 192.168.239.130)
5.关闭mysql cluster
a) cd /usr/local/bin
b) ./ndb_mgm -e shutdown
c) 虽然mysql cluster 关闭了,但是SQL节点的mysql服务并不会停止的。接下来就可以做各种试验了。