mysql-cluster 安装篇(2)---常见问题疑难杂问

周氏一族,整理技术文档,给下一代留点教程......


这几天,在搭建mysql-cluster,网上说的天幻乱坠,乱七八糟,看得我是一塌糊涂,思路完全乱套了,鄙人,在这里整理一下这些自己讲解的说法。


必须明确三个东西

1、管理节点,只是用来管理集群的,说白了,就是一个心跳脚本而已,仅此而已,别想太多。在安装的过程中,它只需要两个脚本文件,ndb_mgmd,ndb_mgm ,其中各自的作用如下

   ndb_mgmd 是mysql cluster管理服务器

   ndb_mgm  是客户端管理工具

网上,很多人说安装这个管理节点的时候,真是恶心到家,要上传个400多M的压缩包,然后创建临时文件,解压,拷贝,真他妈蛋疼,没这个必要,而且还影响后代学习者。直接在本地,解压,然后上传,赋予执行权限,不就得了。下面就是常见的安装,那是错误的示范:

mkdir /usr/local/mysql-mgm

cd /usr/local/mysql-mgm/

cp /root/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/

chmod 755 /usr/bin/ndb_mgm*

cd /usr/local/

rm -rf mysql-mgm/

mkdir /var/lib/mysql-cluster

touch /var/lib/mysql-cluster/config.ini

vi /var/lib/mysql-cluster/config.ini 

ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/


2、数据节点,也就是存储数据库的那个节点,不要以为它很圣神一样,它比管理节点还要简单,它只需要一个脚本,那就是 ndb_mgm ,至于安装方面,我不想说了,你看上面,就明白了,解压文件,然后拷贝ndb_mgm过去就得了,不过,这里要注意下哦,需要用到 /etc/my.cnf,你想一下就知道了,这个是存放数据库的节点,那么肯定就要有配置文件,那就是他my.cnf;既然说到这里,那也要补充一下,数据节点的my.cnf,需要添加最重要的两行代码

[mysql_cluster] 

ndb-connectstring=192.168.0.202

只有这两行代码,才能告诉他,怎么去连接管理节点。

至于my.cnf,可以在下面这个位置拷贝,然后去掉注销,加上你要的东西,即可,就是如此简单

cp /home/lwprain/mysqlc/support-files/my-default.cnf /etc/my.cnf


3、查询节点,也就是执行 SQL 的那个节点,它就稍微复杂一些了,安装步骤就放在后面再讲了,先来看下,它和数据节点,一样,需要用到my.cnf,你想一下,这个是负责执行sql语句的,所以肯定需要用到啦,不过,它的my.cnf根数据节点,又有点不同哦

[mysqld]

ndbcluster

ndb-connectstring=192.168.0.202

注意了,如果用到两个管理节点,那也是相当简单的,只需要加上逗号,然后ip就行了,这句话的意思,是定义,或者申明,随便你们讲,都好,反正,它就是跟服务器说它,要索引引擎;至于配置嘛,很蛋疼的,请看下面

groupadd mysql

useradd -g mysql mysql

cd /usr/local/

cp /root/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 

rm -rf mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz 

ln -s mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64/ mysql

cd mysql

./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data

chown -R root:mysql .

chown -R mysql data

cp support-files/mysql.server /etc/init.d/

chmod 755 /etc/init.d/mysql.server 

cd bin/

mv * /usr/bin/

cd ..

rm -rf bin/

ln -s /usr/bin/ /usr/local/mysql/bin

vi /etc/my.cnf 

mkdir /var/lib/mysql-cluster

cd /var/lib/mysql-cluster/

ndbd --initial

/etc/init.d/mysql.server start

/usr/local/mysql/bin/mysql_secure_installation

管它配置对不对,先瞄上一眼,反正你们在网上看得文章,肯定是看了不少,才找到我这篇文章的,不怕你们骂。


准备工作,做好之后,就要来开始动真刀了

你如果看了别人的文章之后,你就会发现很多疑问,例如创建文件夹,

/var/lib/mysql/data

/var/lib/mysql-cluster

/var/run/mysqld

疑问一:为什么要创建这些,名字还得这样

疑问二:干嘛所有文章都是这样命名,难不成都是抄来抄去不成

1、先明确一下,我们启动管理节点,数据节点,sql节点的命令各是什么

   管理节点:

   ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/

   数据节点:

   ndbd --initial

   查询节点:

   /etc/init.d/mysql.server start


