ASM 翻译系列第七弹:高级知识 How many partners?

更新时间:2016-08-08 09:37:12 点击次数:1962次

ASM的数据冗余机制是通过将extent的镜像副本复制到同一磁盘组不同failgroup的磁盘上来实现的,这个磁盘被称为partner磁盘。在11GR2版本,一个冗余(Normal,High)的磁盘组,每一个ASM磁盘多可以拥有8个partner磁盘,而在11GR2版本之前每一个磁盘多拥有10个partner。在external冗余方式的磁盘组内既没有failgroup,磁盘之间也没有partner关系。

译者注:1)其实外部冗余的磁盘组每一个磁盘也会分配一个独立failgroup的名字,可以通过查询视图v$asm_disk查看到,但是它并不具有真实的意义。2)可以通过隐含参数_asm_partner_target_disk_part来调整partner的数量,但是译者还实在没想到理由去这么做。 

如果一个normal冗余的磁盘组拥有两个磁盘,它们之间就是partner关系。所有在磁盘0上的extent都在磁盘1上有镜像副本,反之亦然,这种情况下,每个磁盘有一个partner(互为partner)。

如果一个normal冗余的磁盘组拥有三个磁盘,同时没有手工指定failgroup的情况下,每个磁盘将拥有两个partner。磁盘0与磁盘1、2有partner关系,磁盘1与磁盘0、2有partner关系,磁盘2与磁盘0、1有partner关系。当有一个extent分配到磁盘0时,它的镜像副本将被分配到磁盘1或者2,但是不是两者都有,注意,一个normal冗余的磁盘组内每个extent只有两份镜像副本,而不是三个。同理,磁盘1上的一个extent,它的镜像副本会在磁盘0或磁盘2上,磁盘2上的一个extent会有一个镜像副本在磁盘0或磁盘1,整个分配方式还是比较简单清晰的。

译者注:如果是元数据的extent,会在Normal冗余的磁盘组上有三份副本,当然假如failgroup的数量大于等于三。 

由3个磁盘组成high冗余磁盘组的情况与此类似。磁盘间的parnter关系与上一段所述的3个磁盘组成normal冗余磁盘组完全一致。不同点在于镜像级别,磁盘0上的每个Extent会在parnter磁盘即磁盘1和磁盘2上都有镜像副本。磁盘1上的每个Extent也是一样的,在磁盘0和磁盘2上都有镜像副本。磁盘2上的extent在磁盘0和磁盘2上都有镜像副本。

如果一个normal冗余的磁盘组有很多磁盘,那么每个磁盘多会有8个partner。也就是说在任一磁盘上的一个extent会在它的8个partner的磁盘上有一个副本。让我们牢记这一点,(normal冗余情况下)一个extent永远只会在某个partner磁盘上有一份镜像副本。

通过查询x$kfdpartner视图可以找出关于磁盘partner关系的更多细节。让我们来看一个多磁盘的磁盘组的例子:

SQL> SELECT count(disk_number) FROM v$asm_disk WHERE group_number = 1;
COUNT(DISK_NUMBER)
------------------ 168

查询结果显示磁盘组内包含的磁盘数量着实不少,接下来看单个磁盘拥有多少个partner:

SQL> SELECT disk "Disk", count(number_kfdpartner) "Number of partners" FROM x$kfdpartner
WHERE grp=1 GROUP BY disk
ORDER BY 1;

      Disk Number of partners
---------- ------------------ 0 8 1 8 2 8 ... 165 8 166 8 167 8 168 rows selected.

查询结果显示单个磁盘都准确的拥有8个partner磁盘。(可以看出这里的环境是一个11GR2或以上版本的数据库)

接下来查询每个磁盘组里每个磁盘的partner关系信息:

SQL> set pages 1000 SQL> break on Group# on Disk# SQL> SELECT d.group_number "Group#", d.disk_number "Disk#", p.number_kfdpartner "Partner disk#" FROM x$kfdpartner p, v$asm_disk d
WHERE p.disk=d.disk_number and p.grp=d.group_number
ORDER BY 1, 2, 3;

    Group#      Disk# Partner disk# ---------- ---------- ------------- 1 0 12 13 18 20 24 27 31 34 1 13 17 21 22 24 29 34 35 ... 29 4 5 7 8 10 12 16 19 816 rows selected..

partner关系是在创建磁盘组时由ASM自动分配的,在每次添加和删除磁盘操作时会自动更新。

磁盘之间的partner关系信息是记录在磁盘的partner关系状态表即PST表(参考前面的章节)和磁盘目录中,这两项都是重要的ASM元数据结构。

SQL> CREATE DISKGROUP wxh normal REDUNDANCY
  failgroup ocr1 disk '/dev/qdata/vdc' , '/dev/qdata/vdd' failgroup ocr2 disk '/dev/qdata/vde' , '/dev/qdata/vdg' attribute 'au_size'='1M', 'compatible.asm' = '11.2.0.4', 'compatible.rdbms' = '11.2.0.4';  

Diskgroup created.

kfed read /dev/qdata/vdc aun=1 blkn=0| more 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: 2147483648 ; 0x008: disk=0 kfbh.check: 2503555118 ; 0x00c: 0x9539382e 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:33036846 ; 0x000: HOUR=0xe DAYS=0x11 MNTH=0x6 YEAR=0x7e0 kfdpHdrPairBv1.first.super.time.lo:485925888 ; 0x004: USEC=0x0 MSEC=0x1a9 SECS=0xf MINS=0x7 kfdpHdrPairBv1.first.super.last: 2 ; 0x008: 0x00000002 kfdpHdrPairBv1.first.super.next: 2 ; 0x00c: 0x00000002 kfdpHdrPairBv1.first.super.copyCnt: 2 ; 0x010: 0x02 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 kfdpHdrPairBv1.first.super.copy[1]: 2 ; 0x01a: 0x0002 kfdpHdrPairBv1.first.super.copy[2]: 0 ; 0x01c: 0x0000 kfdpHdrPairBv1.first.super.copy[3]: 0 ; 0x01e: 0x0000 kfdpHdrPairBv1.first.super.copy[4]: 0 ; 0x020: 0x0000 kfdpHdrPairBv1.first.super.dtaSz: 4 ; 0x022: 0x0004

以上输出说明在磁盘0和2上有pst的拷贝(kfdpHdrPairBv1.first.super.copy[0]和kfdpHdrPairBv1.first.super.copy[1]处有值)

kfed read /dev/qdata/vdc aun=1 blkn=3| more 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: 2147483648 ; 0x008: disk=0 kfbh.check: 2182251266 ; 0x00c: 0x82128302 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: 2174935503 ; 0x004: 0x81a2e1cf kfdpDtaEv1[0].partner[0]: 49155 ; 0x008: P=1 P=1 PART=0x3 kfdpDtaEv1[0].partner[1]: 49154 ; 0x00a: P=1 P=1 PART=0x2 kfdpDtaEv1[0].partner[2]: 10000 ; 0x00c: P=0 P=0 PART=0x2710 kfdpDtaEv1[0].partner[3]: 0 ; 0x00e: P=0 P=0 PART=0x0

以上输出代表磁盘0(kfdpDtaEv1[0])所在failgroup号为1,它有2个partner磁盘,分为为PART=0x3,PART=0x2

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!