暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

生产环境 ASM 磁盘大小不一致问题优化方案

558

大家好,我是JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,金仓最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,墨天轮MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及金仓KCA、KCP、KCM、KCSM证书,PCA、PCTA、OBCA、OGCA等众多国产数据库认证证书,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

前 言

因生产环境 ASM 磁盘 DATA 磁盘组现有三块磁盘大小不一,分别为 400G、800G、1024G 大小,当后期数据增长,将其中最小的一块盘剩余量 169G 用完后,新加磁盘组将无法进行 rebalance 再平衡,这将导致新加磁盘不可用,以及无法添加数据文件扩展表空间等造成的业务数据无法写入,业务不可用等严重后果。

图片.png

故在合适的停机窗口下新申请两块 1024G 的共享存储,添加进入 ASM 实例,再将其 400G 和 800G 的磁盘剔出 ASM,后面在将其剔出操作系统回收存储。

图片.png

磁盘优化方案

以下为变更步骤:

首先存储工程师需要新加两块 1T 存储,配置好存储和多路径(由存储工程师完成)。通过查看磁盘多路径 multipath -ll 或者 powermt display dev=all 或者华为的 upadmin show vlun

这里以新加的磁盘名为 emcpowerm 和 emcpowern 为例。

查看新添加的设备名

确保扫盘成功,新加磁盘已经存在于两台 RAC 所在主机系统。

[oracle@ora-rac1 dev]$ ls -l emc* [oracle@ora-rac1 dev]$ ls -l asm*

查看现有环境 ASM 磁盘大小和使用情况

su - grid sqlplus / as sysasm set lin 1000 pagesize 999 col NAME for a25 col FAILGROUP for a15 col path for a55 select GROUP_NUMBER,DISK_NUMBER,OS_MB/1024,TOTAL_MB/1024,FREE_MB/1024,NAME,FAILGROUP,PATH,FAILGROUP_TYPE,header_status,state from v$asm_disk order by 1; select GROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB/1024,FREE_MB/1024,USABLE_FILE_MB/1024,HOT_USED_MB,COLD_USED_MB/1024 from v$asm_diskgroup;

图片.png

检查各个节点多路径配置文件及 udev 配置文件

multipath 配置

# 设置开机自启动 systemctl enable multipathd.service # 检查开机自启动 systemctl list-unit-files|grep multipath # 创建多路径参数配置文件,该语句会创建multipath的参数配置文件:/etc/multipath.conf /sbin/mpathconf --enable # 启动多路径软件 multipathd systemctl start multipathd.service # 重新加载配置 systemctl reload multipathd # multipath -F #删除现有路径 # multipath -v2 #格式化路径 # multipath -ll #查看多路径 ## 使用以下命令查看 WWID: udevadm info --query=all --name=/dev/sdb | grep DM_SERIAL # multipath.conf 主要包括 blacklist、multipaths、devices三部份的配置 blacklist配置 blacklist { devnode "^sda" } Multipaths部分配置multipaths和devices两部份的配置。 multipaths { multipath { wwid 36000144000000010e0177a93f3962e72 #此值 multipath -v3 也可以查看 alias dm5 #映射后的别名,可以随便取 path_grouping_policy multibus #路径组策略 path_checker tur #决定路径状态的方法 path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法 } } Devices部分配置 devices { device { vendor "iSCSI-Enterprise" #厂商名称 product "Virtual disk" #产品型号 path_grouping_policy multibus #默认的路径组策略 getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序 prio_callout "/sbin/acs_prio_alua %d" #获取有限级数值使用的默认程序 path_checker readsector0 #决定路径状态的方法 path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法 failback immediate #故障恢复的模式 no_path_retry queue #在disable queue之前系统尝试使用失效路径的次数的数值 rr_min_io 100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目 } } [oracle@ora-rac1 rules.d]$ more /etc/multipath.conf #blacklist { # wwid 26353900f02796769 # devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" # devnode "^hd[a-z]" #} multipaths { # multipath { # wwid 3600508b4000156d700012000000b0000 # alias yellow # path_grouping_policy multibus # path_checker readsector0 # path_selector "round-robin 0" # failback manual # rr_weight priorities # no_path_retry 5 # } multipath { wwid 36a0406f100c8ae7b002bb7a000000019 alias otwrac-arch01 } multipath { wwid 36a0406f100c8ae7b002aba4a0000000f alias otwrac-data01 } multipath { wwid 36a0406f100c8ae7b002bfef00000001e alias otwrac-ocr03 } multipath { wwid 36a0406f100c8ae7b002bfef00000001d alias otwrac-ocr02 } multipath { wwid 36a0406f100c8ae7b002bfef00000001c alias otwrac-ocr01 } } devices { device { vendor "HUAWEI" product "XSG1" path_grouping_policy multibus path_checker tur prio const path_selector "round-robin 0" failback immediate dev_loss_tmo 30 fast_io_fail_tmo 5 no_path_retry 6 } # device { # vendor "COMPAQ " # product "MSA1000 " # path_grouping_policy multibus # } }

