首页 > 代码库 > MysqlCluster 开机自动启动

MysqlCluster 开机自动启动

      公司测试环境,使用两台服务器部署了mysql cluster。因为公司机房经常会断电,导致每次服务器重启后,都要手动重启一遍各种服务器,否则无法进行测试,非常麻烦。所以结合之前在网上看到了监控脚本,整理了一个自动启动方案。目前测试还算正常。

      mysql cluster的启动需要按照固定的顺序进行:管理节点->数据节点->sql节点,如果不按此顺序启动,可能会导致服务不正常。目前采用下面的方法实现各节点的自动启动:

      服务器部署情况说明:

1. 202服务器部署管理节点、数据节点、SQL节点。
2. 204服务器部署数据节点、SQL节点。

      自动启动方案:

#管理节点和SQL节点的启动放到rc.local中执行
#在/etc/rc.local中增加如下代码
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
/usr/local/mysql/bin/mysqld_safe &

数据节点的启动需要等待管理节点启动后,才能进行。所以使用了监控脚本来控制数据节点的启动,管理节点监听1186端口,使用nc检测1186端口的状态,来判断管理节点是否已经启动成功。
监控脚本的代码如下所示:
#!/bin/bash

while  :
do
	#检测管理节点是否已经启动
	nc -w 10 -z 192.168.1.202 1186 > /dev/null 2>&1
	ndb_mgmd=`echo $?`
	
	if [ $ndb_mgmd -eq 0 ];then
	#管理节点启动的情况下,检测数据节点和sql节点。
	#如果数据节点未启动,启动数据节点,并重启mysqld。否则不做任何操作。
		ndbd_num=`ps -C ndbd --no-header | wc -l`
		if [ $ndbd_num -eq 0 ];then
		  /usr/local/mysql/bin/ndbd
		  #sleep 20
		  service mysqld restart
		fi
	
	else
	#管理节点未启动或管理节点挂掉的时候,关闭数据节点
          ndbd_num=`ps -C ndbd --no-header | wc -l`
	  if [ $ndbd_num != 0 ];then
	  	killall -s SIGKILL ndbd
	  fi
	fi
	sleep 5
done

      将监控脚本的代码保存到/root/ndbd_mysql_check.sh中,同时在rc.local中添加代码,自动启动此脚本的执行。

在/etc/rc.local中加入下面代码,开机启动监控脚本
nohup sh /root/ndbd_mysql_check.sh &





      到此,各节点的自动启动就可以搞定了。分别重启每台服务器进行测试,如果服务都能正常启动,表明成功了。

PS:

测试中发现的问题:
1. 在数据节点刚刚启动时,可以连接数据库,但是进行查询操作时会报错:
ERROR 1296 (HY000): Got error 157 ‘Unknown error code‘ from NDBCLUSTER
等待几分钟之后,再次进行查询操作时,恢复正常。猜测可能是某些节点尚未完全启动导致。

2. 在进行多表联合查询时,还报了另一错误:
SQLSTATE[HY000]: General error: 1297 Got temporary error 20016 ‘Query aborted due to node failure‘ from NDBCLUSTER
重启了204的数据节点和SQL节点后,恢复正常。
之前测试时一直只启动了204的NDB和SQL,而没有启动202的NDB和SQL,怀疑是不是两台服务器数据不同步导致。没有深入跟踪。




     目前先记录到这里,以后遇到问题,再回来更新。





MysqlCluster 开机自动启动