周氏一族,整理技术文档,给下一代留点教程......
网络架构
192.168.0.202 管理节点(MGM)
192.168.0.203 存储节点(NDB)
192.168.0.204 查询节点(API)
准备材料(可以到官网下载,解压拿出来这两个包)
MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
开始安装之前,还是再三告知,mgm管理节点,只需要bin/ndb_mgmd 和 bin/ndb_mgm ;ndb存储节点,只需要 bin/ndb_mgm,知道这一点,那么应该就很容易理解我们下面的配置了
192.168.0.202 配置如下:
1、清理本机自带任何跟mysql有关的包
[root@localhost ~]# rpm -qa |grep mysql
mysql-5.1.61-4.el6.x86_64
mysql-libs-5.1.61-4.el6.x86_64
mysql-devel-5.1.61-4.el6.x86_64
[root@localhost ~]# yum -y remove mysql-5.1.61-4.el6.x86_64 mysql-libs-5.1.61-4.el6.x86_64 mysql-devel-5.1.61-4.el6.x86_64
2、安装,因为mgm只需要用到mysql-cluster-server 这个包里面的两个bin文件,但是请注意,这里我是直接安装整个,虽然有点多此一举,不过算了啦,懒得去拿那两个包,直接rpm好了,自己知道就行了。
[root@localhost ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:MySQL-Cluster-server-gp########################################### [100%]
3、创建文件夹
[root@localhost ~]# mkdir /var/lib/mysql/data
[root@localhost ~]# mkdir /var/lib/mysql-cluster
[root@localhost ~]# mkdir /var/run/mysqld
[root@localhost ~]# chmod -R 1777 /var/lib/mysql
[root@localhost ~]# chmod -R 1777 /var/lib/mysql-cluster/
[root@localhost ~]# chmod -R 1777 /var/run/mysqld/
有必要解释一下,mysql/data 这个是存放数据库,mysql-cluster这个是管理节点配置路径,run/mysqld这个是mysql运行后台pid路径,当然,这些你都可以根据你自己需要修改。
4、进入/var/lib/mysql-cluster目录,创建config.ini配置文件;
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
# IP address of the first management node
NodeId=1
hostname=192.168.0.202
datadir=/var/lib/mysql-cluster
[ndbd]
# IP address of the Storage Server (NDBD) node 1
hostname=192.168.0.203
datadir=/var/lib/mysql/data
[mysqld]
hostname=192.168.0.204
[mysqld]
[mysqld]
5、启动 管理 节点 服务,记得指定配置路径,否则系统会默认创建到[root@localhost ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
MySQL Cluster Management Server mysql-5.6.17 ndb-7.3.5
[root@New_server ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 (not connected, accepting connect from 192.168.0.203)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.202 (mysql-5.6.17 ndb-7.3.5)
[mysqld(API)] 3 node(s)
id=3 (not connected, accepting connect from 192.168.0.204)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
可以看到,起来了,但是,请注意下面三个情况:
情况一:如果,你是双管理节点,那么此时此刻,是不可能起来的,他要等另外一个管理节点的连接,报错如下[root@localhost ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
ERROR Message: The cluster configuration is not yet confirmed by all defined management servers. This management server is still waiting for node 2 to connect.
Could not get configuration
* 4012: Failed to get configuration
* The cluster configuration is not yet confirmed by all defined management servers. This management server is still waiting for node 2 to connect.
ndb_mgm>
情况二:如果你是双管理节点,而且两者都把管理节点服务启动了,并且,都正常,然后把其中一个管理节点关掉,另外一个管理节点show一下,没问题。
情况三:如果你是双管理节点,而且两者都把管理节点服务启动了,并且,都正常,然后把整个集群关闭,或者你就模拟意外断电,所有机器都shutdown,开机,你会发现,这时候的管理节点,一个也能show,不需要等待两个管理节点一起up才能show。
总结:
单管理节点,没有任何问题,直接启动服务,就能show
双管理节点,有问题,第一次,有且首次启动的时候,需要等待双方协商握手之后,才能完整,打个必须,两个人一起上洗手间,A上完了,不能走,必须等B也上完,才能一起牵手离开;但是,第二次的时候,A上完,就能独自离开了,因为它已经知道它还有另外一个B,心里知道就行了,不用管B的死活了。同样道理,B也是一样;
192.168.0.203 配置如下:
1、清理本机自带任何跟mysql有关的包
[root@localhost ~]# rpm -qa |grep mysql
mysql-5.1.61-4.el6.x86_64
mysql-libs-5.1.61-4.el6.x86_64
mysql-devel-5.1.61-4.el6.x86_64
[root@localhost ~]# yum -y remove mysql-5.1.61-4.el6.x86_64 mysql-libs-5.1.61-4.el6.x86_64 mysql-devel-5.1.61-4.el6.x86_64
2、安装,因为ndb只需要用到mysql-cluster-server 这个包里面的一个bin文件(ndbd),但是请注意,这里我是直接安装整个,有点多此一举。
[root@localhost ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:MySQL-Cluster-server-gp########################################### [100%]
3、创建文件夹
[root@localhost ~]# mkdir /var/lib/mysql/data
[root@localhost ~]# mkdir /var/lib/mysql-cluster
[root@localhost ~]# mkdir /var/run/mysqld
[root@localhost ~]# chmod -R 1777 /var/lib/mysql
[root@localhost ~]# chmod -R 1777 /var/lib/mysql-cluster/
[root@localhost ~]# chmod -R 1777 /var/run/mysqld/
有必要解释一下,mysql/data 这个是存放数据库,mysql-cluster这个是管理节点配置路径,run/mysqld这个是mysql运行后台pid路径,当然,这些你都可以根据你自己需要修改。
4、创建/etc/my.cnf[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.0.202
5、启动ndb节点
[root@localhost ~]# ndbd --initial
2014-07-15 19:12:35 [ndbd] INFO -- Angel connected to '192.168.0.202:1186'
2014-07-15 19:12:35 [ndbd] INFO -- Angel allocated nodeid: 2
6、到管理节点,show 一下看看ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 @192.168.0.203 (mysql-5.6.17 ndb-7.3.5, starting, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.202 (mysql-5.6.17 ndb-7.3.5)
[mysqld(API)] 3 node(s)
id=3 (not connected, accepting connect from 192.168.0.204)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
很明显,已经连接上来了。
192.168.0.204 配置如下:
1、清理本机自带任何跟mysql有关的包
[root@localhost ~]# rpm -qa |grep mysql
mysql-5.1.61-4.el6.x86_64
mysql-libs-5.1.61-4.el6.x86_64
mysql-devel-5.1.61-4.el6.x86_64
[root@localhost ~]# yum -y remove mysql-5.1.61-4.el6.x86_64 mysql-libs-5.1.61-4.el6.x86_64 mysql-devel-5.1.61-4.el6.x86_64
2、安装,mysql-cluster-server 和 mysql-cluster-client
[root@localhost ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:MySQL-Cluster-server-gp########################################### [100%]
[root@localhost ~]# rpm -ivh MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:MySQL-Cluster-client-gp########################################### [100%]
3、创建文件夹
[root@localhost ~]# mkdir /var/lib/mysql/data
[root@localhost ~]# mkdir /var/lib/mysql-cluster
[root@localhost ~]# mkdir /var/run/mysqld
[root@localhost ~]# chmod -R 1777 /var/lib/mysql
[root@localhost ~]# chmod -R 1777 /var/lib/mysql-cluster/
[root@localhost ~]# chmod -R 1777 /var/run/mysqld/
有必要解释一下,mysql/data 这个是存放数据库,mysql-cluster这个是管理节点配置路径,run/mysqld这个是mysql运行后台pid路径,当然,这些你都可以根据你自己需要修改。
4、创建/etc/my.cnf[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=192.168.0.202
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
5、启动sql服务
[root@localhost ~]# /etc/init.d/mysql start
Starting MySQL....... SUCCESS!
[root@localhost ~]#
6、到管理节点,show一下,看看mysql—api是不是已经起来ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 @192.168.0.203 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.202 (mysql-5.6.17 ndb-7.3.5)
[mysqld(API)] 3 node(s)
id=3 @192.168.0.204 (mysql-5.6.17 ndb-7.3.5)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
7、到此,整个集群算是完成。
问题总结:
1、如果要扩大集群,例如增加一台ndb节点,那要怎么搞
管理节点,删除/var/lib/mysql-cluster/ 下面ndb开头的所有文件
管理节点,修改/var/lib/mysql-cluster/config.ini,增加ndb集群id和hostname
存储节点,修改my.cnf,增加[mysql_cluster]ndb-connectstring=192.168.0.202
2、如果,有一天,突然,想把203这台ndb节点,附加上api节点,那么就会有一个蛋疼的事情出现,理论上,mysql-cluster各个节点,都是独立的,管它是同一台还是不同台,都是正常的;但是,如果你加上去的话,你就要注意一个事情
同一台机器的 ndb 节点和 sql节点,必须ndb节点先启动,才能启动sql节点,否则sql节点,是永远都连不上集群,千万切忌,我就是纠结这个问题,老是不启动ndb节点,在疑问自己,为什么sql节点启动了,管理节点看不到sql节点状态。
3、关闭集群的命令
先关闭 查询节点 mysqladmin -uroot -p shutdown 密码在 /root/.mysql_secret
再关闭 集群节点 ndb_mgm -e shutdown