UDEV 配置文件

[root@ora-rac1 ~]# cd /etc/udev/rules.d [root@ora-rac1 rules.d]# ll total 4 -rw-r--r-- 1 root root 2486 Sep 15 17:16 99-oracle-asmdisks.rules [root@ora-rac1 rules.d]# more /etc/udev/rules.d/99-oracle-asmdisks.rules ##文件名不一定是这个 [root@otwrac-11 ~]# more /etc/udev/rules.d/109-oracle-asmdisks.rules KERNEL=="dm-*",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36a0406f100c8ae7b002bfef00000001e",SYMLINK+="asmdisks/otwrac-ocr03",OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="dm-*",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36a0406f100c8ae7b002bfef00000001d",SYMLINK+="asmdisks/otwrac-ocr02",OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="dm-*",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36a0406f100c8ae7b002bfef00000001c",SYMLINK+="asmdisks/otwrac-ocr01",OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="dm-*",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36a0406f100c8ae7b002aba4a00000018",SYMLINK+="asmdisks/otwrac-data10",OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="dm-*",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36a0406f100c8ae7b002aba4a00000017",SYMLINK+="asmdisks/otwrac-data09",OWNER="grid", GROUP="asmadmin", MODE="0660" ...

获取磁盘 scsi_id 并写入配置文件

--物理机获取新加磁盘的 scsi_id /lib/udev/scsi_id --whitelisted --device=/dev/emcpowerm /lib/udev/scsi_id --whitelisted --device=/dev/emcpowern --虚拟机获取新加磁盘的 scsi_id /usr/lib/udev/scsi_id -g -u /dev/sdk 36000c29ab70ff45ff0c378d8695c70eb /usr/lib/udev/scsi_id -g -u /dev/sdl 36000c29c8bfd389fbad7282470eafc5f

然后将新加磁盘配置信息写入各个节点的 udev 配置文件

物理机 EMC 存储: vi /etc/udev/rules.d/99-oracle-asmdevices.rules 虚拟机共享存: vim /etc/udev/rules.d/99-oracle-asmdisks.rules

这里有个小问题,通过多路径配置后,磁盘就会出现多个,比如下面 multipath -ll 后出现 sdcsdosdaasdam 四块磁盘,那么到底在 UDEV 配置文件中该怎么写呢?是写这四块盘,还是写上面一行的 dm-5 或者 JIEKEDB-ARCH01 呢?

答案是要写 dm-5 这个别名,在之前 19c RAC on RHEL9.6 安装《Oracle 19c RAC ADG on RHEL9.6 遇到的几个坑 续集》那篇说过了,感兴趣的可以去看看。

[root@t-19crac-r1 backup]# multipath -ll JIEKEDB-ARCH01 (36000144000000010e0177a93f3962e72) dm-5 EMC,Invista size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 13:0:0:0 sdc 8:32 active ready running |- 13:0:1:0 sdo 8:224 active ready running |- 15:0:0:0 sdaa 65:160 active ready running `- 15:0:1:0 sdam 66:96 active ready running

这里是添加删除磁盘,将较小的磁盘 emcpowerk* 和 emcpowera* 对应的 asm-data-01 和 asm-data-00 行删除,新加两行 1T 大小的磁盘信息。

--删除以下两行
KERNEL=="emcpowerk*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000144000000010f0172f82535a87b0", NAME="asm-data-01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="emcpowera*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000144000000010f0172f82535a85dc", NAME="asm-data-00", OWNER="grid", GROUP="asmadmin", MODE="0660"

--生产物理机新加信息
KERNEL=="emcpowerm*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000144000000010f0172f82535a87b0", NAME="asm-data-03", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="emcpowerm*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000144000000010f0172f82535a85dc", NAME="asm-data-04", OWNER="grid", GROUP="asmadmin", MODE="0660"

--虚拟机新加信息
KERNEL=="sd*", ACTION=="add|change", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29c8bfd389fbad7282470eafc5f", SYMLINK+="asmdisks/asm-data02", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ACTION=="add|change", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29ab70ff45ff0c378d8695c70eb", SYMLINK+="asmdisks/asm-fra01", OWNER="grid", GROUP="asmadmin", MODE="0660"

然后依次修改其他节点 udev 配置文件。或者将此文件 scp 传至其他节点。

为了保险起见,如果有停机窗口需要关闭数据库集群重载规则后再启动(非必须,业务低峰期操作)

/u01/app/19.0.0/grid/bin/crsctl stop crs --或者关闭各个节点监听,禁止对外提供服务,然后重载规则。 lsnrctl stop

