#系统磁盘组管理
共享集群/分布式集群安装时,会完成YFS上系统磁盘组(SYSTEM)和数据磁盘组(默认名称为DG0)的创建。在安装前以及安装过程中按需规划配置硬件设备、指定相应参数配置,安装完成后无需额外配置即可直接使用。
Caution:
数据库安装完成后,上述两个磁盘组中已存储共享集群/分布式集群的YFS以及数据库实例相关信息,请勿清理磁盘组,否则可能会导致数据库无法正常启动或运行。
本文档仅介绍系统磁盘组的运维操作,数据磁盘组的运维操作请查阅数据磁盘组管理。
# 概述
系统磁盘组是YFS的核心存储组件,与数据磁盘组相比,系统磁盘组具有以下特点:
用于存储YFS自身元数据,YFS依赖系统磁盘组完成启动和初始化。
支持冗余保护,可容忍一定数量的磁盘故障。
故障时进入保护状态,部分操作受限。
支持通过online disk或replace disk修复故障磁盘。
# 系统磁盘组高可用机制
依托于磁盘组的冗余度属性,只要仍存在一个可用的数据副本,即可保障数据库持续正常运行。但数据库管理员仍需要对磁盘的运行状态定期进行巡检,一旦发现磁盘故障应及时更换故障磁盘并重建冗余,以避免故障蔓延影响业务。
# 冗余度
系统磁盘组的冗余度决定了数据副本的数量。
# 故障组
故障组用于划分可能同时发生故障的磁盘,配合多副本机制实现数据的冗余。
# 多数派要求
为保证数据一致性,YFS实例对磁盘/副本访问存在多数派要求:
YFS实例启动时,其可见的系统磁盘组磁盘上的数据必须满足多数派(过半数磁盘Normal且数据完整),以获得确定性的启动结果,否则无法启动。
数据库运行过程中,要求所有YFS实例必须都能访问系统磁盘组过半数磁盘,无法达成该要求的实例将自行退出集群。
# 保护状态
当YFS的master实例可见的系统磁盘组无法满足过半数磁盘为正常(normal)状态时,将进入保护(PROTECT)状态:
系统盘组冗余度为Normal(即3副本)时,所有副本全部处于正常状态视作达到过半数。
系统盘组冗余度为High(即5副本)时,至少4副本处于正常状态视作达到过半数。
进入保护状态后,系统磁盘组只能读取、不能写入,且以下操作将被禁止:
| 操作类型 | 禁止的操作 |
|---|---|
| YFS元数据操作 | 创建数据磁盘组(CREATE DISKGROUP命令)操作。 部分修改已有磁盘组(ALTER DISKGROUP命令)操作: * DISMOUNT * MOUNT * add_disk_clause * drop_disk_clause * rename_disk_clause * offline_disk_clause * resize_disk_clause |
| YCS操作 | 与集群管理相关的操作,例如PDB的创建/删除、VIP/SCAN/NETWORK的配置变更等)。 |
修复系统磁盘组的离线磁盘(ONLINE或REPLACE DISK)使其满足上述条件后,可使系统磁盘组退出保护状态。
# 查看磁盘信息
查看YFS的磁盘配置、使用情况等信息,可以通过YFS管理工具yfscmd相关命令操作,也可以通过相应的动态视图获取相应信息。
在日常运维工作中,数据库管理员应定期关注磁盘使用情况,若发现磁盘状态异常(例如磁盘信息的status字段)则需及时进行更换、重新上线等维护操作。
# 通过yfscmd查看
# 前提条件
YASCS_HOME环境变量已正确设置。
YFS服务已启动(可通过ycsctl status命令查看YFS状态是否为online)。
# 操作步骤
以安装用户登录数据库安装服务器。
执行yfscmd命令查看磁盘组配置信息。
$ yfscmd -D $YASCS_HOME YFSCMD > show diskgroup id name type level au_size stat block_size total_mb free_mb usable_file_mb 0 SYSTEM SYSTEM 1 1.00MB MOUNTED 4096 3072 2397 799 1 DG0 USER 0 32.00MB MOUNTED 4096 20480 16960 16960 YFSCMD > lsdg id name type level au_size stat block_size total_mb free_mb usable_file_mb 0 SYSTEM SYSTEM 1 1.00MB MOUNTED 4096 3072 2397 799 1 DG0 USER 0 32.00MB MOUNTED 4096 20480 16960 16960系统磁盘组的信息项包括:
- id:磁盘组的全局唯一编号,在故障组或磁盘的信息中将记为dgid。
- name:磁盘组的名称。
- type:磁盘组的类型,其中SYSTEM表示系统磁盘组。
- redundancy:磁盘组的冗余度,每个磁盘组的冗余度相互独立。
- EXTERNAL:该配置下,所有数据仅存储1份,无冗余副本。
- NORMAL:该配置下,系统磁盘组提供[2,3]份副本(具体份数取决于故障组数量)。
- HIGH:该配置下,系统磁盘组提供5份副本。
- au_size:分配单元的大小,是YFS分配磁盘空间的最小维度。
- stat:磁盘组的状态。
- MOUNTED:表示磁盘组已挂载。
- DISMOUNTED:表示磁盘组未挂载。
- PROTECT:系统磁盘组独有状态,表示系统磁盘组因部分磁盘故障而触发保护状态,此时YFS降级运行。
- block_size:文件数据块的大小,单位为字节。
- total_mb:磁盘组的总容量,单位为MB。
- free_mb:磁盘组的可用空间,单位为MB。
- usable_file_mb:磁盘组的可用文件大小,即磁盘组的可用空间扣除多副本所需容量后的值,单位为MB。
查看磁盘读写信息。
$ yfscmd -D $YASCS_HOME YFSCMD > iostat id name group_number reads writes read_bytes written_bytes read_time_us write_time_us path 0 SYSTEM_0 0 0 0 0 0 0 0 /dev/yfs/sys0 1 SYSTEM_1 0 0 0 0 0 0 0 /dev/yfs/sys1 2 SYSTEM_2 0 0 0 0 0 0 0 /dev/yfs/sys2 3 DG0_0 1 3001 6 104017920 50766336 1277976 73832 /dev/yfs/data0查看指定磁盘组的文件目录及文件。
$ yfscmd -D $YASCS_HOME YFSCMD > ls DG0 ycr voting yasfs.ini bootdisk diskgroupctrl
# 通过视图查看
通过GV$YFS_DISKGROUP/V$YFS_DISKGROUP、GV$YFS_FAILGROUP/V$YFS_FAILGROUP以及GV$YFS_DISK/V$YFS_DISK视图可以分别查询磁盘组、故障组以及磁盘的信息。
# 前提条件
数据库处于运行状态。
# 操作步骤
以DBA用户连接并登录数据库。
$ yasql sales/********@192.168.1.2:1688 YashanDB SQL Enterprise Edition Release {version_number} x86_64 Connected to: YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux SQL>按需查询相关视图的关注字段信息,本文仅列示部分常见场景。
SELECT ID,NAME,TYPE,AU_SIZE,REDUNDANCY FROM V$YFS_DISKGROUP WHERE NAME = 'SYSTEM'; ID NAME TYPE AU_SIZE REDUNDANCY ------------ --------------------------------- --------------------------------- ------------ ----------------- 0 SYSTEM SYSTEM 1048576 NORMAL SELECT NAME,GROUP_NUMBER FROM V$YFS_FAILGROUP WHERE NAME LIKE 'SDG%'; NAME GROUP_NUMBER --------------------------------- ------------ SDG0_0 0
# 系统磁盘组故障处理
Caution:
系统磁盘组不支持二次故障。当系统磁盘组已处于保护状态时,应及时进行修复操作,否则如果再次发生磁盘故障可能导致集群退出或部分实例无法访问系统磁盘组。
对于系统磁盘组,YFS各实例可见的各个磁盘的状态可能不一致,集群将以YFS的master实例所见信息为准。基于此,可将系统磁盘组的故障分为:
| 故障类别 | 故障现象 | 影响 | 修复方案 |
|---|---|---|---|
| 全局故障 | 在YFS的master实例上查询磁盘状态为离线(经过同步后所有非master实例上目标磁盘也会变为离线) | 可能会触发系统磁盘组进入保护状态,YFS将降级运行 | 1. 若原磁盘因硬件故障而离线,先修复硬件问题并确保新磁盘的路径、磁盘名与旧磁盘完全一致。 2. 对目标磁盘执行上线(ONLINE)操作。 |
| 局部故障 | 仅在YFS的某个非master实例上查询磁盘状态为离线 | 局部故障期间,YFS的master实例可正常访问并使用目标磁盘,对业务无影响 若局部故障未修复前该非master实例升主,将扩散为全局故障 | 局部故障通常是非master实例所在服务器存在访问目标磁盘的链路问题、其他系统问题等原因,而非磁盘本身故障,请勿直接插拔磁盘、重启存储设备等修复操作。 1. 排查并修复链路问题、其他系统问题等,从操作系统层面确认磁盘可达。 2. 重启目标实例(非master实例)。 |
# 修复全局故障
磁盘离线、硬件故障后将其修复重新上线的具体操作规则如下:
待操作的目标磁盘组已挂载。
单次操作仅可上线1块已离线的磁盘。
每个磁盘不允许同时存在多个进行中的修复类操作任务,此类任务包括:上线(ONLINE)、更换(REPLACE)。
每个磁盘组最多支持64个修复类操作任务并存(执行中或排队中)。
对系统磁盘组执行的上线(ONLINE)操作无法进行断点续传,若执行过程中YFS实例发生了角色变化(例如master实例退出并由其他实例升为master)上线操作可能会被中断,建议查询确认目标磁盘的状态,若仍为离线状态则需重新手动执行相应的ALTER DISKGROUP命令。
若原磁盘因硬件故障而离线,则需先修复硬件问题并确保新磁盘的路径、磁盘名与旧磁盘完全一致,才能通过上线操作完成修复。
# 前提条件
YASCS_HOME环境变量已正确设置。
YFS服务已启动(可通过ycsctl status命令查看YFS状态是否为online)。
若原磁盘因硬件故障而离线,已修复硬件问题并确保新磁盘的路径、磁盘名与旧磁盘完全一致。
待上线的磁盘处于OFFLINE状态。
# 操作步骤
以安装用户登录数据库安装服务器。
获取目标磁盘相关信息。
$ yasql sales/********@192.168.1.2:1688 SQL> SELECT d.INST_ID,d.NAME,d.PATH,d.GROUP_NUMBER,d.MOUNT_STATUS FROM GV$YFS_DISK d WHERE d.GROUP_NUMBER IN (SELECT ID FROM GV$YFS_DISKGROUP WHERE TYPE = 'SYSTEM') ORDER BY d.NAME; INST_ID NAME PATH GROUP_NUMBER MOUNT_STATUS ------------ ---------------- --------------------- ------------ ----------------- 1 SYSTEM_0 /dev/yfs/sys0 0 NORMAL 2 SYSTEM_0 /dev/yfs/sys0 0 NORMAL 1 SYSTEM_1 /dev/yfs/sys1 0 OFFLINE 2 SYSTEM_1 /dev/yfs/sys1 0 OFFLINE 1 SYSTEM_2 /dev/yfs/sys2 0 NORMAL 2 SYSTEM_2 /dev/yfs/sys2 0 NORMAL SQL> exit需记录目标磁盘的名称(本文以SYSTEM_1为例)以备后续操作使用。
执行ALTER DISKGROUP命令,重新上线目标磁盘。
$ yfscmd -D $YASCS_HOME YFSCMD > exec ALTER DISKGROUP SYSTEM ONLINE DISK SYSTEM_1 POWER 10;可根据业务负载情况指定当前任务的数据迁移强度(POWER关键字的值),数值越大强度越大,任务完成速度越快但资源占用也会越高。
若多个磁盘同时存在全局故障,应重复执行ALTER DISKGROUP命令修复全部故障。
执行以下命令,查看修复计划的进展。
YFSCMD > show job当目标计划的status字段变为FINISH时,表示当前计划已执行完成。
确认所有磁盘状态已恢复正常。
YFSCMD > show disk
# 修复局部故障
# 前提条件
YASCS_HOME环境变量已正确设置。
YFS服务已启动(可通过ycsctl status命令查看YFS状态是否为online)。
已排查并修复链路问题、其他系统问题等,并已从操作系统层面确认目标磁盘可达。
局部故障所在目标实例仍为非master实例,若目标实例已升主,则需按全局故障处理。
# 操作步骤
以安装用户登录数据库安装服务器。
获取目标磁盘相关信息。
$ yasql sales/********@192.168.1.2:1688 SQL> SELECT d.INST_ID,d.NAME,d.PATH,d.GROUP_NUMBER,d.MOUNT_STATUS FROM GV$YFS_DISK d WHERE d.GROUP_NUMBER IN (SELECT ID FROM GV$YFS_DISKGROUP WHERE TYPE = 'SYSTEM') ORDER BY d.NAME; INST_ID NAME PATH GROUP_NUMBER MOUNT_STATUS ------------ ---------------- --------------------- ------------ ----------------- 1 SYSTEM_0 /dev/yfs/sys0 0 NORMAL 2 SYSTEM_0 /dev/yfs/sys0 0 NORMAL 1 SYSTEM_1 /dev/yfs/sys1 0 NORMAL 2 SYSTEM_1 /dev/yfs/sys1 0 NORMAL 1 SYSTEM_2 /dev/yfs/sys2 0 OFFLINE 2 SYSTEM_2 /dev/yfs/sys2 0 NORMAL SQL> exit需记录目标磁盘的名称(本文以SYSTEM_2为例)以备后续操作使用。
获取YFS的实例角色。
$ ycsctl status +--------------+-------------------+-----------------+---------------------------------------------+ | Self Host ID | Cluster Master ID | YasFS Master ID | Active Host Count | +--------------+-------------------+-----------------+---------------------------------------------+ |1 |2 |2 |2 | +--------------+-------------------+-----------------+---------------------------------------------+ ……其中Self Host ID表示当前节点的ID,YasFS Master ID表示YFS的master实例所在节点的ID。若当前节点并非YFS的master实例所在节点,则继续后续操作,否则需修复全局故障。
执行如下命令,重启目标实例。
$ yasboot node restart -c yashandb -n 1-1

