MySQL-Cluster 初识
数据节点(ndb):
- [root@client119 ~]# vim /etc/hosts
- 192.168.1.118 client118.kongzhong.com client118
- 192.168.1.119 client119.kongzhong.com client119
- 192.168.1.120 client120.kongzhong.com client120
- 192.168.1.121 client121.kongzhong.com client121
- 192.168.1.122 client122.kongzhong.com client122
- 192.168.1.123 client123.kongzhong.com client123
- 192.168.1.124 client124.kongzhong.com client124
- 192.168.1.125 client125.kongzhong.com client125
- 192.168.1.126 client126.kongzhong.com client126
3.mysql-cluster 管理节点配置:
(1).在管理节点[192.168.1.118]上建立一个存放cluster配置文件的目录
- [root@client118 ~]# mkdir /var/lib/mysql-cluster
- [root@client118 ~]# cd /var/lib/mysql-cluster/
(2).编写配置文件
- [root@client118 mysql-cluster]# vim configure.ini
- [配置文件内容如下]
- # [ndbd default]:表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项
- [ndbd default]
- # 每个数据节点的镜像数量(即复制成员的个数)
- NoOfReplicas=2
- # 为数据存储分配的内存
- DataMemory=80M
- # 为索引存储分配的内存
- IndexMemory=18M
- [ndb_mgmd]
- # 定义管理节点的ip地址或者主机名
- hostname=192.168.1.118
- # 管理节点数据(日志)目录
- datadir=/var/lib/mysql-cluster
- # 定义数据节点的ip地址,数据存放目录
- [ndbd]
- hostname=192.168.1.122
- datadir=/usr/local/mysql
- [ndbd]
- hostname=192.168.1.119
- datadir=/usr/local/mysql
- [ndbd]
- hostname=192.168.1.120
- datadir=/usr/local/mysql
- [ndbd]
- hostname=192.168.1.121
- datadir=/usr/local/mysql
- # 定义sql节点
- [mysqld]
- hostname=192.168.1.125
- [mysqld]
- hostname=192.168.1.123
- [mysqld]
- hostname=192.168.1.124
- # 留一个空的[mysqld],以备扩展用, 否则会出现Failed to allocate nodeid No free node id found for ndbd(NDB)错误
- [mysqld]
- [mysqld]
(3).解压mysql-cluster压缩包
- [root@client118 ~]# tar -xf mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
- [root@client118 ~]# cd mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64
- # 将管理节点用到的两个ndb_mgm*命令复制到/usr/local/bin/下
- [root@client118 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# cp bin/ndb_mgm* /usr/local/bin/
- [root@client118 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# cd /usr/local/bin/
- # 将上述命令赋予执行权限
- [root@client118 bin]# chmod +x ndb_mgm*
- # 建立mysql目录
- [root@client118 bin]# mkdir /usr/local/mysql
4.配置数据节点和sql节点:
# 我在数据节点和sql节点都初始化了系统数据库,个人觉得数据节点可以不初始化系统数据库,大家可以这样试一下
(1).在每个sql节点和数据节点配置my.cnf
- [root@client123 ~]# vim /etc/my.cnf
- [client]
- socket=/usr/local/mysql/sock/mysql.sock
- [mysqld]
- ndbcluster
- datadir=/usr/local/mysql
- socket=/usr/local/mysql/sock/mysql.sock
- port=3306
- # 指定管理节点ip地址
- ndb-connectstring=192.168.1.118
- old_passwords=1
- [mysql_cluster]
- # 指定管理节点ip地址
- ndb-connectstring=192.168.1.118
(2).在每个sql节点创建mysql用户和组[可以仅在sql节点执行建立mysql用户,数据节点可建可不建]
- [root@client120 ~]# groupadd mysql
- [root@client120 ~]# useradd -g mysql mysql
- # 建立mysql目录
- [root@client123 ~]# mkdir /usr/local/mysql
- [root@client123 ~]# mkdir /usr/local/mysql/sock
(3).在sql节点和数据节点都执行如下操作[数据节点如果在/usr/local没有mysql目录,建立此目录]
- [root@client123 ~]# tar -xf mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
- [root@client123 ~]# cd /usr/local/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64
- # 将解压的内容移动到 /usr/local/mysql目录下
- [root@client124 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# mv ./* ../mysql
(4).在sql节点初始化系统数据库,并修改相应目录权限和开机启动
- # 初始化系统数据库
- [root@client124 mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql
- [root@client123 mysql]# chown -R mysql.mysql /usr/local/mysql/data
- [root@client123 mysql]# chown -R mysql.mysql /usr/local/mysql/sock
- [root@client123 mysql]# chown -R mysql .
- [root@client123 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
- [root@client123 mysql]# chmod +x /etc/init.d/mysqld
- [root@client123 mysql]# chkconfig --add mysqld
5.cluster环境的启动
注意启动顺序:首先是管理节点,然后是NDBD节点,最后是SQL节点。
关闭顺序:先关闭sql节点,再关闭管理节点[ndb_mgm> shutdown]
(1).管理节点启动
- [root@client118 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
- # 启用ndb_mgm来监听客户端,如下:
- [root@client118 ~]# ndb_mgm
- # 输入show,查看集群状况
- ndb_mgm> show
(2).启动数据(ndb)节点
- # 首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。
- # 在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件[在备份、恢复或配置变化后重启时除外]
- [root@client119 ~]# /usr/local/mysql/bin/ndbd --initial
- 如果不是首次启动,则执行下面的命令。
- [root@client119 ~]# /usr/local/mysql/bin/ndbd
(3).sql节点启动
- # sql节点可以执行如下命令
- [root@client123 ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
- # 如果将mysql的启动脚本已经复制到/etc/init.d下,可以执行如下:
- [root@client123 ~]# /etc/init.d/mysqld start
(4).现在再到管理节点,使用show命令看,是不是数据节点和sql节点都连上了
- ndb_mgm> show
- Cluster Configuration
- ---------------------
- [ndbd(NDB)] 4 node(s)
- id=2 @192.168.1.122 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)
- id=3 @192.168.1.119 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)
- id=4 @192.168.1.120 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)
- id=5 @192.168.1.121 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)
- [ndb_mgmd(MGM)] 1 node(s)
- id=1 @192.168.1.118 (mysql-5.6.14 ndb-7.3.3)
- [mysqld(API)] 5 node(s)
- id=6 @192.168.1.125 (mysql-5.6.14 ndb-7.3.3)
- id=7 @192.168.1.123 (mysql-5.6.14 ndb-7.3.3)
- id=8 @192.168.1.124 (mysql-5.6.14 ndb-7.3.3)
- id=9 (not connected, accepting connect from any host)
- id=10 (not connected, accepting connect from any host)
6.测试
(1).在任意sql节点创建测试数据
- # 为了让表在cluster中正常复制,创建一个表必须使用ndbcluster引擎(engine=ndb Or engine=ndbcluster)方法如下:
- [root@client123 ~]# mysql
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 2
- Server version: 5.6.14-ndb-7.3.3-cluster-gpl MySQL Cluster Community Server (GPL)
- Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> create database xcg;
- mysql>use xcg
- mysql>create table teacher(t_id int) engine=ndb;
- # 如果是一个已经存在的表,用alter table修改表的引擎。
- mysql>alter table student engine=ndb;
- # 插入一条数据:
- mysql>insert into teacher values(133);
- # 然后用另外一个sql节点登陆,查询数据,看是否能看到
- mysql>select * from teacher;
- # 两个节点数据保持一致,说明测试成功!
(2).模拟某一个数据(ndb)节点节点宕掉
# 在任意一个数据节点上终止掉NDB进程,然后再分别通过SQL节点去访问teacher表,查看是否可以正常访问,数据是否一致。
# 这里就不演示了,各位自行测试,ndb进程使用kill -9 杀掉进程
(3).模拟sql节点宕掉,原理同上,不演示
注意:
(1).在测试过程中,遇到ndb节点莫名重启,有点纳闷,待解!
(2).每次修改config.ini文件,重启ndb_mgmd时,需要删除mysql-cluster文件下的ndb_1_config.bin.1文件,
因为他默认调用此文件
(3).mysql-cluster主要配置选项:管理节点配置configure.ini,sql和数据节点配置/etc/my.cnf