最近遇到一个 asm 磁盘扩容的需求:由于 RAC 的 asm 磁盘空间不足,提供一块新盘之后,我这边给加到asm磁盘组。
由于是新环境,我先对数据库的 asm 进行了检查,发现一个问题就是之前 asm 的 data 磁盘组中的磁盘盘号是不一致的,如下截图。

节点1
image.png
节点2
image.png

现在需要把节点 1 的 hdisk20 磁盘(节点2是 hdisk19)的磁盘加入到asm 的 data 磁盘组。

这在我的认知当中 RAC 两节点的共享磁盘的盘号应该是一致的才行,后来经过分析确认确实是这个认知不全面,发现自己真的是上岁数了,这个RAC 磁盘两边盘号需要一致是在早期版本(Oracle 10g RAC)要求ocr和voting disk对应的磁盘名称在两边一致是因为那个时候OCR和voting disk还不能放在ASM中。

那说一下 两边盘号不一致这个磁盘应该怎么添加。实际上直接在其中一个节点按照本节点的磁盘盘号直接添加就可以了,另一个节点 ORACLE 会根据磁盘都去自动识别。之前的认知是执行的 SQL 语句是俩节点执行的都是一样的,其实这是不对的。
以下本次 asm 扩容的日志。
1、首先是权限修改
节点1

1
2
3
4
ls -l /dev/rhdisk*
chmod 660 /dev/rhdisk20
chown grid:asmadmin /dev/rhdisk20
ls -l /dev/rhdisk*

节点2

1
2
3
4
ls -l /dev/rhdisk*
chmod 660 /dev/rhdisk19
chown grid:asmadmin /dev/rhdisk19
ls -l /dev/rhdisk*

2、权限检查
节点1

1
2
[18:25:20:221]# lsattr -El hdisk20 | grep -E "reserve_policy"
[18:25:20:241]reserve_policy no_reserve Reserve Policy

确保reserve_policy 的属性为 no_reserve
节点2

1
2
[18:25:20:221]# lsattr -El hdisk19 | grep -E "reserve_policy"
[18:25:20:241]reserve_policy no_reserve Reserve Policy

确保 reserve_policy 的属性为 no_reserve
3、磁盘扩容
这里我才用了asmca的方式进行添加,同时观察两节点的日志,asmca 我是在节点2执行的,可以看到可用磁盘是 hdisk19
image.png

节点2日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SQL> ALTER DISKGROUP DATA ADD  DISK '/dev/rhdisk19' SIZE 512000M /* ASMCA */ 
NOTE: GroupBlock outside rolling migration privileged region
NOTE: Assigning number (2,9) to disk (/dev/rhdisk19)
NOTE: requesting all-instance membership refresh for group=2
NOTE: initializing header on grp 2 disk DATA_0009
NOTE: requesting all-instance disk validation for group=2
Wed Sep 07 18:57:01 2022
NOTE: skipping rediscovery for group 2/0x28c3bf4a (DATA) on local instance.
NOTE: requesting all-instance disk validation for group=2
NOTE: skipping rediscovery for group 2/0x28c3bf4a (DATA) on local instance.
Wed Sep 07 18:57:07 2022
NOTE: initiating PST update: grp = 2
Wed Sep 07 18:57:07 2022
GMON updating group 2 at 13 for pid 32, osid 10225244
NOTE: PST update grp = 2 completed successfully
NOTE: membership refresh pending for group 2/0x28c3bf4a (DATA)
GMON querying group 2 at 14 for pid 18, osid 2425672
NOTE: cache opening disk 9 of grp 2: DATA_0009 path:/dev/rhdisk19
Wed Sep 07 18:57:12 2022
NOTE: Attempting voting file refresh on diskgroup DATA
NOTE: Refresh completed on diskgroup DATA. No voting file found.
GMON querying group 2 at 15 for pid 18, osid 2425672
SUCCESS: refreshed membership for 2/0x28c3bf4a (DATA)
SUCCESS: ALTER DISKGROUP DATA ADD DISK '/dev/rhdisk19' SIZE 512000M /* ASMCA */
NOTE: starting rebalance of group 2/0x28c3bf4a (DATA) at power 1
Starting background process ARB0

节点1日志:
可以看到节点1 的磁盘自动识别为 rhdisk20了。

1
2
3
4
5
6
7
8
9
10
11
12
Wed Sep 07 18:57:01 2022
NOTE: disk validation pending for group 2/0x28c6f4c6 (DATA)
SUCCESS: validated disks for 2/0x28c6f4c6 (DATA)
NOTE: disk validation pending for group 2/0x28c6f4c6 (DATA)
NOTE: Assigning number (2,9) to disk (/dev/rhdisk20)
SUCCESS: validated disks for 2/0x28c6f4c6 (DATA)
NOTE: membership refresh pending for group 2/0x28c6f4c6 (DATA)
Wed Sep 07 18:57:10 2022
GMON querying group 2 at 13 for pid 18, osid 1770352
NOTE: cache opening disk 9 of grp 2: DATA_0009 path:/dev/rhdisk20
GMON querying group 2 at 14 for pid 18, osid 1770352
SUCCESS: refreshed membership for 2/0x28c6f4c6 (DATA)

根据客户要求修改 rebalance power 为2;

1
alter diskgroup DATA rebalance power 2;

至此,asm磁盘添加完成。

虽然本次磁盘asm扩容完成,但是由于之前接触的环境都是强要求 RAC 共享存储两边的盘号都是一致,一是为了减少误操作,听说遇到过多起由于磁盘盘号不一致导致踢盘格式化磁盘的问题发生,还是为了安全已经规范来说,个人觉得要求 RAC 共享磁盘的盘号在各节点之后一致是一个好的选择,二也是客户的规范要求。

原文作者: liups.com

原文链接: http://liups.cn/posts/6770db0e/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议