各个节点重载 udev 规则并触发udev生效

udevadm control --reload-rules udevadm trigger --或者使用如下命令 # /sbin/udevadm trigger --type=devices --action=change

查看新生成的磁盘

正常情况下会生成对应的磁盘,属组为 grid:asmadmin,权限 660 或者是属主为 root:root,权限 777 的软链接。

# ls -lrth /dev/sd* # ls -l /dev/asmdisks/asm* [root@ora-rac1 asmdisks]# ls -l /dev/asmdisks/asmdiskc lrwxrwxrwx 1 root root 6 Nov 5 10:23 /dev/asmdisks/asmdiskc -> ../sde [root@ora-rac1 asmdisks]# ls -l /dev/sde brw-rw---- 1 grid asmadmin 8, 64 Nov 5 10:24 /dev/sde --正常情况下会生成 asm-data-03 和 asm-data-04,属组为grid:asmadmin,权限 660 brw-rw---- 1 grid asmadmin 120, 160 Jun 10 15:54 asm-data-03 brw-rw---- 1 grid asmadmin 120, 176 Jun 10 15:54 asm-data-04 --虚拟机查看 ls -lrth /dev/asmdisks/asm-data* --正常情况下会生成 asm-data02

然后各个节点查看是否都已经生成并检查权限和属组。磁盘权限均正常后启动 CRS 集群。

图片.png

[root@orarac-86 dev]# ll /dev/sdk brw-rw---- 1 grid asmadmin 8, 160 May 15 17:04 /dev/sdk [root@orarac-86 dev]# ll /dev/sdl brw-rw---- 1 grid asmadmin 8, 176 May 15 17:04 /dev/sdl [root@orarac-86 dev]# # /u01/app/19.0.0/grid/bin/crsctl start crs # /u01/app/19.0.0/grid/bin/crsctl status res -t -init # /u01/app/19.0.0/grid/bin/crsctl status res -t

grid 用户添加磁盘

先查看磁盘

接下来进入 grid 数据库添加删除磁盘,添加前先查看有哪些可使用的磁盘。

su - grid sqlplus / as sysasm set lin 1000 pagesize 999 col NAME for a15 col FAILGROUP for a15 col path for a18 select GROUP_NUMBER,DISK_NUMBER,OS_MB/1024,TOTAL_MB/1024,FREE_MB/1024,NAME,FAILGROUP,PATH,FAILGROUP_TYPE,header_status,state from v$asm_disk order by 1; --select GROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB/1024,FREE_MB/1024,USABLE_FILE_MB/1024,HOT_USED_MB,COLD_USED_MB/1024 from v$asm_diskgroup; GROUP_NUMBER DISK_NUMBER OS_MB/1024 TOTAL_MB/1024 FREE_MB/1024 NAME FAILGROUP PATH FAILGRO HEADER_STATU STATE ------------ ----------- ---------- ------------- ------------ --------------- --------------- ------------------------------ ------- ------------ -------- 0 1 300 0 0 /dev/sdl REGULAR CANDIDATE NORMAL 0 0 300 0 0 /dev/sdm REGULAR CANDIDATE NORMAL 1 0 300 300 267.585938 ARCH_0000 ARCH_0000 /dev/sdk REGULAR MEMBER NORMAL 2 3 300 300 74.2460938 DATA_0003 DATA_0003 /dev/sdi REGULAR MEMBER NORMAL 2 4 300 300 74.2734375 DATA_0004 DATA_0004 /dev/sdj REGULAR MEMBER NORMAL 2 1 300 300 74.2460938 DATA_0001 DATA_0001 /dev/sdg REGULAR MEMBER NORMAL 2 2 300 300 74.296875 DATA_0002 DATA_0002 /dev/sdh REGULAR MEMBER NORMAL 2 0 300 300 74.234375 DATA_0000 DATA_0000 /dev/sdf REGULAR MEMBER NORMAL 3 1 3 3 2.6484375 OCR_0001 OCR_0001 /dev/sdd REGULAR MEMBER NORMAL 3 2 3 3 2.66015625 OCR_0002 OCR_0002 /dev/sde REGULAR MEMBER NORMAL 3 0 3 3 2.65234375 OCR_0000 OCR_0000 /dev/sdc REGULAR MEMBER NORMAL

图片.png

注意看比之前多出两行的信息, HEADER_STATU 列为 FORMER 表示 ASM 可使用此磁盘。

添加磁盘

查看均衡参数及检查磁盘平衡的剩余时间

SQL> show parameter limit NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ asm_power_limit integer 1 SQL> select * from v$asm_operation; no rows selected select operation,state,actual,round(est_minutes/60,1) est_hours,est_minutes,error_code from v$asm_operation;

添加磁盘的同时删除磁盘

