标签:使用 ar sp 数据 art on 问题 代码 amp
公司测试环境,使用两台服务器部署了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,怀疑是不是两台服务器数据不同步导致。没有深入跟踪。
目前先记录到这里,以后遇到问题,再回来更新。
标签:使用 ar sp 数据 art on 问题 代码 amp
原文地址:http://my.oschina.net/maliang0130/blog/332875