MySQL NDB Cluster故障处理

1. NDB Cluster相关概念说明

相关概念解释:

  • 管理节点
  • 顾名思义,管理节点用来对其他节点进行管理。实际操作中,是通过一个叫作config.ini的配置文件进行维护而起到管理作用。
    该文件可以用来配置有多少需要维护的副本,需要在每个数据结点上为数据和索引分配多少内在,数据节点的位置,在每个节点上保存数据的磁盘位置,
    sql节点的位置信息。管理节点只能有一个,配置要求不高。

  • sql节点
  • sql 节点可以理解为应用和数据节点之间的一个桥梁。应用不能直接访问数据节点,只能先访问sql节点,然后sql节点再去访问数据结点来返回数据。
    Cluster中可以有多个sql节点,通过每个sql节点查询到的数据都是一致的,通常来说,sql节点越多,分配到每个sql节点的负载就越小,系统的整体性能就越好。

  • 数据节点
  • 用来存放Cluster里面的数据,可以有多个数据节点。每个数据结点可以有多个镜像节点。任何一个数据节点发生故障,
    只要它的镜像节点正常,Cluster就可以正常运行。

    2. 故障说明

    业务报告有套MySQL NDB Cluster系统的144节点上的表均变为只读状态,检查这个SQL节点的日志文件,发现信息如下:

    # tail -1000 /var/log/mysqld.log
    ……
    2017-07-21 20:04:52 2843 [Note] table './xxxxx/tu_cust' opened read only
    2017-07-21 20:05:00 2843 [Note] table './xxxxx/tf_mq_error' opened read only
    2017-07-21 20:05:00 2843 [Note] table './xxxxx/ts_crontab' opened read only
    2017-07-22 07:00:00 2843 [Note] table './xxxxx/te_offer_apply' opened read only
    2017-07-22 15:15:30 2843 [Note] NDB Binlog: DISCOVER TABLE Event: REPL$xxxxx/ts_log
    2017-07-22 15:15:30 2843 [Note] NDB Binlog: logging ./xxxxx/ts_log (UPDATED,USE_WRITE)
    2017-07-22 15:15:30 2843 [Note] table './xxxxx/ts_log' opened read only
    2017-07-24 15:22:32 2843 [Note] table './xxxxx/ts_pwd_log' opened read only
    ……
    

    日志中显示表确实为只读状态了,这个问题解释为由于网络不稳定导致两个数据节点以及两个SQL节点多次和集群中断连接,但数秒内相继和集群恢复连接。
    集群程序在恢复处理上不够完善,数据节点和SQL节点中断连接后,SQL节点2接收到了数据节点和集群恢复连接的消息,但SQL节点1却没有接收到数据节点和集群恢复连接的消息,所以SQL节点1一直认为数据节点还没有和集群恢复连接,从而将所有数据表都置为只读状态。
    这个问题需要重启有问题的SQL节点才能恢复。

    3. 重启SQL节点

    有问题的SQL节点重启过程如下:

  • 停止SQL节点
  • # /usr/local/mysql/bin/mysqladmin -u root -p shutdown
    Enter password:

  • 启动
  • # cd /usr/local/mysql; bin/mysqld_safe –user=mysql &
    [1] 8630

  • 相关日志文件
  • /var/log/mysqld.log
    可以在重启过程中观察MySQL SQL节点的启动情况

    关于紫砂壶

    感悟技术人生
    此条目发表在MySQL故障诊断分类目录,贴了标签。将固定链接加入收藏夹。