alter diskgroup DATA add disk '/dev/asm-data-03','/dev/asm-data-04' drop disk 'DATA_0000','DATA_0001';

添加多块磁盘(虚拟机示例),注意:添加的时候是上面 v$asm_disk 视图查出来的 Path 路径 header_status 状态为 CANDIDATEFORMER 状态的磁盘路径。

--添加多块磁盘 alter diskgroup DATA add disk '/dev/sdl','/dev/sdm';

仅添加一块磁盘

alter diskgroup DATA add disk '/dev/asmdisks/asm-data02'; alter diskgroup FRA add disk '/dev/asmdisks/asm-fra01'; -- 下面报错就是在上一篇文章中提到的集群补丁不一致的问题 ORA-15032: not all alterations performed ORA-15137: The ASM cluster is in rolling patch state.

在业务空闲时调整磁盘平衡参数

ALTER DISKGROUP DATA REBALANCE POWER 10;

ASM_POWER_LIMIT 取值范围是 0 ~ 1024,缺省值为 1。值为 0 时禁用再平衡,更高的数值使重新平衡操作能够更快地完成,但可能会导致更高的 I/O 开销和更多的重新平衡进程。磁盘组 ASM 兼容性设置为 11.2.0.2 或更高(例如COMPATIBLE.ASM = 11.2.0.2),再平衡功率的操作范围为 0 到 1024。

对于磁盘组 ASM 兼容性设置为小于 11.2.0.2 的磁盘组,取值范围为 0 ~ 11(含11)。 如果 ASM_POWER_LIMIT 的值大于 11,则对这些磁盘组使用 11。

SQL> select GROUP_NUMBER,NAME,SECTOR_SIZE,BLOCK_SIZE,STATE,TOTAL_MB/1024 Total_GB,FREE_MB/1024,COLD_USED_MB/1024,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup; GROUP_NUMBER NAME SECTOR_SIZE BLOCK_SIZE STATE TOTAL_GB FREE_MB/1024 COLD_USED_MB/1024 COMPATIBILITY DATABASE_COMPATIBILITY ------------ --------------- ----------- ---------- ----------- ---------- ------------ ----------------- ----------------------------------- ------------------------- 1 OCR 512 4096 MOUNTED 9 7.98046875 1.01953125 19.0.0.0.0 10.1.0.0.0 2 DATA 512 4096 CONNECTED 2100 220.289063 1879.71094 19.0.0.0.0 10.1.0.0.0 3 ARCH 512 4096 CONNECTED 300 247.523438 52.4765625 19.0.0.0.0 10.1.0.0.0 --设置磁盘组 compatible 参数值示例,需谨慎,参数不可逆 ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm' = '19.0'; ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms' = '19.0.0.0.0';

查看均衡时间

均衡时间是 Oracle 预估算的时间,并不是真实的时间。

SQL> select operation,state,actual,round(est_minutes/60,1) est_hours,est_minutes from v$asm_operation; OPERA STAT ACTUAL EST_HOURS EST_MINUTES ----- ---- ---------- ---------- ----------- REBAL RUN 10 .2 12 -- ERROR_CODE 没有错误码就是正常操作 SQL> select * from v$asm_operation; GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------------------------------------------- 2 REBAL RUN 10 10 2040 56442 4258 12

重平衡会经历三个阶段:
Planning ----> File extents relocation ----> Disk compacting

Planning --规划
File extents relocation --文件盘区重定位
Disk compacting --磁盘压缩

图片.png

监控资源使用情况 top/iostat/iotop

图片.png

查看数据库 alert 日志,等待均衡完成,收工,下班~

--查看 alert 日志,等待均衡完成。 Sat Jun 19 10:33:53 2021 SUCCESS: disk DATA_0003 (3.2746602556) added to diskgroup DATA SUCCESS: disk DATA_0004 (4.2746602555) added to diskgroup DATA Sat Jun 19 10:39:55 2021 Starting background process SMCO Sat Jun 19 10:39:55 2021 SMCO started with pid=68, OS id=50605 Sat Jun 19 11:04:04 2021 NOTE: disk 0 (DATA_0000) in group 2 (DATA) is offline for reads NOTE: disk 1 (DATA_0001) in group 2 (DATA) is offline for reads NOTE: disk 0 (DATA_0000) in group 2 (DATA) is offline for writes NOTE: disk 1 (DATA_0001) in group 2 (DATA) is offline for writes SUCCESS: disk DATA_0000 (0.2746602545) dropped from diskgroup DATA SUCCESS: disk DATA_0001 (1.2746602544) dropped from diskgroup DATA SQL> select * from v$asm_operation; no rows selected

图片.png

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————
facebook_pro_light_1920 × 1080  副本.png

最后修改时间:2025-11-06 11:26:33
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论