mysql ndbcluster7.0.16 升级到 7.…

来源:互联网 发布:canonmp288清零软件 编辑:程序博客网 时间:2024/06/02 02:10

昨天刚给用户做的ndbcluster升级,从版本7.0.16升级到7.2.7.其中sql节点的版本由5.1升级到5.5.


1.当前线上环境


目前线上ndbcluster版本为7.0.16主要包括1个管理节点,4个数据节点,以及2sql节点(由于这两个节点数据不同步,并只使用其中一个,其实就是一个sql节点)。


线上系统中除了有ndbcluster引擎的表以外,还有一些sql节点本地的MyISAM表,且表的规模都比较大。


假设管理节点编号为1,数据节点为2-5sql节点为6.

需确认如下信息(这些信息可以在config.ini中找到):

节点1

IP


节点2

IP

datadir:


节点3

IP

datadir


节点4

IP

datadir


节点5

IP

datadir


节点6

IP

datadir

port


2.升级前准备

 

a.下载最新的ndbcluster64tar

http://dev.mysql.com/downloads/cluster/

并将这个包拷贝到所有机器上。


b.升级与备份一个线上sql节点的slave节点


先通过暂时停止服务的方式拷贝出sql节点的本地表,并根据这个拷贝部署一个5.5mysql,执行mysql_upgrade (实际升级过程中发现可以不执行mysql_upgrade),并让它与线上sql节点建立主从复制。


步骤如下:


首先暂时停止数据录入并关闭sql节点;

然后拷贝sql节点的数据目录中的mysql库和业务相关myisam表的库到另一台机器(可以是某个数据节点所在机器,只要那个机器能够承受)。

 

在这台机器上解压并部署ndbcluster72压缩包中的mysql5.5(不需要执行mysql_install_db,不修改/usr/local/mysql的软连接),直接在解压出来的文件夹中创建一个my.cnf

my.cnf内容如下:

[mysqld]

datadir=拷贝出来的数据目录

(需要注意该数据目录的所属用户必须是mysqlmysql

replicate-ignore-table= 【ndb_table_name1】
replicate-ignore-table= 【ndb_table_name2】
...
replicate-ignore-table= 【ndb_table_namen】

(因为在两个sql节点的主从复制中,ndb表的修改也会被同步,这就会导致同步失
败。所以我们需要在复制过程中屏蔽ndb表,例如在test库下有个ndb表t1和t2, 我们就
需要在配置文件中添加:
replicate-ignore-table=test.t1
replicate-ignore-table=test.t2
依次类推。)


启动这个mysql5.5shell中执行(这步可以省略)

shell>mysql_upgrade-uroot-p


启动线上sql节点,并分别在sql节点和mysql5.5上执行

mysql>resetmaster;

mysql>resetslave;


然后在mysql5.5上执行

mysql>changemasterto...(线上sql节点)

mysql>startslave;


使用命令

mysql>showslavestatus\G

检查主从复制状态是否正常(有2YES


最后恢复线上业务的录入。




3.升级


假设:
管理节点编号1
4
个数据节点编号依次为,2345
1
sql节点编号为6


具体步骤包括如下:


a.在线升级管理节点

ndb_mgm>1stop


备份/usr/local/bin/ndb_mgm*ndb_mgmndb_mgmd可执行文件)

然后用7.2版本中的ndb_mgm*覆盖/usr/local/bin下面的ndb_mgm*
shell>chmod
+x/usr/local/bin/ndb_mgm*

最后重启管理节点
shell>ndb_mgmd
-f/path/to/config.ini

(如果config.ini的配置有修改,需要在命令后面添加选项--initial)


b.在线依次升级数据节点

首先关闭该节点(以节点2为例,其他雷同)
ndb_mgm>
2stop


备份该数据节点的数据目录

然后在该机器上部署上7.2ndbcluster,确保该ndbcluster使用原来的datadir
在启动该数据节点
shell>
ndbd--initial

根据官方手册讲需要添加--initial参数,但数据量大的话这会非常的慢,实际操作过程中我们没有使用这个选项,对于7.0.16到7.2.7的升级而言,没有initial完全没有问题)


