RAC环境的AFD详解

本文详细介绍Oracle AFD(ASM Filter Driver)的配置流程,包括安装前后的配置、与MULTIPATH结合使用的方法,以及常见操作如磁盘添加与删除。同时,探讨18c版本AFD对扩展分区表的支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、AFD简介

二、AFD的配置

2.1 在安装之前配置AFD

2.2 若使用MULTIPATH并使用AFD

2.3 对于已安装的GRID软件重新配置AFD

2.3.1 此步骤可能会产生报错:ASMCMD-9520: AFD is not 'supported'

 三、AFD常用操作说明

3.1 添加磁盘

3.2 AFD删除磁盘组/磁盘

四、关于18c版本的AFD是否支持扩展分区表的测试


 

一、AFD简介

在ASM 12.1之后有效,在12.2中,ASMFD在系统已经安装了ASMLIB的情况下无法安装,也不支持扩展分区表。自18c起,AFD支持扩展分区表。

ASM FILTER DRIVER 可以最大限度的限制磁盘的用户权限,即便是root用户,也无法删除AFD磁盘。这就是ASMFD比ASMLIB和udev相比的新特性,I/O Filter筛选。

消除了在系统每次被重启后Oracle ASM需要重新绑定磁盘设备来简化对磁盘设备的配置与管理。

操作系统支持说明,可以参考一下文章:

ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (Doc ID 2034681.1)

二、AFD的配置

从官方文档可知,AFD的功能,很强大,可以省略掉对路径绑定,规则文件授权配置,直接使用afd完成次磁盘的绑定和设置,同时,可以在安装完成后,管理磁盘,磁盘的识别,绑定与添加有的极大的简化。

2.1 在安装之前配置AFD

在没有使用multipath、udev等方法做磁盘绑定的情况下,可以直接使用AFD做磁盘绑定,此时的配置步骤如下:

A.为了使用Oracle ASM Filter Driver来配置共享磁盘,以root用户来设置环境变量$ORACLE_HOME为Grid Home目录,设置环境变量$ORACLE_BASE为临时目录

# export ORACLE_HOME=/u01/app/oracle/12.2.0/grid
# export ORACLE_BASE=/tmp

ORACLE_BASE变量被设置为临时目录可以避免在安装Oracle Grid Infrastructure之前在Grid Home目录中创建诊断或跟踪文件。在执行下面的操作之前,确保是在$ORACLE_HOME/bin目录中执行命令。

B.使用ASMCMD afd_label命令来为Oracle ASM Filter Driver来准备磁盘。绑定成功后会在/dev 路径下,产生一个oracleafd/disk的路径,路径下的磁盘名都是AFD的标签名

# asmcmd afd_label DATA1 /dev/sda --init

C.使用ASMCMD afd_lslbl命令来验证磁盘是否已经被标记可以为Oracle ASMFD所使用

# asmcmd afd_lslbl /dev/sda

D.当为Oracle ASMFD准备完磁盘后清除变量ORACLE_BASE

$ . .bash_profile

E.运行grid安装脚本,并启用AFD配置

2.2 若使用MULTIPATH并使用AFD

在安装之前,启用了MULTIPATH做多路径绑定,此时在使用上述方法,给多路径绑定的别名做AFD绑定就会提示没有AFD的配置文件,此时使用AFD的方法与上述不尽相同。需要满足两大条件:

1. multipath启用成功且配置了别名

# multipath -l
ocr3 (36000c2923e1d04531b3277dad6fd15ed) dm-3 VMware  ,Virtual disk    
size=1.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
  `- 3:0:2:0 sdd                8:48   active undef running
ocr2 (36000c291406e5686333b962d52dc7af4) dm-4 VMware  ,Virtual disk    
size=1.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
  `- 3:0:1:0 sdc                8:32   active undef running
