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

Oracle ASM Physically addressed metadata-Partner and Status Table

原创 李翔宇 2021-11-04
562

Partner and Status Table(PST)位于asm磁盘的第二个AU(AU1),也属于Physically addressed metadata,PST对于ASM非常重要,它记录了该磁盘组所有磁盘的磁盘号、磁盘之间的partner关系、failgroup信息、PST心跳信息以及磁盘状态,磁盘的第二个AU(AU1)为PST保留,但并不是磁盘组内的所有磁盘都有PST,磁盘组冗余级别不同,PST的个数也不同,如下:

  • External Redundancy一般有一个PST
  • Normal Redundancy至多有个3个PST
  • High Redundancy 至多有5个PST

PST元数据由ASM实例的GMON进程维护,当mount diskgroup时,GMON进程会读取diskgroup中所有磁盘去找到PST,通过PST确认哪些磁盘是ONLINE可以使用的,哪些是OFFLINE不能使用的。当NORMAL或者HIGH Redundancy的磁盘组有磁盘发生offline或者drop时,GMON会去更新PST,并且最新版本的PST会在磁盘之间发生迁移。

磁盘第二个AU(AU1)的第一个block时PST header block,它属于PST的元数据,描述了PST的副本数量以及分布情况
没有PST的磁盘AU1的第一个block显示如下

[grid@rac1 trace]$ kfed read /dev/asmdisk-data5 aun=1 
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           13 ; 0x002: KFBTYP_PST_NONE
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:              2147483648 ; 0x004: blk=0 (indirect)
kfbh.block.obj:              2147483649 ; 0x008: disk=1
kfbh.check:                    17662464 ; 0x00c: 0x010d8200
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
复制

拥有PST的磁盘AU1的第一个block显示如下