那么,现在肯定就明白了,管理节点,需要加载配置文件,而配置文件,就是放在 /var/lib/mysql-cluster/config.ini ,所以,需要创建 mysql-cluster


2、我们再来看下存储节点,也就是数据节点,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,192.168.0.203


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


[mysql_cluster] 

ndb-connectstring=192.168.0.202,192.168.0.203

我想,你们都知道了吧,不用我解释 /var/run/mysqld


3、我们再来看下管理节点的配置文件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


[ndb_mgmd]

# IP address of the second management node

NodeId=2

hostname=192.168.0.203

datadir=/var/lib/mysql-cluster


[ndbd]

# IP address of the Storage Server (NDBD) node 1

hostname=192.168.0.204

datadir=/var/lib/mysql/data


[ndbd]

# IP address of the Storage Server (NDBD) node 2

hostname=192.168.0.205

datadir=/var/lib/mysql/data


[mysqld]

hostname=192.168.0.204


[mysqld]

hostname=192.168.0.205


[mysqld]

[mysqld]

这下,有发现什么吧,/var/lib/mysql/data就是存放mysql的位置,所以肯定要创建文件,当然,你可改成你喜欢的文件。


既然说到这点上,那我们就来研究下,这个config.ini 文件,里面有很多地方,一开始是非常迷糊的,我现在对他们一一解释一番如下:

[ndbd default]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

NoOfReplicas为什么要等于2?   这个是定义存储节点的数量,假如你有两个存储节点,那么你就设置为2,后来,你又增加了两个存储节点,那么你这里就配置改成4,这样来一一对应,而不是乱七八糟写,下面两个应该知道吧? 80M 和 18M,我们知道,mysql-cluster集群,是把数据放在内存当中交互,这样速度才更快,理所当然,80和18就是说的占用内存大小。


[mysqld]

[mysqld]

那最后面,留了这两个东东,是啥子玩意? 这个是预留,以防后面,生成环境扩大,需要增加sql_api节点来缓冲压力,实现负载,那么,就要预留,不然后面的加不进来整个现有的集群系统的。所以 变成加了也是白加,因此要留两个备用。

 

NodeId

为什么,有些有这个参数,有些没有?  这个必须要申明一下,管理节点,必须,肯定要有,其他可有可无,看配置着心情好不好,哈哈,好就加上去,不好就不鸟他,但是注意,不能有重复id号,最重要的mysqld什么都不需要填,会自动分配


常见报错信息

安装mysql-cluster之前,不管你是rpm安装,还是源代码安装,都必须先把存在服务器的任何有关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

用yum是最好的得力助手


----------------------------------------------------------------

初始化数据库的时候,经常会报错

[root@localhost mysql]# /usr/local/mysql/bin/mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current

password for the root user.  If you've just installed MySQL, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.


Enter current password for root (enter for none): 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Enter current password for root (enter for none): 



解决办法,就是给他加一个软连接过去,因为你的my.cnf配置错了,不信你看看

