通用方案:专有云环境盘古普通磁盘维修

通用方案:专有云环境盘古普通磁盘维修

更新时间:2020-09-10 11:29:18

1. 概述

盘古作为底层的存储系统,管理数量巨大的数据磁盘,数据磁盘有正常的损耗,会出现磁盘损坏的情况。本文主要介绍专有云盘古普通磁盘损坏后的更换。

1.1. 适用范围

  • 专有云V2,盘古
  • 专有云V3,盘古

说明:本方案适用于盘古的版本为0.14和0.15.3的专有云V2环境,以及盘古的版本为0.16、0.16.1、0.16.2的专有云V3环境。

1.2. 风险说明

维修过程需要重启pangu_chunkserver进程,磁盘IO操作会受到影响,操作需要控制维修节奏。

注意

  • 对ots_inner集群中的盘古普通盘更换时,会影响到galaxy_inner集群。
  • 请在数据安全性检查通过的情形下执行换盘操作。

2. 问题描述

专有云盘古普通磁盘损坏时,会影响服务的性能和稳定性。为了不影响业务,可以对磁盘进行更换操作。

3. 解决方案

3.1. 环境检查

限制条件

  1. 只能对/apsarapangu/disk*目录下的普通磁盘维修,不能对/apsarapangu/SSDCache*目录下SSDCache磁盘维修。

  2. 只能维修盘古已经判定损坏的盘。通过执行puadmin lscs命令,获取到状态为DISK_ERROR,且Backup为Done即为坏盘。
  3. 对于DISK_ERROR状态的盘,Backup一直为doing,无法变为done的,需将坏盘节点置为shutdown,待整个节点Backup为done后,再进行换盘流程,这种情况出现在专有云V2环境盘古为014和0153版本的集群中。在集群AG服务器上执行以下命令,将坏盘节点置为shutdown。
    /apsara/deploy/puadmin cs -stat tcp://[$IP]:10260  --set=shutdown
    说明:[$IP]为ChunkServer节点的IP地址。
  4. 执行以下命令,观察节点Backup情况。
    puadmin lscs|grep [$IP]
  5. 如果硬盘指示灯异常,判定为坏盘,但盘古未识别为DISK_ERROR的磁盘,也可以进行换盘处理,在更换磁盘前,将磁盘置为ERROR,等Backup为Done后,再进行操作,在集群AG服务器上执行命令如下。
    /apsara/deploy/puadmin cs -stat tcp://[$IP]:10260 -d [$DISKID] --set=ERROR

检查集群abnchunk

登录集群AG,切换账号到admin,在AG上依次执行以下三条命令。确保三种类型的abnchunk都不存在,如果abnchunk存在,请终止操作。

puadmin fs -abnchunk -t none
puadmin fs -abnchunk -t onecopy
puadmin fs -abnchunk -t lessmin

3.2. 实施步骤

查找坏盘

  1. 在集群AG上执行以下命令。(不支持SSDCache)

    /apsara/deploy/puadmin lscs

    系统显示类似如下。

  1. 将磁盘状态为DISK_ERROR,并且Backup字段为Done所对应机器的[IP]和[DISKID]记录下来。

  1. 登录坏盘的机器,执行如下命令,检查如下文件的生成时间。确保文件是一天前生成的,才可以更换磁盘。

    ls -l /apsarapangu/PanguCsDiskStatusdisk[$DISKID]

卸载损坏的磁盘

  1. 执行以下命令,登录坏盘机器。
    ssh [$IP]
  2. 通过运行mount命令,找到以下目录对应的挂载设备[$DEV]和挂载选项[$OPT],记录[$DEV]、[$OPT]。
    /apsarapangu/disk[$DISKID]
    系统显示类似如下。

    说明
    • /dev/sdax就表示挂载设备[$DEV]。

    • rw,noatime,nodiratime就表示挂载选项[$OPT]。

  3. 执行以下命令,卸载损坏的磁盘。
    sudo umount [$DEV] -l
  4. 运行mount命令,检查磁盘是否卸载成功。如果没有卸载成功,进行重新卸载操作。
  5. 磁盘卸载成功后,需要确定磁盘的物理槽位号,以便更换磁盘。

