一:准备阶段1:节点对应ip管理节点(1个)192.168.88.130SQL节点(2个)192.168.88.130:3308192.168.88.132:3308数据节点(2个)192.168.88.130:192.168.88.132***这三种节点可以配置在不同机器上,也可以配置在一台机器上。有硬件限制使用两台
一:准备阶段
1:
节点 对应ip
管理节点(1个) 192.168.88.130
SQL节点(2个) 192.168.88.130:3308 192.168.88.132:3308
数据节点(2个) 192.168.88.130: 192.168.88.132
***这三种节点可以配置在不同机器上,也可以配置在一台机器上。有硬件限制使用两台服务。
2:
mysql版本
mysql-5.1.47.tar.gz
二:安装
1: tar -zxf mysql-5.1.47.tar.gz
2: cd mysql-5.1.47
3: ./configure --prefix=/usr/local/mysql --localstatedir=/app/mysqlcluster --syscOnfdir=/usr/local/mysql/my.cnf --enable-static --enable-profiling --enable-local-infile --with-charset=utf8 --with-tcp-port=3308 --with-mysqld-user=mysql --with-plugins=partition,innobase,ndbcluster --without-plugin-PLUGIN
***ndbcluster 这个引擎必须编译进去
4:make & make install
5: cp ./support-files/my-large.cnf /usr/local/mysql/my.cnf
6: vi /usr/local/mysql/my.cnf
[mysqld]
ndbcluster #运行NDB存储引擎
ndb-cOnnectstring=192.168.88.130 #指定管理节点
[mysql_cluster]
ndb-cOnnectstring=192.168.88.130
7: /usr/local/mysql/bin/mysql_install_db --user=mysql
***在192.168.88.132服务也做以上操作
三:配置管理节点
1:在192.168.88.130服务器/usr/local/mysql/下创建config.ini
vi config.ini
[NDBD DEFAULT]
NoOfReplicas=1 //每个数据节点的镜像数量
DataMemory=80M //每个数据节点给数据分配的内存
IndexMemory=40M //每个数据节点给索引分配的内存
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
id=1
hostname=192.168.88.130 //管理节点数据目录
datadir=/app/mysqlcluster
[NDBD]
id=2
hostname=192.168.88.130
datadir=/app/mysqlcluster
[NDBD]
id=3
hostname=192.168.88.132
datadir=/app/mysqlcluster
[MYSQLD]
hostname=192.168.88.130
[MYSQLD]
hostname=192.168.88.132
四:启动管理节点,数据节点和SQL节点
1:/usr/local/mysql/libexec/ndb_mgmd -f /usr/local/mysql/config.ini #启动管理节点
可以进入 /usr/local/mysql/bin/ndbd_mgm ,然后使用show 命令 查看管理节点 输出如下:
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.88.130)
id=3 (not connected, accepting connect from 192.168.88.132)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.88.130 (Version: 5.1.47)
[mysqld(API)] 3 node(s)
id=4 (not connected, accepting connect from 192.168.88.130)
id=5 (not connected, accepting connect from 192.168.88.132)
2 /usr/local/mysql/libexec/ndbd --initial --ndb-cOnnectstring=192.168.88.130:1192 #启动数据节点
***第一次启动可以加上--initial 初始化,如果数据节点有数据,再次启动数据节点最好不要加上--initial(除非有备份) ,它会把数据节点上的数据清空。
3 /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/lcoal/mysql/my.cnf --user=mysql & #启动服务节点
4:查看集群信息
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.88.130 (Version: 5.1.47, Nodegroup: 0, Master)
id=3 @192.168.88.132 (Version: 5.1.47, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.88.130 (Version: 5.1.47)
[mysqld(API)] 3 node(s)
id=4 @192.168.88.130 (Version: 5.1.47)
id=5 @192.168.88.132 (Version: 5.1.47)
五:基本测试
1:SQL节点发生单点故障
1.1: mysqladmin -h127.0.0.1 -P3308 shutdown #停止sql节点mysql服务
1.2:参看一下cluster的状态
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.88.130 (Version: 5.1.47, Nodegroup: 0, Master)
id=3 @192.168.88.132 (Version: 5.1.47, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.88.130 (Version: 5.1.47)
[mysqld(API)] 3 node(s)
id=4 (not connected, accepting connect from 192.168.88.130)
id=5 @192.168.88.132 (Version: 5.1.47)
***此时SQL节点断开与cluster的连接。数据节点还是能正常工作。
2:数据节点单点节点故障
2.1:kill 21794 21793 #在192.168.88.130 上停止NDB进程
2.2:在任何SQL节点执行
mysql> select * from t;
ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER
***此时整个cluster出现问题了,解决这个问题的方法是:在管理节点的配置文件有NoOfReplicas=1
(这个数据节点的数据只要一份)所以修改这个选项设置NoOfReplicas=2,这样把该节点数据镜像一份到其他的节点上。
3:管理节点故障 (mysql5.5可以支持多个管理节点)
3.1:ndb_mgm> shutdown 或# /usr/local/mysql/bin/ndb_mgm -e shutdown
***此时管理节点,数据节点被关闭了,SQL的mysql服务节点没有关闭。
有一个疑问:每当重启管理节点,mysql服务节点不能自动连接上管理节点,怎么让服务节点自动连接上管理节点?
4:mysql cluster 备份
4.1:ndb_mgm>start backup
在数据目录生成一个BACKUP目录,在该目录下,有每次备份生成的目录如BACKUP-1(表示第一次备份),在BACKUP-1有三个文件
BACKUP-1.2.log,BACKUP-1.2.ctl,BACKUP-1-0.2.DATA(.2表示备份id=2的数据节点的数据).此时在192.168.88.132也生成这个文件件
,但是是备份id=3的数据节点的数据(。3表示)。
5:mysql cluster 数据恢复
5.1: /usr/local/mysql/bin/ndb_restore --connect-string=192.168.88.130 --nodeid=2 --backupid=1 --restore_data --restore_meta --backup_path=/app/mysqlcluster/BACKUP/BACKUP-1
[root@localhost /]# /usr/local/mysql/bin/ndb_restore -c host=192.168.88.130:1186 --nodeid=3 --backupid=1 --restore_meta -r /app/mysqlcluster/BACKUP/BACKUP-1
Nodeid = 3
Backup Id = 1
backup path = /app/mysqlcluster/BACKUP/BACKUP-1
Ndb version in backup files: Version 5.1.47
Configuration error: Error : Could not alloc node id at 192.168.88.130 port 1186: No free node id found for mysqld(API).
Failed to initialize consumers
NDBT_ProgramExit: 1 - Failed
***此时恢复出错,提示对mysqld(API)没有空闲节点。解决这个问题可以在管理节点的配置文件添加一个空的
[mysqld]
#空的
5.2:/usr/local/mysql/bin/ndb_restore --connect-string=192.168.88.130 --nodeid=2 --backupid=1 --restore_data --restore_meta --backup_path=/app/mysqlcluster/BACKUP/BACKUP-1
Nodeid = 2
Backup Id = 1
backup path = /app/mysqlcluster/BACKUP/BACKUP-1
Ndb version in backup files: Version 5.1.47
Connected to ndb!!
Create table `clutest/def/t` failed: 721: Table or index with given name already exists
Restore: Failed to restore table: `clutest/def/t` ... Exiting
NDBT_ProgramExit: 1 - Failed
***此时恢复出错是因为表结构存在,对于数据元存在,只恢复表数据就够了,去除--restore_meta这个选项(恢复数据元)
6:日志管理
6.1:mysql cluster 提供两种日志:集群日志(clusterlog),节点日志(node log)
6.2 在集群客户端查看日志状态(clusterlog info),打开(clusterlog on),关闭日志(clusterlog off)
6.3:cluster中的日志有很多类型(Category(startup, shutdown, statistics,checkpoint noderestart,connnection ,error ,info)
Priority (1表示“重要”,15 表示“最不重要”) ,Servrity level (alter,critical,error,warning,info,debug) ),
)
可以按照类别进行过滤。具体用法:1:node_id clusterlog category=level (用于小于或等于level的优先级将category 事件记录到cluster日志。
nodeid 可以为all(全部节点)),也可以是某个节点
2:clusterlog toggle severity_level #过滤severity_level的日志
7:性能测试(期待着)