[root@localhost mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock


----------------------------------------------------------------------

当你完成第一个管理节点服务器的时候,你会迫不及待的去查看一下整个集群情况,然后就报下面的错误

[root@New_server ~]# 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> exit

其实,这个是OK的,正常的,没问题的,因为集群,必须至少两台,你这个才一个管理节点,所谓集群?除非,你让他知道,它不是独立的。这句话非常有内涵,等下介绍,先来看看下面两个情况

1、完成第一个管理节点,ndb_mgm进去show一下,报错

2、完成第二个节点,管它是管理节点,还是存储节点之后(注意,不是查询节点);例如完成了第二个管理节点,此时,整个集群,就两台机器是online,show一下,结果如下:

[root@localhost ~]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=3 (not connected, accepting connect from 192.168.0.204)

id=4 (not connected, accepting connect from 192.168.0.205)


[ndb_mgmd(MGM)] 2 node(s)

id=1    @192.168.0.202  (mysql-5.6.17 ndb-7.3.5)

id=2    @192.168.0.203  (mysql-5.6.17 ndb-7.3.5)


[mysqld(API)]   4 node(s)

id=5 (not connected, accepting connect from 192.168.0.204)

id=6 (not connected, accepting connect from 192.168.0.205)

id=7 (not connected, accepting connect from any host)

id=8 (not connected, accepting connect from any host)


ndb_mgm> 

3、完成第三个节点,存储节点(注意,不是查询节点),再show一下,注意下面结果:

[root@localhost ~]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=3    @192.168.0.204  (mysql-5.6.17 ndb-7.3.5, starting, Nodegroup: 0)

id=4 (not connected, accepting connect from 192.168.0.205)


[ndb_mgmd(MGM)] 2 node(s)

id=1    @192.168.0.202  (mysql-5.6.17 ndb-7.3.5)

id=2    @192.168.0.203  (mysql-5.6.17 ndb-7.3.5)


[mysqld(API)]   4 node(s)

id=5 (not connected, accepting connect from 192.168.0.204)

id=6 (not connected, accepting connect from 192.168.0.205)

id=7 (not connected, accepting connect from any host)

id=8 (not connected, accepting connect from any host)


ndb_mgm> 

看起来,没什么问题是吧,是的,没问题,那我们继续看第四个节点

4、完成第四个节点,注意,这下是查询节点了,为了方便,我把查询节点,放在存储节点一起,请看

[root@localhost mysql]# nohup mysqld_safe --explicit_defaults_for_timestamp &

[1] 7758

[root@localhost mysql]# nohup: ignoring input and appending output to `nohup.out'


ndb_mgm> show

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=3    @192.168.0.204  (mysql-5.6.17 ndb-7.3.5, starting, Nodegroup: 0)

id=4 (not connected, accepting connect from 192.168.0.205)


[ndb_mgmd(MGM)] 2 node(s)

id=1    @192.168.0.202  (mysql-5.6.17 ndb-7.3.5)

id=2    @192.168.0.203  (mysql-5.6.17 ndb-7.3.5)


[mysqld(API)]   4 node(s)

id=5 (not connected, accepting connect from 192.168.0.204)

id=6 (not connected, accepting connect from 192.168.0.205)

id=7 (not connected, accepting connect from any host)

id=8 (not connected, accepting connect from any host)


一样,起不来,这个数据库是肯定启动的,毫不犹豫的,而且等了很久,3306端口也是开的,不信你自己试试


5、不要灰心,继续,完成第五个节点,注意,这下是存储节点,一完成 ndbd一下,马上就看到消息了

ndb_mgm> Node 4: Started (version 7.3.5)

很快的,当然,肯定再show一下,100%节点是两个都OK的,好吧,我们验证一下:


ndb_mgm> show

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=3    @192.168.0.204  (mysql-5.6.17 ndb-7.3.5, starting, Nodegroup: 0)

id=4    @192.168.0.205  (mysql-5.6.17 ndb-7.3.5, starting, Nodegroup: 0)


[ndb_mgmd(MGM)] 2 node(s)

id=1    @192.168.0.202  (mysql-5.6.17 ndb-7.3.5)

id=2    @192.168.0.203  (mysql-5.6.17 ndb-7.3.5)


[mysqld(API)]   4 node(s)

id=5 (not connected, accepting connect from 192.168.0.204)

id=6 (not connected, accepting connect from 192.168.0.205)

id=7 (not connected, accepting connect from any host)

id=8 (not connected, accepting connect from any host)



6、此时,继续纠结 4 的问题,干脆把 第五个 节点,上面做一下查询节点吧,做着做着,你会发现一个问题,如果你细心的话

ndb_mgm> show

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=3    @192.168.0.204  (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0, *)

id=4    @192.168.0.205  (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0)


[ndb_mgmd(MGM)] 2 node(s)

id=1    @192.168.0.202  (mysql-5.6.17 ndb-7.3.5)

id=2    @192.168.0.203  (mysql-5.6.17 ndb-7.3.5)


[mysqld(API)]   4 node(s)

id=5    @192.168.0.204  (mysql-5.6.17 ndb-7.3.5)

id=6    @192.168.0.205  (mysql-5.6.17 ndb-7.3.5)

id=7 (not connected, accepting connect from any host)

id=8 (not connected, accepting connect from any host)

突然间全部启动了???????  这是纳尼情况???


开始怀疑,必须得所有 存储节点,都起来了,SQL节点,才能起来。

不过,这个也只不过是我的假设,因为我们目前存储节点和sql节点,都是在同一台机器上面,管理节点是分开,这个问题,留到后面更新

本文出自 “周氏一族” 博客,谢绝转载!

你可能感兴趣的:(安装问题,mysql-cluster)