ocr1 (36000c29c26d7a40c7593945fbe607a3a) dm-2 VMware  ,Virtual disk    
size=1.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
  `- 3:0:0:0 sdb                8:16   active undef running

2. multipath路径先赋权(chmod,chown修改;修改rc.local),然后直接执行安装,在安装过程中,选择AFD启用

$ asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
OCR1                        ENABLED   /dev/mapper/ocr1
OCR2                        ENABLED   /dev/mapper/ocr2
OCR3                        ENABLED   /dev/mapper/ocr3

可以看出,AFD若与多路径绑定搭配使用的方法不需要提前使用root用户给磁盘打标签。但是对磁盘的初始化赋权需要通过chmod和chown的方式手动完成,并且,为了保证重启后,权限仍然正确,需要启用rc.local或其他开机自配置的脚本或工具,辅助完成。

 

2.3 对于已安装的GRID软件重新配置AFD

A.获取当前asm磁盘组的发现路径

[root@rac1 ~]# $ORACLE_HOME/bin/asmcmd dsget
parameter:/dev/asm*
profile:/dev/asm*

B.添加AFD发现路径

[root@rac1 ~]# asmcmd dsset '/dev/asm*','AFD:*'

[root@rac1 ~]# $ORACLE_HOME/bin/asmcmd dsget   
parameter:/dev/asm*, AFD:*
profile:/dev/asm*,AFD:*

C.查看节点信息

[root@rac1 ~]# olsnodes -a
rac1    Hub
rac2    Hub

D.关闭所有的节点,停止CRS

[root@rac1 ~]# crsctl stop crs

E.安装AFD(每个节点)

[root@rac1 yum.repos.d]# asmcmd afd_configure
[root@rac1 yum.repos.d]# asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'rac1'

2.3.1 此步骤可能会产生报错:ASMCMD-9520: AFD is not 'supported'

进一步判断原因:

目录

一、AFD简介

二、AFD的配置

2.1 在安装之前配置AFD

2.2 若使用MULTIPATH并使用AFD

2.3 对于已安装的GRID软件重新配置AFD

2.3.1 此步骤可能会产生报错:ASMCMD-9520: AFD is not 'supported'

 三、AFD常用操作说明

3.1 添加磁盘

3.2 AFD删除磁盘组/磁盘

四、关于18c版本的AFD是否支持扩展分区表的测试


[root@rac1 ~]# afdroot install
AFD-620: AFD is not supported on this operating system version: '3.10.0-693.el7.x86_64'

[root@rac1 ~]#  acfsdriverstate -orahome $ORACLE_HOME supported
ACFS-9459: ADVM/ACFS is not supported on this OS version: '3.10.0-693.el7.x86_64'
ACFS-9201: Not Supported 


[root@rac1 ~]# uname -a       
Linux rac1 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
----查看当前系统内核版本确实不被支持

[root@rac1 ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.4 (Maipo)

解决:

REHL 7.4 + 需要升级kmod版本
ACFS and AFD report “Not Supported” after installing appropriate Oracle Grid Infrastructure Patches on RedHat (文档 ID 2303388.1)

查看kmod版本:
	[root@rac2 ~]# rpm -qa|grep kmod
	kmod-libs-20-15.el7.x86_64
	kmod-20-15.el7.x86_64   ----20-15版本
	
	[root@rac1 yum.repos.d]# yum install kmod
	检查安装效果:
	[grid@rac1:/home/grid]$rpm -qa|grep kmod
	kmod-libs-20-15.el7.x86_64
	kmod-20-21.el7.x86_64  --->已升级到20-21版本
查看afd驱动版本:
	[root@rac1 yum.repos.d]#  acfsdriverstate -orahome $ORACLE_HOME supported
	ACFS-9200: Supported ---升级kmod之后afd驱动已支持

 

F.启动crs

[root@rac1 yum.repos.d]# crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

 三、AFD常用操作说明

3.1 添加磁盘

步骤如下:

A.确定要添加的磁盘,本例中为使用multipath多路径绑定,并确定磁盘权限

--查看目标磁盘的多路径文件配置情况
# /usr/lib/udev/scsi_id -g -u -d /dev/sdb  --查询磁盘的wwid
# vi /etc/multipath.conf  --添加新磁盘的wwid 和别名
	multipath {
	                wwid                    36244427100fbe2a072d28ee900000029
	                alias                   data13
	             }
# systemctl reload multipathd.service
# multipath -ll

--修改磁盘权限
# vi /etc/rc.local
chown grid:asmadmin /dev/mapper/asmssd*
chmod 660 /dev/mapper/data*

--默认在RHEL/OEL7上不会生效,需要添加执行位。
# chmod +x /etc/rc.d/rc.local

B.查看当前已有的afd标签

# su - grid
$ asmcmd afd_lsdsk

$ sqlplus / as sysasm
	set lines 222 pages 222
	col name for a22
	col path for a33
	col label for a11
	col failgroup for a11
	select GROUP_NUMBER,GROUP_NUMBER,name,path,label,os_mb,failgroup 
	from v$asm_disk order by 1,7;

C.AFD给需要添加的磁盘打标签

--单个节点打标签
# export ORACLE_HOME=/u01/app/grid_home
# asmcmd afd_label A700_RECO /dev/mapper/asma700-reco1p1
# asmcmd afd_label A700_OCR /dev/mapper/asma700-ocr1p1
# asmcmd afd_label A700_FRA /dev/mapper/asma700-fra1p1
# asmcmd afd_label A700_DATA1 /dev/mapper/asma700-data0p1

--其他节点刷新afd磁盘标签信息
$ asmcmd afd_refresh
$ asmcmd afd_lsdsk

--查看当前磁盘组信息
$ asmcmd lsdg
State   Type    ... Logical_Sector Block       AU Total_MB ... Voting_files  Name
MOUNTED EXTERN  ...            512  4096  4194304    40960 ...            N  DATA/
MOUNTED NORMAL  ...            512  4096  4194304     3072 ...            Y  OCR/
OR
MOUNTED EXTERN  ...            512  4096  4194304     3072 ...            Y  OCR/

D.asm实例中添加新磁盘

alter diskgroup DATA
add disk 'AFD:DATA5','AFD:DATA6','AFD:DATA7','AFD:DATA8'
rebalance power 8;

--创建新的磁盘组(需要创建新的external模式的磁盘组)
create diskgroup TEST EXTERNAL REDUNDANCY DISK 'AFD:DATA5','AFD:DATA6';

3.2 AFD删除磁盘组/磁盘

A.检查磁盘组占用情况(MGMTDB相关操作可参考——MGMTDB实例与资源详解

select * from dba_data_files;
select * from dba_temp_files;
select * from v$logfile;

--12C RAC环境中,还有一个MGMTDB的实例,可能会占用磁盘,需要迁移相关文件或删除实例
select dg.name group_name,cli.instance_name,cli.db_name,cli.status 
from v$asm_client cli 
left join v$asm_diskgroup dg 
on cli.group_number=dg.group_number;

GROUP_NAME		       INSTANCE_NAME							DB_NAME  STATUS
------------------------------ ---------------------------------------------------------------- -------- ------------
			       +APX1								+APX	 CONNECTED
DATA			       +ASM1								+ASM	 CONNECTED
DATA			       o18000r11							o18000r  CONNECTED
OCR			       +ASM1								+ASM	 CONNECTED
OCR			       o18000r1.ntos.com						_OCR	 CONNECTED

B.解除磁盘的占用后,删除磁盘组

step A: dismount DATA磁盘组:(grid用户下各节点单独操作)
sqlplus / as sysasm
alter diskgroup DATA dismount;
--查看磁盘组状态
select GROUP_NUMBER,NAME,BLOCK_SIZE,STATE,TYPE,VOTING_FILES from v$asm_diskgroup;
GROUP_NUMBER NAME			    BLOCK_SIZE STATE	   TYPE   V
------------ ------------------------------ ---------- ----------- ------ -
	   0 DATA				     0 MOUNTED	   EXTERN N
	   2 OCR				  4096 MOUNTED	   NORMAL Y


step B: 删除DATA磁盘组:(任一节点执行即可)
drop diskgroup DATA force including contents;
--检查当前磁盘组
select GROUP_NUMBER,NAME,BLOCK_SIZE,STATE,TYPE,VOTING_FILES from v$asm_diskgroup;
GROUP_NUMBER NAME			    BLOCK_SIZE STATE	   TYPE   V
------------ ------------------------------ ---------- ----------- ------ -
	   2 OCR				  4096 MOUNTED	   NORMAL Y


step C: 取消afd标签(若使用的是UDEV或multipath等方式,也需将对应资源释放,修改器相应的配置文件,删除相关磁盘的条目)
--查看当前的标签:
$ asmcmd afd_lsdsk
--清除标签:
$ asmcmd afd_unlabel DATA1

C.删除磁盘

alter diskgroup DATA drop disk 'DATA1' rebalance power 10;

--normal模式下删除
alter diskgroup OCR add failgroup OCR_0000 disk  'AFD:OCR' rebalance power 10;
--failgroup 写的是asmcmd lsdsk -k中failgroup的类

alter diskgroup OCR drop disk 'OCR_0000' rebalance power 10;

--OCR磁盘的变更需特别谨慎(votedisk)
$ crsctl query css votedisk --确认votedisk是否切换
--观察rebalance过程,替换一个观察一个
select * from V$ASM_OPERATION;
--确认当前的磁盘组是否替换完成
select name,path,total_mb,free_mb from v$asm_disk;

--删除asmfd标签,只需在一个节点删除,其他节点刷新即可(multipath/udev相关条目也需要调整)
asmcmd afd_unlabel DATA1

asmcmd afd_refresh

四、关于18c版本的AFD是否支持扩展分区表的测试

官方文档已经明确说明,12.2中的AFD不支持扩展分区表,也就是说,当我使用AFD做共享存储的磁盘管理时,如果使用了分区表,用户无法对分区表进行添加分区操作,那么,18的AFD是否也有相同的问题呢?官方文档没有明确指出,因此进行了以下测试:

A.创建模拟分区表,并创建相关约束与索引

创建一个,以创建时间为分区标准的分区表,该分区表之创建了一个到2019年1月1日之前的分区,其没有开启启动扩展,也就是说,当用户插入一个create_time大于2019-01-01的日期后,那么,则应该报错,此时需要扩展一个新的分区来满足插入操作

create table test_part
(
   ID NUMBER(20) not null,
   REMARK VARCHAR2(1000),
   create_time DATE
)
PARTITION BY RANGE (CREATE_TIME)
(partition part_t01 values less than(to_date('2019-01-01', 'yyyy-mm-dd'))); 

alter table test_part add constraint test_part_pk primary key (ID) using INDEX;
create index test_part_create_time on TEST_PART (create_time); 

--检查创建结果
select table_name,partition_name 
from user_tab_partitions 
where table_name = upper('test_part');

TABLE_NAME		PARTITION_NAME
--------------- ------------------------------------------------------------------
TEST_PART		PART_T01

B.插入模拟数据:

--插入一条符合分区条件的数据
insert into test_part values (1,'as',to_date('2018-01-03','yyyy-mm-dd'));

select * from test_part;

ID	     REMARK			   CREATE_TIME	
---------- -------------------- ------------------
 1	     as			   03-JAN-18

--提交数据
commit;

--模拟插入一条不符合分区条件的数据
insert into test_part values (2,'as',to_date('2019-01-03','yyyy-mm-dd'));

--产生如下报错
ORA—14400: inserted partition key does not map to any partition

--此时查看分区表数据,没有插入任何新数据,无效数据插入失败

C.扩展分区

alter table TEST_PART add partition part_t02 values less than(to_date('2020-01-01', 'yyyy-mm-dd'));

查看表分区信息
select table_name,partition_name 
from user_tab_partitions 
where table_name = upper('test_part');
TABLE_NAME		PARTITION_NAME
--------------- --------------------------------------------------
TEST_PART		PART_T01
TEST_PART		PART_T02

D.重新插入2019-01-03的未匹配数据

insert into test_part values (2,'as',to_date('2019-01-03','yyyy-mm-dd'));

select * from test_part;
	ID	   REMARK							CREATE_TIME
---------- -------------------------------- ------------------
	 1	   as								03-JAN-18
	 2	   as								03-JAN-19

--查看新增分区中的数据
select * from test_part partition(PART_T02); 
	ID	   REMARK							CREATE_TIME
---------- -------------------------------- ------------------
	 2	   as								03-JAN-19

实验说明,18c的GI中AFD支持扩展分区表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hannah_JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值