确定损坏磁盘的物理槽位后进行更换

  1. 在坏盘的机器上运行以下命令。
    sudo lsscsi
    系统显示类似如下。

    说明
    • 第三列的数字表示该磁盘对应的盘位。
    • 如果曾经更换过磁盘或其他原因,通过lsscsi看到的编号可能超过槽位号。
  2. 可以通过简单的读写测试的方式进行磁盘确定,在对磁盘进行写入时,服务器前面板上磁盘对应的灯会常亮,切换到root账号下,然后在/apsarapangu/disk*目录下,执行以下命令,逐一测试,指示灯未亮的就是坏盘。
    dd oflag=direct if=/dev/zero of=0123456789_wtest_for_find_disk bs=64k count=100k
    说明:坏盘已经卸载,无法对坏盘进行读写测试。
  3. 测试完成后,请删除刚刚产生的测试文件,删除动作务必小心,不要删错文件。

  4. 物理槽位确认后,拔掉损坏的磁盘,更换上新的磁盘。

初始化新磁盘并创建分区

更换完磁盘后,在坏盘的机器上操作。新磁盘的设备名/dev/sdX可能会发生变化,我们使用LABEL的方式进行挂载。设备名的变化不影响实际使用,请忽略设备名的变化。如果机器不能识别新盘,请联系阿里云技术支持处理,处理后再继续操作。为便于描述,以下以/dev/sdXdiskX为例,具体操作时请使用当前参数替换。

  1. 执行以下命令,查看物理机是否正常识别了新磁盘,看到的空盘即为新换的硬盘。

    sudo fdisk -l

    说明:常用的分区表格式有msdos和gpt,msdos不支持2TB以上容量的磁盘,所以大于2TB的磁盘选gpt分区表格式。

  1. 如果机器不能识别新盘,在坏盘机器上执行以下命令,尝试重启chunkserver进程。识别后继续执行换盘操作,如果机器还不能识别新盘,请联系服务器厂商进行处理(针对个别机型需要重启物理机进BIOS重组raid0),处理后再继续操作。
    sudo killall pangu_chunkserver
  2. 检查pangu_chunkserver进程是否能正常被拉起,并稳定运行,如果无法拉起,则需要停止操作,联系阿里云技术支持进行处理。
  3. 依次执行以下两条命令,查看其他同样大小磁盘的分区表格式,如果同样大小磁盘的分区表格式是msdos,那么就用msdos,如果是gpt,那就用gpt。

    parted /dev/sdX
    print list

    系统显示类似如下。

  1. 切换到admin账号,执行以下命令,定义gpt分区表。

    sudo parted -s /dev/sdX mklabel gpt

    如果要定义msdos分区表,请执行以下命令。

    sudo parted -s /dev/sdX mklabel msdos
  1. 执行以下命令,创建分区。

    sudo parted -s /dev/sdX mkpart primary 0% 100%

新磁盘格式化

  1. 创建分区后,操作对象变为磁盘的第一个分区,即/dev/sdX。执行以下命令,弹出“Writing superblocks and filesystemaccounting information:”信息,直接按回车键即可。

    sudo mkfs.ext4 /dev/sdX1

    系统显示类似如下。

  1. 执行以下命令,确认LABEL为diskX还是/diskX,确认后再更改卷标。

    cat /etc/fstab

    系统显示类似如下。

  1. 如果LABEL为diskX,执行以下命令,为磁盘打LABEL。如果是/diskX,则将命令中的diskX修改为/diskX。

    sudo e2label /dev/sdX1 $diskX

    如果执行以上命令失败,返回结果类似如下。则执行sudo e4label /dev/sdX1 /diskX命令修改,查看时使用sudo e4label /dev/sdx1命令。

  1. 修改后执行以下命令,查看是否已经改成/diskX

    sudo e2label /dev/sdX1

    系统显示类似如下,如果还未能给磁盘打上LABEL,请终止操作,联系阿里云技术支持检查。

  1. 新盘已经完成分区和格式化,下面对新盘执行挂载操作。

挂载新盘

  1. 执行以下命令,查看fstab文件里刚换的磁盘diskX那一行注释是否去掉。如果注释没去掉,把注释去掉。

    cat /etc/fstab
  1. 执行以下命令,使用/etc/fstab表中的挂载选项进行挂载。

    sudo mount -a
  1. 挂载完之后,执行以下命令,查看是否已经挂载成功。

    df -h
  1. 再次确认/apsarapangu/diskX目录下挂载的是空盘,如果不是空盘可能会造成数据污染和数据错误。

ChunkServer识别新盘

