问题现象
IO hang 导致磁盘 invalid 和 stop_server。
问题原因
OceanBase 的 IO Manager 可以在数据盘失效(hang 住等)时探测出坏盘,数据盘状态会通过心跳向 RS 汇报。数据盘状态分为递进的两级:WARNING 和 ERROR。 当某台机器发生读超时等 IO error 时,IO Manager 会通过探测线程探测数据盘的健康状态,当探测线程将数据盘设置为WARNING 时,log_service 层会触发切主,从而切走该机器上的流量。如果探测线程认为这台机器的数据盘恢复正常,会清除数据盘的 WARNING 状态。如果探测线程认为这台机器的数据盘进一步恶化,会将其状态设置为 ERROR,这时 RS 会触发 stop server,这台机器不再能作为 leader,ERROR 状态也不会被探测线程主动清除。
适用版本
OceanBase 数据库 V2.2.77 及以上版本。
解决方法
需要运维人员执行如下命令,手动重置 disk error。
注意
手动重置 disk error 的前提是要确保 IO hang 的问题已经解决,磁盘恢复正常读写。
alter system set disk valid server '<ip>:<port>';