Pciessd异常Readonly致Mysql反复crash如何处理?

去年10月份发生一起fio卡变为readonly(和双十一无关),发生一起fio卡变为readonly,造成mysql crash的故障,整理如下。 ......

去年10月份发生一起fio卡变为readonly(和双十一无关),发生一起fio卡变为readonly,造成mysql crash的故障,整理如下。

【机器配置】

  1. System | Dell Inc.; PowerEdge R710;  
  2. Processors | physical = 2, cores = 12, virtual = 24, hyperthreading = yes 
  3. # Memory #####################################################  
  4. Total | 94.40G  
  5. Free | 555.50M  
  6. Swappiness | vm.swappiness = 0 
  7. # Disk #####################################################  
  8. 2 ioMemory devices in this system  
  9. Fusion-io driver version: 3.1.5 build 126  
  10. Fusion-io ioDrive 640GB *2 –> mdadm –>/dev/md0  
  11. ibdata,ib_logfile,bin_log,relay_log on SAS 600GB raid1  

【问题表现】

    13:28,监控发出***个db_ping告警

    mysql的alert log如下:

  1. /u01/mysql/libexec/mysqld: Can’t create/write to file ‘/u01/mysql/tmp/ibU5kXB4′ (   Errcode: 30)  
  2. 121104 13:28:10  InnoDB: Error: unable to create temporary file; errno: 30  
  3. 121104 13:28:10 [ERROR] Plugin ‘InnoDB’ init function returned error.  
  4. 121104 13:28:10 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.  
  5. 121104 13:28:10 [ERROR] Aborting  
  6. InnoDB: Error: tried to read 16384 bytes at offset 0 41517056.  
  7. InnoDB: Was only able to read -1.  
  8. 121104 13:14:59  InnoDB: Operating system error number 5 in a file operation.  
  9. InnoDB: Error number 5 means ‘Input/output error’.  
  10. InnoDB: Some operating system error numbers are described at  
  11. InnoDB: http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html  
  12. InnoDB: File operation call: ‘read’.  
  13. InnoDB: Cannot continue operation.  
  14. mysqld: my_new.cc:51: int __cxa_pure_virtual(): Assertion `! “Aborted: pure virtual     method called.”‘ failed.  
  15. 121104 13:14:59 – mysqld got signal 6 ; 

    由上判断IO设备有问题,此时touch /u01/mysql/tmp/ibd:      touch: cannot touch `/u01/mysql/tmp/ibd’: Read-only file system

[SITESERVER_PAGE]

    由于是核心集群,有数据强一致需求,通过DBA手工强制主备切换,故障排除。

【问题原因】

  1. fusionIO卡出现readonly  
  2. /var/log/message  
  3. Nov  4 13:14:59 my160130.cm6 kernel: : fioerr Fusion-io ioDrive 640GB 0000:07:00.0: Single Bit Event Upset Error Dete4ted – interrupt: val[0]: 000ff16  
  4. fio-status -a  
  5. fct1    Failed: DEVICE IS OFFLINE. ALL READS AND WRITES WILL FAIL!  
  6. ioDrive 640GB MLC, Product Number:2TTK9, SN:436946  
  7. !! —> There are active errors or warnings on this device!  Read below for details.  
  8. ioDrive 640GB MLC, PN:00214401201  
  9. Located in slot 0 Center of Pseudo Low-Profile ioDIMM Adapter SN:436946  
  10. WARNING: READ-ONLY MODE. ALL WRITES WILL FAIL!  
  11. ACTIVE ERRORS:  
  12. The ioMemory has encountered an internal error and has been  
  13. temporarily disabled.  All reads and writes will fail.  
  14. The ioMemory is not allowing write operations. 

【问题分析】

[SITESERVER_PAGE]

    •SEUs are transient soft errors, and are non-destructive. A reset or rewriting of the device results in normal device behavior thereafter

    fio的控制模块是跑在fpga上的,元数据存储在DRAM和SSD上,断电可恢复。2.x的驱动发生该错误后,会rewriting进行修复。3.x的驱动提高了安全性,发生该错误后,会直接reset,卡read_only等待power recycle

    •SEU class errors are caused by cosmic ray particles making it’s way into the NAND controller or by a failing NAND controller

    FPGA本身的介质损坏或者宇宙射线,都是该错误的诱因。五月份message中有类似Write Path报错,2.x驱动自动rewrite修复了,3.x的驱动安全级别更高,reset后置为readonly

    •Write Path Parity Error

    这个错误是SEU错误的前驱,绝大多数可修复。同集群中,有3台发生过并自动修复。

    •FPGA的成本相比开芯片低廉很多,编程迭代迅速,但健壮性不开芯片

【数据丢失】

    因undo,redo,binlog都在u02的SAS盘上日志完整,备库基本没有延迟,故没有数据丢失;

但由于SEU可能导致当时写入的block错误,造成data不一致,保险起见还是重做备库,利用binlog同步所有数据。

    •SEU class of error my result in data on the device being corrupted.The database should be verified or restored from backup

【改进措施】

    FPGA老化后,有一定几率发生Single Event Upset错误,核心库要及时替换;

    FPGA对宇宙射线敏感,需要控制机房环境,并分散机柜上架;

    改进更敏感的message,dmesg告警。