新盘已经上线完成,还需要执行以下操作,以便ChunkServer能够识别到新盘,请先等待2分钟,留出充分的时间,使ChunkServer识别到新盘。请根据专有云版本选择以下操作。

  1. 在坏盘的机器上执行以下命令,获取ChunkServer版本。
    /apsara/pangu_chunkserver/pangu_chunkserver --buildinfo
    系统显示类似如下,表示ChunkServer版本为0.16.1。
  2. 执行以下命令,查看一下/apsarapangu/diskX的目录权限,如果是admin权限,则不需要修改权限,如果是root权限,执行下一步将权限改成admin权限。
    ll  -d /apsarapangu/$diskX
  3. 执行以下命令,将目录root权限改成admin权限。
    sudo chown -R admin:admin /apsarapangu/$diskX
    改完后执行以下命令,查看目录权限是否变为admin。
    ll -d /apsarapangu/$diskX
  4. 登录集群AG服务器,执行如下命令,删除冗余meta信息。
    注意:这一步不允许重复执行,在进程运行期,对每块盘只能执行一次。
    /apsara/deploy/puadmin cs -meta tcp://[$IP]:10260 -r -d [$DiskID]
    说明
    • 如果执行以下命令,查看不到这块坏盘,导致执行本步骤的命令报错,可以直接跳到第6步磁盘上线。同一集群中,一天内只能处理一块这种查不到的磁盘。

      puadmin lscs
    • [$IP]为ChunkServer的IP地址。

    • [$DiskID]为要更换的磁盘序号。

    系统显示类似如下。
  5. 执行以下命令,检查冗余meta信息删除完毕。
    /apsara/deploy/puadmin cs -meta tcp://[$IP]:10260 --all -d [$DiskID]
    说明:请确保输出为空,再进行下一步,如果输出一直不为空,请联系阿里云技术支持。
    系统显示类似如下,说明全部清理完成。
  6. 磁盘上线操作。
    1. 登录换盘的机器,执行以下命令,创建磁盘更换记录文件夹 。
      sudo mkdir -p /apsarapangu/replace_disk_record
    2. 执行以下命令,移除状态文件和重启进程 。
      sudo  mv /apsarapangu/PanguCsDiskStatusdisk[$DiskID] /apsarapangu/replace_disk_record/PanguCsDiskStatusdisk$diskId_$(date +%Y%m%d%H%M%S) && sudo killall pangu_chunkserver
      如果一台机器同时换多块盘,可以将mv命令连写,保证只结束一次chunkserver进程即可。举例如下。
      sudo mv /apsarapangu/PanguCsDiskStatusdisk3 /apsarapangu/replace_disk_record/PanguCsDiskStatusdisk3_$(date +%Y%m%d%H%M%S); sudo mv /apsarapangu/PanguCsDiskStatusdisk4 /apsarapangu/replace_disk_record/PanguCsDiskStatusdisk4_$(date +%Y%m%d%H%M%S)&& sudo killall pangu_chunkserver
      说明:这条命令可以同时完成disk3和dik4磁盘的上线。
  7. 执行以下命令,检查ChunkServer进程是否重启成功 。如果没有启动,需要联系阿里云技术支持进行处理 。
    ps axu|grep pangu_chunkserver
  8. 针对特定版本的额外操作。
    注意:以下操作步骤只能根据版本选择一个操作。
    • 针对于盘古版本为0.16的额外操作。执行以下命令,设置磁盘状态为“OK”。

      /apsara/deploy/puadmin  cs  -stat  tcp://[$IP]:10260 -d [$DiskID] --set=OK

      说明:如果是/apsarapang/disk3,则[$DiskID]即为3。

    • 针对于盘古版本为0.16.1和0.16.2的额外操作 。前面磁盘状态已经恢复OK之后,需要再次执行以下命令,重启chunkserver进程 。待进程恢复之后,再观察状态是否还是OK。

      sudo killall pangu_chunkserver
  9. 针对环境检查限制条件中步骤3设置节点shutdown情况的额外操作。
    1. 登录AG服务器,执行以下命令。
      /apsara/deploy/puadmin cs -stat tcp://[$IP]:10260 --set=normal
    2. 执行以下命令,确认节点状态变为NORMAL。
      puadmin lscs|grep [$IP]

3.3. 结果验证

检查换盘是否成功

  1. 登录集群AG,执行以下命令,查看结果,确认磁盘状态已经变为DISK_OK。

    /apsara/deploy/puadmin lscs

    系统显示类似如下。

  1. 执行以下命令,查看lessmin是否收敛,输出为空说明数据安全。

    puadmin fs -abnchunk -t lessmin

    注意:如果时间较长,1-2天后输出不为空请联系阿里云技术支持。

  1. 如果需要维修下一个盘,请等待至少10min。

  1. 如果磁盘更换之后,依然变为ERROR状态,请阿里云技术支持处理。

4. 回滚方案

磁盘硬件损坏无法回滚。