如果确定数据节点是否已经重启完成:

ndb_mgm> show

这个命令会列出所有节点,包括数据节点.如果数据节点正在启动,它会显示starting

ndb_mgm> allstatus

这个命令会把所有数据节点所处的状态列出来. 如果这个数据节点正在启动,这个命令会显示启动到那个步骤的,一般步骤4是最耗时的。

关于每个步骤是干什么的可以查看手册相关章节

(17.5.1.Summary of MySQL ClusterStart Phases)

ndb_mgm> all reportmemoryusage

这个命令会打印各个数据节点索引与数据的内存使用情况,通过对比正在启动节点与正在运行节点,可以大概评估出来启动还需要多久。


c.非在线升级sql节点


暂时停止数据录入


如果可以修改业务访问mysqlip,那么直接将该ip指向新的mysql5.5sql节点

否则

直接使用7.2cluster程序包中带的mysqld_safe启动,需要确保数据目录还是原来的那个目录

(如前面所述,这里可以不执行mysql_upgrade)

恢复数据录入



4.升级所需时间


根据数据量而定,越大越久。。。

并且不弄mysql_upgrade和 ndbd--initial的话会快很多


5. 后续问题


后面运行过程中客户反馈,出现如下问题:

mysql> select count(*)  FROMTR_FILE_RCV where LOG_TIME<'2012-08-17 16:00:00' andLOG_TIME>='2012-08-17 15:00:00';
+----------+
| count(*) |
+----------+
   46320|
+----------+
1 row in set (0.10 sec)

mysql> DELETE FROM TR_FILE_RCV whereLOG_TIME<'2012-08-17 16:00:00' andLOG_TIME>='2012-08-17 15:00:00';
ERROR 1032 (HY000): Can't find record in 'TR_FILE_RCV'


尝试对每个数据节点重新用ndbd--initial重启,碰到如下问题:

初始化重起2号节点时,3号节点报2341错误:
Time: Sunday 2 September 2012 - 07:37:32
Status: Temporary error, restart node
Message: Internal program error (failed ndbrequire) (Internalerror, programming error or missing error message, please report abug)
Error: 2341
Error data: DbspjMain.cpp
Error object: DBSPJ (Line: 2204) 0x00000006
Program: ndbd
Pid: 32177
Version: mysql-5.5.25 ndb-7.2.7
Trace: /DD4/ndb_3_trace.log.3 [t1..t1]
***EOM***

4、5节点报2305错误
Time: Sunday 2 September 2012 - 07:40:34
Status: Temporary error, restart node
Message: Node lost connection to other nodes and can not form aunpartitioned cluster, please investigate if there are error(s) onother node(s) (Arbitration error)
Error: 2305
Error data: Arbitrator decided to shutdown this node
Error object: QMGR (Line: 5975) 0x00000006
Program: ndbd
Pid: 25653
Version: mysql-5.5.25 ndb-7.2.7
Trace: /DD3/ndb_4_trace.log.16 [t1..t1]
***EOM***

节点2、3一组,4、5一组。最后导致整个集群DOWN。


之后把2节点的数据目录清空,再次使用ndbd--initial重启2号节点,成功启动,但是运行一段时间后:
2号节点初始化重起后,昨天17:16Z再次DOWN,报7200错。
Time: Sunday 2 September 2012 - 17:16:54
Status: Temporary error, restart node
Message: LCP fragment scan watchdog detected aproblem.  Please report a bug. (Internal error,programming error or missing error message, please report abug)
Error: 7200
Error data: Please report this as a bug. Provide as much info aspossible, expecially all the ndb_*_out.log files, Thanks. Shuttingdown node due to lack of LCP fragment scan progress
Error object: DBLQH (Line: 23572) 0x00000006
Program: ndbd
Pid:


然后直接使用ndbd启动2号节点,目前还没有碰到问题。


注:转载请注明 出自高孝鑫的博客


0 0
原创粉丝点击