[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           17 ; 0x002: KFBTYP_PST_META
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                     256 ; 0x004: blk=256
kfbh.block.obj:              2147483650 ; 0x008: disk=2
kfbh.check:                  1074756307 ; 0x00c: 0x400f7ad3
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdpHdrPairBv1.first.super.time.hi:33107154 ; 0x000: HOUR=0x12 DAYS=0x6 MNTH=0xb YEAR=0x7e4
kfdpHdrPairBv1.first.super.time.lo:3385185280 ; 0x004: USEC=0x0 MSEC=0x175 SECS=0x1c MINS=0x32
kfdpHdrPairBv1.first.super.last:      2 ; 0x008: 0x00000002
kfdpHdrPairBv1.first.super.next:      2 ; 0x00c: 0x00000002
kfdpHdrPairBv1.first.super.copyCnt:   3 ; 0x010: 0x03  --3个PST副本,分布在disk 0,1,2上
kfdpHdrPairBv1.first.super.version:   1 ; 0x011: 0x01
kfdpHdrPairBv1.first.super.ub2spare:  0 ; 0x012: 0x0000
kfdpHdrPairBv1.first.super.incarn:    1 ; 0x014: 0x00000001
kfdpHdrPairBv1.first.super.copy[0]:   0 ; 0x018: 0x0000 -- disk 0
kfdpHdrPairBv1.first.super.copy[1]:   1 ; 0x01a: 0x0001 -- disk 1
kfdpHdrPairBv1.first.super.copy[2]:   2 ; 0x01c: 0x0002 -- disk 2
kfdpHdrPairBv1.first.super.copy[3]:   0 ; 0x01e: 0x0000
kfdpHdrPairBv1.first.super.copy[4]:   0 ; 0x020: 0x0000
kfdpHdrPairBv1.first.super.dtaSz:     3 ; 0x022: 0x0003
复制
  • super.time.hi:最近一次更新PST的时间(年、月、日、时)
  • super.time.lo:最近一次更新PST的时间(分、秒、毫秒、微妙)
  • super.last:最近一次更新的PST版本号
  • super.next:下一个可用的PST版本号
  • super.copyCnt:拥有PST的磁盘个数
  • super.copy[n]:PST副本列表,描述PST分布在哪些磁盘上
  • super.incarn:PST副本列表的当前版本号,当PST迁移到其他磁盘上时,该值将变为super.last
  • super.dtaSz:该磁盘组的磁盘数(包含offline和online)

除了PST header block之外,还有PST数据实时记录了磁盘组每一块磁盘的状态以及磁盘之间的PARTNER关系

[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 blkn=3
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           18 ; 0x002: KFBTYP_PST_DTA
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                     259 ; 0x004: blk=259
kfbh.block.obj:              2147483650 ; 0x008: disk=2
kfbh.check:                  3504163057 ; 0x00c: 0xd0dd48f1
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdpDtaEv1[0].status:               127 ; 0x000: I=1 V=1 V=1 P=1 P=1 A=1 D=1
kfdpDtaEv1[0].fgNum:                  1 ; 0x002: 0x0001
kfdpDtaEv1[0].addTs:         2462919836 ; 0x004: 0x92cd2c9c
kfdpDtaEv1[0].partner[0]:         49154 ; 0x008: P=1 P=1 PART=0x2
kfdpDtaEv1[0].partner[1]:         49153 ; 0x00a: P=1 P=1 PART=0x1
kfdpDtaEv1[0].partner[2]:         10000 ; 0x00c: P=0 P=0 PART=0x2710
kfdpDtaEv1[0].partner[3]:             0 ; 0x00e: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[4]:             0 ; 0x010: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[5]:             0 ; 0x012: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[6]:             0 ; 0x014: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[7]:             0 ; 0x016: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[8]:             0 ; 0x018: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[9]:             0 ; 0x01a: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[10]:            0 ; 0x01c: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[11]:            0 ; 0x01e: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[12]:            0 ; 0x020: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[13]:            0 ; 0x022: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[14]:            0 ; 0x024: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[15]:            0 ; 0x026: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[16]:            0 ; 0x028: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[17]:            0 ; 0x02a: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[18]:            0 ; 0x02c: P=0 P=0 PART=0x0
kfdpDtaEv1[0].partner[19]:            0 ; 0x02e: P=0 P=0 PART=0x0
kfdpDtaEv1[1].status:               127 ; 0x030: I=1 V=1 V=1 P=1 P=1 A=1 D=1
kfdpDtaEv1[1].fgNum:                  2 ; 0x032: 0x0002
kfdpDtaEv1[1].addTs:         2462919836 ; 0x034: 0x92cd2c9c
kfdpDtaEv1[1].partner[0]:         49152 ; 0x038: P=1 P=1 PART=0x0
kfdpDtaEv1[1].partner[1]:         49154 ; 0x03a: P=1 P=1 PART=0x2
kfdpDtaEv1[1].partner[2]:         10000 ; 0x03c: P=0 P=0 PART=0x2710
kfdpDtaEv1[1].partner[3]:             0 ; 0x03e: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[4]:             0 ; 0x040: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[5]:             0 ; 0x042: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[6]:             0 ; 0x044: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[7]:             0 ; 0x046: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[8]:             0 ; 0x048: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[9]:             0 ; 0x04a: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[10]:            0 ; 0x04c: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[11]:            0 ; 0x04e: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[12]:            0 ; 0x050: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[13]:            0 ; 0x052: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[14]:            0 ; 0x054: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[15]:            0 ; 0x056: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[16]:            0 ; 0x058: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[17]:            0 ; 0x05a: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[18]:            0 ; 0x05c: P=0 P=0 PART=0x0
kfdpDtaEv1[1].partner[19]:            0 ; 0x05e: P=0 P=0 PART=0x0
复制
  • kfdpDtaEv1[n].status:该磁盘状态,正常online可读写的磁盘状态为0x7f也就是127
  • kfdpDtaEv1[n].fgNum:该磁盘所属failgroup number
  • kfdpDtaEv1[n].addTs:该磁盘加入磁盘组的时间戳
  • kfdpDtaEv1[n].partner[i]:该磁盘的partner列表,该列表最大为20个slot,最多只能有8个slot为active状态,也就是说该磁盘最多只能与8块盘互为partner

为了保护NORMAL和HIGH冗余磁盘partner之间的安全和数据一致性,oracle设计了一个PST的心跳块位于拥有PST的磁盘AU1的最后一个块上,当PST心跳延时超过“_asm_hbeatiowait”(默认15s)时,磁盘组将被强制dismount

[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 blkn=255
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           19 ; 0x002: KFBTYP_HBEAT
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                     511 ; 0x004: blk=511
kfbh.block.obj:              2147483650 ; 0x008: disk=2
kfbh.check:                  3600100627 ; 0x00c: 0xd6952d13
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdpHbeatB.instance:                  1 ; 0x000: 0x00000001
kfdpHbeatB.ts.hi:              33115651 ; 0x004: HOUR=0x3 DAYS=0x10 MNTH=0x3 YEAR=0x7e5
kfdpHbeatB.ts.lo:            2698943488 ; 0x008: USEC=0x0 MSEC=0x3a7 SECS=0xd MINS=0x28
kfdpHbeatB.rnd[0]:           1529444524 ; 0x00c: 0x5b2978ac
kfdpHbeatB.rnd[1]:           1274815798 ; 0x010: 0x4bfc2536
kfdpHbeatB.rnd[2]:           4254773072 ; 0x014: 0xfd9aaf50
kfdpHbeatB.rnd[3]:            418287143 ; 0x018: 0x18ee8e27
复制

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

评论