#磁盘管理命令
yfscmd通过exec子命令管理数据盘,YFS定义了与SQL类似的DDL形式的磁盘管理语句。
Note:
共享集群/分布式集群安装完成后,无法调整系统磁盘组的相关配置。
在yfscmd非交互模式下,修改参数语句必须用引号包围,作为1个独立的参数传入,且无需分号
;结尾,命令格式为yfscmd exec "CREATE ..."。在yfscmd交互模式下,命令格式为
exec CREATE ...;,交互模式下exec子命令支持多行输入,直到遇到;结束。
# CREATE DISKGROUP
该语句用于创建一个新的磁盘组。
创建磁盘组的前提条件如下:
已确认共享集群使用的IO Fencing模式,可通过ycsctl show fence命令查看。
已按要求完成存储设备配置(例如划分、挂载等),磁盘需绑定在已有磁盘的同一父目录下(例如/dev/yfs)。
若为基于SCSI持久预留的IO Fencing,还建议先调用fenceScsiCheck脚本进行检测确认磁盘是否满足要求再创建磁盘组。
CREATE DISKGROUP::=
redundancy_clause::=
fg_clause::=
QUORUM、REGULAR均仅用于语法兼容,无实际意义。
disk_clause::=
size_clause同SQL语法中的size_clause。
attribute_clause::=
# dgname
指定待创建的磁盘组名称,在YFS中全局唯一,不可省略,且需符合YashanDB的对象命名规范。
# redundancy_clause
该语句用于指定磁盘组的冗余度,可省略,默认为NORMAL。
冗余度分为External、Normal和High,高可用、高可靠程度依次增强。若为External则无数据冗余,数据的可靠性依赖外部能力实现,例如RAID。
冗余度与文件副本数的关系如下表所示。
| 冗余度 | 系统磁盘组 所有文件副本数 | 数据磁盘组 用户数据副本数 | 数据磁盘组 YFS元数据副本数 |
|---|---|---|---|
| External | 1 | 1 | 1 |
| Normal | 3 | 2 | 2 ~ 3 |
| High | 5 | 3 | 3 ~ 5 |
每个磁盘组的冗余度相互独立,需在创建磁盘组时指定,一旦创建不可更改。
# fg_clause
该语句用于创建故障组,每条子句创建一个故障组,多个子句间使用空格分隔。
故障组个数与磁盘组冗余度有关,故障组数量须大于等于冗余度所对应的副本数量。
# FAILGROUP fgname
该语句用于指定故障组的名称,名称需磁盘组内唯一,且需符合YashanDB的对象命名规范。
若省略此项,故障组名称由系统基于磁盘组名称以及故障组顺序编号(从0开始)自动生成,例如磁盘组名称为DG1时,自动生成的故障组名称将为DG1_0、DG1_1。
# disk_clause
该语句用于指定故障组下磁盘信息,多个磁盘间使用,间隔。
磁盘配置规则如下:
同一磁盘组中所有故障组下的磁盘数量必须保持一致。
同一磁盘组中所有故障组下所有磁盘的可用容量必须一致。
同一个磁盘只能属于一个故障组,不能被重复指定。
每个故障组间应尽可能达成故障隔离。
# diskpath
指定磁盘路径,允许输入的路径最大长度为31字节。
Caution:
请确保主备节点磁盘路径一致且具有读写权限,否则会导致备节点进程退出。
# disk_name
指定磁盘名称,磁盘组内唯一,命名需符合YashanDB的对象命名规范。可省略,省略时将由系统自动生成默认名称。
# SIZE size_clause
指定可以由磁盘组进行管理、使用的磁盘容量,指定值不得大于目标磁盘的总容量大小。可省略,默认为该磁盘的总容量。
# FORCE
该关键字用于强制格式化磁盘,例如当YFS检测到磁盘上存在YFS文件系统时,默认会拒绝添加该磁盘以免误操作抹除磁盘上的数据,此时若指定FORCE则可强制添加磁盘但会格式化已有数据。
# attribute_clause
该语句用于指定YFS在创建的磁盘组上分配磁盘空间时的分配单元大小,可省略,默认为1M。
分配单元颗粒度包括1MB(默认值)、4MB、8MB、16MB以及32MB。该属性值在创建磁盘组时指定,一旦创建不可更改。
分配单元颗粒度更大时,可创建的文件更大且连续IO性能更佳,但也会消耗更多内存,浪费一些磁盘空间。在实际使用中,应根据业务特征选择合适的分配单元颗粒度,配置建议如下:
以小文件为主时,建议选择较小的分配单元颗粒度。
以大文件为主时,建议选择较大的分配单元颗粒度。
当分配单元颗粒度大于等于绝大多数IO大小时,可以获得更好的性能。
示例(共享集群)
YFSCMD > exec CREATE DISKGROUP DG2 NORMAL REDUNDANCY
DISK '/dev/DISK_NAME5' SIZE 700M
FAILGROUP FG_1 DISK '/dev/DISK_NAME10' NAME disk4 SIZE 700M
FAILGROUP FG_2 DISK '/dev/DISK_NAME4' SIZE 700M
ATTRIBUTE 'au_size'='4M';
YFSCMD > exec DROP DISKGROUP DG2;
YFSCMD > exec CREATE DISKGROUP DG2 NORMAL REDUNDANCY
FAILGROUP FG_1 DISK '/dev/DISK_NAME10' NAME disk4,'/dev/DISK_NAME12'
FAILGROUP FG_2 DISK '/dev/DISK_NAME4','/dev/DISK_NAME11';
# ALTER DISKGROUP
该语句用于修改已有磁盘组的属性,包括卸载磁盘组、挂载磁盘组、增加磁盘、删除磁盘、修改磁盘名称等。
alter diskgroup::=
所有子句中的QUORUM、REGULAR均仅用于语法兼容,无实际意义。
fg_clause::=
QUORUM、REGULAR均仅用于语法兼容,无实际意义。
disk_clause::=
size_clause同SQL语法中的size_clause。
# dgname
指定一个已存在的数据磁盘组的名称,不可指定为SYSTEM,即ALTER DISKGROUP操作无法对系统磁盘组执行。
# DISMOUNT|MOUNT
该语句用于对磁盘组执行挂载或卸载操作。
该操作的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
挂载操作时,请确保主备节点间磁盘名称一致且具有读写权限,否则挂载时备节点进程会退出。
# FORCE
如果磁盘组中的文件已被打开暂未关闭,将无法DISMOUNT该磁盘组,需明确指定FORCE强制执行。
Caution:
强制卸载磁盘组可能引起数据库异常、丢失数据,请慎用该操作。
# add_disk_clause
该语句用于向磁盘组内的故障组添加磁盘。
新增磁盘的前提条件(即针对新磁盘的准备工作)如下:
已确认共享集群使用的IO Fencing模式,可通过ycsctl show fence命令查看。
已按要求完成存储设备配置(例如划分、挂载等),磁盘需绑定在已有磁盘的同一父目录下(例如/dev/yfs)。
若为基于SCSI持久预留的IO Fencing,还建议先调用fenceScsiCheck脚本进行检测确认磁盘是否满足要求再创建磁盘组。
新增磁盘的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
若目标磁盘组内磁盘数量恰好满足冗余度要求(例如冗余度为NORMAL、磁盘数为4),且部分磁盘处于离线状态,此时无法执行该操作。
如果指定的故障组名称已存在,则向已有故障组内添加磁盘。
如果指定的故障组名称不存在,或未指定故障组名称,则创建新的故障组并为其添加磁盘。
其他同CREATE DISKGROUP一致。
# drop_disk_clause
该语句用于删除磁盘组中的一块或多块盘。也可以删除磁盘组的中一个或多个故障组。
该操作的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
仅允许删除空磁盘。
需确保删除磁盘后剩余故障组数量满足磁盘组冗余度要求,且剩余各故障组的磁盘数量一致。若剩余数量无法达到要求,YFS会阻止离线操作(操作无法成功)。
Note:
被删除的磁盘会立即与其伙伴磁盘解除关系,可能会导致部分磁盘缺少可用的伙伴磁盘创建数据副本,该类磁盘的存储空间将无法被YFS使用。此时,可向磁盘组增加足量的磁盘(可通过查询V$YFS_DISK视图获取磁盘的伙伴关系),新增磁盘后系统将为该类磁盘自动分配新的伙伴磁盘。
# DISK disk_name
指定删除若干磁盘。
# DISK IN FAILGROUP failuregroup_name
指定删除若干故障组中的所有磁盘。
# rename_disk_clause
该语句用于对磁盘组内的磁盘重命名。
该操作的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
仅可对正常状态(status = NORMAL)的磁盘执行该操作。
# DISK old_disk_name TO new_disk_name
指定若干磁盘进行重命名,需手动指定新名称。
磁盘名称规范如下:
磁盘名称最长31字符。
新磁盘名称磁盘组内唯一。
# ALL
重命名所有磁盘,新名称将由系统指定,格式为DGNAME_DISKID。
# offline_disk_clause
该语句用于离线磁盘组中的一块或多块盘,也可以离线磁盘组的中一个或多个故障组。
该操作的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
离线磁盘需确保剩余的故障组数量满足磁盘组冗余度要求。若剩余数量无法达到要求,YFS会阻止离线操作(操作无法成功)。
# DISK disk_name
指定离线若干磁盘。
# DISK IN FAILGROUP failuregroup_name
指定离线若干故障组中的所有磁盘。
# online_disk_clause
该语句用于将磁盘组中已离线(status = OFFLINE)的磁盘重新上线。
该操作的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
单次操作仅可上线1块已离线的磁盘。
每个磁盘不允许同时存在多个进行中的修复类操作任务,此类任务包括:上线(ONLINE)、更换(REPLACE)。
每个磁盘组最多支持64个修复类操作任务并存(执行中或排队中)。
# disk_name
指定需要上线的磁盘名称。
# POWER integer
指定当前任务的数据迁移强度,取值范围为[0,1024],数值越大强度越大,默认为1,0表示暂停,1024表示全功率执行。
可通过rebalance_modify子句在线修改迁移强度,但该修改会对当前磁盘组内所有任务同时生效。
# WAIT|NOWAIT
指定是否等待命令执行结果,默认为NOWAIT。
可通过show job命令查看任务状态与详细信息。
# replace_disk_clause
该语句用于添加新磁盘更换磁盘组中已离线(status = OFFLINE)的磁盘。
更换磁盘的前提条件(即针对新磁盘的准备工作)如下:
已确认共享集群使用的IO Fencing模式,可通过ycsctl show fence命令查看。
已按要求完成存储设备配置(例如划分、挂载等),磁盘需绑定在已有磁盘的同一父目录下(例如/dev/yfs)。
若为基于SCSI持久预留的IO Fencing,还建议先调用fenceScsiCheck脚本进行检测确认磁盘是否满足要求再创建磁盘组。
更换磁盘的使用规则如下:
无法对系统磁盘组(名为SYSTEM)执行该操作。
待操作的目标磁盘组已挂载。
单次操作仅可更换1块已离线的磁盘。
新磁盘不能为已在某个磁盘组中的盘。
每个磁盘不允许同时存在多个进行中的修复类操作任务,此类任务包括:上线(ONLINE)、更换(REPLACE)。
每个磁盘组最多支持64个修复类操作任务并存(执行中或排队中)。
Note:
更换磁盘操作的本质为更新磁盘组中某个磁盘的路径 + 重新上线该磁盘。若某个更换任务中断(例如被人为取消),可能磁盘路径已发生变化,YFS不会自行回退该变化,如有需要,需人工介入再次发起更换任务将路径还原成原路径。
更换磁盘时,若误将新盘的磁盘路径指定为disk_name对应磁盘原本的路径,YFS不会报错与拦截,但此时操作会退化为仅重新上线目标磁盘。
# disk_name
指定需要被更换的磁盘名称。
# diskpath
指定新盘的磁盘路径。
# FORCE|NOFORCE
是否强制格式化磁盘,含义与作用同CREATE DISKGROUP中的FORCE|NOFORCE关键字。
# POWER integer
指定当前任务的数据迁移强度,取值范围为[0,1024],数值越大强度越大,默认为1,0表示暂停,1024表示全功率执行。
可通过rebalance_modify子句在线修改迁移强度,但该修改会对当前磁盘组内所有任务同时生效。
# WAIT|NOWAIT
指定是否等待命令执行结果,默认为NOWAIT。
可通过show job命令查看任务状态与详细信息。
# rebalance_modify
该语句用于手动调整磁盘修复类操作任务的负载,包括调整数据迁移强度、取消所有修复类操作任务。
该操作对当前磁盘组内的所有执行中或排队中的修复类操作任务生效。
# POWER integer
指定当前磁盘组的数据迁移强度,取值范围为[0,1024],数值越大强度越大,默认为1,0表示暂停,1024表示全功率执行。
# CANCEL
取消当前磁盘组内的所有修复类操作任务。
示例(共享集群)
-- 卸载磁盘组
YFSCMD > exec ALTER DISKGROUP DG2 DISMOUNT;
-- 挂载磁盘组
YFSCMD > exec ALTER DISKGROUP DG2 MOUNT;
-- 添加磁盘
YFSCMD > exec ALTER DISKGROUP DG2 ADD FAILGROUP FG_3 DISK '/dev/DISK_NAME13' NAME DISK13,'/dev/DISK_NAME14' NAME DISK14 FAILGROUP FG_4 DISK '/dev/DISK_NAME15' NAME DISK15,'/dev/DISK_NAME16' NAME DISK16;
-- 删除故障组所有磁盘
YFSCMD > exec ALTER DISKGROUP DG2 DROP DISKS IN FAILGROUP FG_3, FG_4;
-- 删除指定磁盘
YFSCMD > exec ALTER DISKGROUP DG2 DROP DISK DISK13, DISK14;
-- 重命名指定磁盘
YFSCMD > exec ALTER DISKGROUP DG2 RENAME DISK DISK13 to DISK13NEW, DISK14 to DISK14NEW;
YFSCMD > exec ALTER DISKGROUP DG2 RENAME DISKS ALL;
-- 离线指定磁盘
YFSCMD > exec ALTER DISKGROUP DG2 OFFLINE DISK DISK13, DISK14;
YFSCMD > exec ALTER DISKGROUP DG2 OFFLINE DISKS IN FAILGROUP FG_3, FG_4;
-- 上线指定磁盘
YFSCMD > exec ALTER DISKGROUP DG2 ONLINE DISK DISK13 POWER 10 WAIT;
-- 更换指定磁盘
YFSCMD > exec ALTER DISKGROUP DG2 REPLACE DISK DISK14 WITH '/dev/disk14' POWER 10 WAIT;
-- 调整数据迁移强度
YFSCMD > exec ALTER DISKGROUP DG2 REBALANCE MODIFY POWER 8;
-- 取消磁盘组的所有修复任务
YFSCMD > exec ALTER DISKGROUP DG2 REBALANCE CANCEL;
# DROP DISKGROUP
该语句用于删除一个磁盘组。
要删除的磁盘组必须处于MOUNT状态,否则删除失败,可通过ALTER DISKGROUP语句改变磁盘组的状态。
drop diskgroup::=
# dgname
指定一个已存在的DG的名称。
# INCLUDING CONTENTS
如磁盘组中有文件或目录,需明确指定INCLUDING CONTENTS才能强制删除,否则删除失败。
# FORCE
如果磁盘组中的文件被打开但未关闭,将无法DROP该磁盘组,需明确指定FORCE强制执行。注意,强制删除磁盘组可能引起数据库异常,请慎用该操作。
示例(共享集群)
YFSCMD > exec DROP DISKGROUP DG2;
YFSCMD > exec DROP DISKGROUP DG2 INCLUDING CONTENTS;

