Separando o OCR e o Voting Disk no Oracle Clusterware 12c

Por Franky Weber,
Postado em Fevereiro 2016

Revisado por Marcelo Pivovar - Solution Architect

Objetivo: Descrever as vantagens em separar o OCR e o VD e também apresentar o processo necessário para fazer isso.

OBS: Apesar do procedimento ter sido realizado na versão 11gR2, os passos são os mesmos para a versão 12c.

Neste artigo vamos tratar de um tópico avançado e para começar vou explicar o que são o OCR e o Voting Disk.

O Oracle Clusterware tem componentes muito importantes, um gerencia a configuração do cluster e o outro gerencia os nodes que fazem parte do cluster.

O Oracle Cluster Registry, ou OCR, é responsável por gerenciar as configurações e recursos do Oracle Clusterware e do Oracle RAC. Também podemos incluir aqui o OLR (Oracle Local Registry), este reside em cada node do cluster e gerencia localmente as configurações do Oracle Clusterware.

O Voting Disk é onde ficam armazenados arquivos de "voto" ou voting files do cluster que gerenciam informações referente aos nodes que fazem parte do cluster. Para que um node seja membro do cluster este node deve obrigatoriamente ter acesso aos voting files.

O OCR e Voting Disk podem ser armazenados no Oracle ASM ou em um Filesystem compartilhado. A direção da Oracle é usar o ASM para isso.

Agora sabemos o que são estes componentes, mas ainda não sabemos como eles funcionam.

O OCR tem o papel de saber quais são os recursos do cluster, como: instâncias ASM, instâncias de banco de dados, diskgroups, SCAN Listeners, VIPs, Nodeapps, etc. Ele tem a informação de qual recurso está ativo ou inativo, quais os nodes que estão na configuração do cluster. Quando um node é adicionado ou removido do cluster é no OCR que está informação fica gravada. Ele é o centro das informações do cluster e deve estar em storage compartilhado por todos os nodes, pode ter até 4 mirrors, pode ser gerenciado através dos utilitários "ocrconfig", "ocrdump" e "ocrcheck", é preferível que se use estes como root. O OCR pode ser gerenciado a partir de qualquer node do cluster e seus backups são executados automaticamente a cada 4 horas. O Oracle Clusterware retém os últimos 3 backups e mais o último diário e o último semanal. Não é possível alterar a retenção ou a frequência dos backups automáticos e estes são sempre feitos de modo físico. Os backups do OCR podem ser executados manualmente como físicos ou lógicos.

Basicamente os voting files são usados para que o cluster saiba quais nodes estão disponíveis em determinado momento. Todos os nodes do cluster ficam gravando a cada 5 segundos mensagens de reconhecimento nos voting files para informar o cluster que eles estão ali disponíveis. Se estas mensagens não forem gravadas por 30 segundos (tempo padrão no Linux) o node que não conseguir se comunicar é removido do cluster temporariamente até que volte a se comunicar com os demais. O voting disk, disco onde ficam armazenados os voting files é o centro do "ping" dos nodes, ele pode ter vários mirrors e também pode ser gerenciado a partir de qualquer node do cluster. Os backups do voting disk são manuais e devem ser incluídos nas suas rotinas de backups. As operações no voting disk devem ser executadas como root. Até a versão 11gR2 depois de qualquer adição ou remoção de um node no cluster deve ser feito um backup do VD. Com as informações do VD o Clusterware decide quem faz parte do cluster e gerencia o tipo de operação realizada (election/eviction/split brain).

O OCR e o Voting Disk são componentes essenciais para o funcionamento do Oracle Clusterware, sem qualquer um destes todo o seu cluster irá parar de funcionar. Durante o processo de instalação e configuração do Grid Infrastructure, temos a opção de escolher somente um diskgroup para armazenar as informações do Clusterware. Isso significa que se perdermos esse diskgroup, perderemos tanto o OCR quanto o Voting Disk. O processo para recuperar cada um é diferente, então se conseguirmos simplificar significa que teremos uma recuperação mais rápida, portanto menos downtime. O processo aqui explanado mostra como separar o OCR e o Voting Disk em diferentes diskgroups.

Para que consigamos separá-los em diskgroups distintos inicialmente teremos o OCR e o VD em um único diskgroup, pois não temos outra opção durante a instalação do Grid Infrastructure. Vamos verificar a disposição atual então.

[root@clusterware1  ~]# ocrcheck
Status of Oracle Cluster Registry is as follows:
          Version                   :            3
          Total space (kbytes)      :       262120
          Used space (kbytes)       :         2856
          Available space (kbytes)  :       259264
          ID                        :    628337282
          Device/File  Name         :      +CONFIG

Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded
[root@clusterware1  ~]# crsctl query css votedisk

##  STATE    File Universal Id                 File Name                       Disk group
--  -----    -----------------                 ---------                       ---------
 1. ONLINE   02aa40fc09384f14bf26cef30fca02b9  (/dev/oracleasm/disks/CONFIG1)  [CONFIG]
 2. ONLINE   45b54bb316a84ff0bfec3c6faa4bc142  (/dev/oracleasm/disks/CONFIG2)  [CONFIG]
 3. ONLINE   47a0e02aa9434fd2bf9dcac8ae2f12e3  (/dev/oracleasm/disks/CONFIG3)  [CONFIG]

Located 3 voting disk(s).

Podemos ver que o VD e o OCR estão armazenados no diskgroup CONFIG.

Vamos adicionar novos discos para podermos criar os novos diskgroups.

Figura 1. Adicione um novo disco na controladora SATA

Figura 2 - Selecione o formato desejado

Figura 3 - Escolha "Fixed Size" para criar o disco com tamanho fixo

Figura 4 - Defina um nome e local para armazenar o seu disco. 1 GB é suficiente para este exercício

Figura 5 - Repita o mesmo processo para os demais discos. Crie o vd2.vdi, vd3.vdi, ocr1.vdi, ocr2.vdi e ocr3.vdi

Figura 6 - Depois de criar o restante dos discos, abra o "Virtual Media Manager" ou "Gerenciador de Mídias Virtuais"

Figura 7 - Selecione um dos discos criados e clique em "Modify"

Figura 8 - Defina o disco como "Shareable" ou "Compartilhável

Repita o procedimento para todos os demais discos recém criados: ocr2.vdi, oc3.vdi, vd1.vdi, vd2.vdi e vd3.vdi.

Figura 9 - Depois de alterar os discos, adicione-os ao outro node do seu cluster

Figura 10 - Escolha a opção "Choose existing disk"

Figura 11 - Escolha o disco

Figura 12 - Repita o procedimento para os demais discos: vd2.vdi, vd3.vdi, ocr1.vdi, ocr2.vdi e ocr3.vdi

Inicie somente um dos nodes, pois vamos particioná-los e depois configurá-los no ASM.

[root@clusterware1  ~]# fdisk -l
Disk  /dev/sda: 21.5 GB, 21474836480 bytes
255 heads,  63 sectors/track, 2610 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
 Disk  identifier: 0x00062c2a
Dispositivo  Boot      Start         End       Blocks    Id  System
  /dev/sda1   *            1          26       204800    83  Linux
Partition 1  does not end on cylinder boundary.
  /dev/sda2               26         679      5242880    83  Linux
Partition 2  does not end on cylinder boundary.
  /dev/sda3             679         1070      3145728    82  Linux swap / Solaris
  /dev/sda4            1070         2611     12377088     5  Estendida
  /dev/sda5            1071         2611     12376064    83  Linux
Disk  /dev/sdb: 2147 MB, 2147483648 bytes
255 heads,  63 sectors/track, 261 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x77fc4eb9
Dispositivo  Boot      Start         End      Blocks    Id  System
   /dev/sdb1               1         261      2096451   83  Linux
Disk  /dev/sdc: 2147 MB, 2147483648 bytes
255 heads,  63 sectors/track, 261 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0xc559b074
Dispositivo  Boot      Start         End      Blocks    Id  System
   /dev/sdc1               1         261      2096451   83  Linux
Disk  /dev/sdd: 2147 MB, 2147483648 bytes
255 heads,  63 sectors/track, 261 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x9a582402
Dispositivo  Boot      Start         End      Blocks    Id  System
   /dev/sdd1               1         261      2096451   83  Linux
Disk  /dev/sde: 1073 MB, 1073741824 bytes
255 heads,  63 sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x00000000
 
Disk  /dev/sdf: 1073 MB, 1073741824 bytes
255 heads,  63 sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x00000000
 
Disk  /dev/sdg: 1073 MB, 1073741824 bytes
255 heads,  63 sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x00000000
 
Disk  /dev/sdh: 1073 MB, 1073741824 bytes
255 heads,  63 sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x00000000
 
Disk  /dev/sdi: 1073 MB, 1073741824 bytes
255 heads, 63  sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size  (minimum/optimal): 512 bytes / 512 bytes
Disk  identifier: 0x00000000
 
Disk  /dev/sdj: 1073 MB, 1073741824 bytes
255 heads,  63 sectors/track, 130 cylinders
Units =  cilindros of 16065 * 512 = 8225280 bytes
Sector size  (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512  bytes / 512 bytes
Disk identifier: 0x00000000

O comando listou todos os discos presentes no node. Vamos particionar somente os que não estão particionados.

[root@clusterware1 ~]# fdisk  /dev/sde
O dispositivo não contém nem uma  tabela de partições DOS válida nem um rótulo de disco Sun, OSF ou SGI
Building a  new DOS disklabel with disk identifier 0x6952baca.
Changes will  remain in memory only, until you decide to write them.
After that,  of course, the previous content won't be recoverable.
Aviso: a opção inválida 0x0000 da  tabela de partições 4 será corrigida por gravação (w)
WARNING:  DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and  change display units to
sectors (command 'u').
Comando (m para ajuda): n
Comando - ação
e   estendida
p   partição primária (1-4)
p
Número da partição (1-4): 1
Primeiro cilindro (1-130, default  1):
Using  default value 1
Last  cilindro, +cilindros or +size{K,M,G} (1-130, default 130):
Using default value 130
Comando (m para ajuda): w
A tabela de partições foi alterada!
Chamando ioctl() para reler tabela  de partições.
Sincronizando discos.

Faça o mesmo procedimento para os demais. Depois que finalizar execute novamente o comando “fdisk -l” para conferir se todos os discos estão particionados. Agora vamos criar os discos no ASM.

[root@clusterware1  ~]# oracleasm createdisk VD1 /dev/sde1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm createdisk VD2 /dev/sdf1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm createdisk VD3 /dev/sdg1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm createdisk OCR1 /dev/sdh1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm createdisk OCR2 /dev/sdi1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm createdisk OCR3 /dev/sdj1
Writing disk  header: done
Instantiating  disk: done
[root@clusterware1  ~]# oracleasm listdisks
CONFIG1
CONFIG2
CONFIG3
OCR1
OCR2
OCR3
VD1
VD2
VD3

Inicie o outro node e verifique se o ASM identificou os discos.

[root@clusterware2  ~]# oracleasm listdisks
CONFIG1
CONFIG2
CONFIG3
OCR1
OCR2
OCR3
VD1
VD2
VD3

Vamos agora verificar o path dos discos e criar os diskgroups OCR e VD.

[root@clusterware2 ~]# su - oracle
[oracle@clusterware2 ~]$ . oraenv
ORACLE_SID =  [oracle] ? +ASM2
The Oracle  base has been set to /u01/app/oracle
[oracle@clusterware2  ~]$ sqlplus / as sysasm
SQL*Plus:  Release 11.2.0.4.0 Production on Sun Jan 24 23:01:10 2016
Copyright  (c) 1982, 2013, Oracle.  All rights  reserved.
 
Connected  to:
Oracle  Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the  Real Application Clusters and Automatic Storage Management options
SQL>  column path format a45
SQL> set  lines 200
SQL> set  pages 500

NAME                            PATH                                  HEADER_STATU

------------------------------  ------------------------------------  ------------

CONFIG_0000                     /dev/oracleasm/disks/CONFIG1          PROVISIONED
CONFIG_0001                     /dev/oracleasm/disks/CONFIG2          PROVISIONED
CONFIG_0002                     /dev/oracleasm/disks/CONFIG3          PROVISIONED
                                /dev/oracleasm/disks/OCR1             PROVISIONED
                                /dev/oracleasm/disks/OCR2             PROVISIONED
                                /dev/oracleasm/disks/OCR3             PROVISIONED
                                /dev/oracleasm/disks/VD1              PROVISIONED
                                /dev/oracleasm/disks/VD2              PROVISIONED
                                /dev/oracleasm/disks/VD3              PROVISIONED

9 rows  selected.
 
SQL>  CREATE DISKGROUP VD NORMAL REDUNDANCY DISK '/dev/oracleasm/disks/VD1' ,  '/dev/oracleasm/disks/VD2' , 
'/dev/oracleasm/disks/VD3';
Diskgroup  created.
SQL>  CREATE DISKGROUP OCR NORMAL REDUNDANCY DISK '/dev/oracleasm/disks/OCR1' ,  '/dev/oracleasm/disks/OCR2' , 
'/dev/oracleasm/disks/OCR3';
Diskgroup created.

Observer que os diskgroups criados estão rodando somente no node onde os criamos. Inicie e habilite os diskgroups recém criados no outro node.

[oracle@clusterware2  ~]$ srvctl status diskgroup -g OCR
 
Disk Group  OCR is running on clusterware2
 
[oracle@clusterware2  ~]$ srvctl status diskgroup -g VD
 
Disk Group  VD is running on clusterware2

[oracle@clusterware2  ~]$ srvctl start diskgroup -g OCR -n clusterware1

[oracle@clusterware2  ~]$ srvctl enable diskgroup -g OCR -n clusterware1

[oracle@clusterware2  ~]$ srvctl start diskgroup -g VD -n clusterware1

[oracle@clusterware2  ~]$ srvctl enable diskgroup -g VD -n clusterware1

Altere os atributos compatible dos diskgroups.

SQL>  ALTER DISKGROUP OCR SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';
Diskgroup  altered.
SQL>  ALTER DISKGROUP OCR SET ATTRIBUTE 'compatible.rdbms' = '11.2.0.0.0';
Diskgroup  altered.
SQL>  ALTER DISKGROUP VD SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';
Diskgroup  altered.
SQL>  ALTER DISKGROUP VD SET ATTRIBUTE 'compatible.rdbms' = '11.2.0.0.0';
Diskgroup altered.

Vamos verificar a situação atual do Voting Disk.

[oracle@clusterware2 ~]$ su -
Password:

[root@clusterware2 ~]# . oraenv
ORACLE_SID =  [root] ? +ASM2
The Oracle  base has been set to /u01/app/oracle

[root@clusterware2  ~]# crsctl query css votedisk

##  STATE     File Universal Id                 File Name Disk group
--  -----     -----------------                 --------- ---------
1. ONLINE    02aa40fc09384f14bf26cef30fca02b9 (/dev/oracleasm/disks/CONFIG1) [CONFIG]
2. ONLINE    45b54bb316a84ff0bfec3c6faa4bc142 (/dev/oracleasm/disks/CONFIG2) [CONFIG]
3. ONLINE    47a0e02aa9434fd2bf9dcac8ae2f12e3 (/dev/oracleasm/disks/CONFIG3) [CONFIG]

Located 3  voting disk(s).

Substitua a localização atual do  Voting Disk pelo diskgroup VD que criamos.

[root@clusterware2  ~]# crsctl replace votedisk +VD

Successful  addition of voting disk ae63f25b7bf24f69bf67ba85ea3897e5.
Successful  addition of voting disk 0d401ff1f3a74f0ebf358048d9ef0b93.
Successful  addition of voting disk 650707c4cf7f4f34bfd9c5f53a8d3d79.
Successful  deletion of voting disk 02aa40fc09384f14bf26cef30fca02b9.
Successful  deletion of voting disk 45b54bb316a84ff0bfec3c6faa4bc142.
Successful  deletion of voting disk 47a0e02aa9434fd2bf9dcac8ae2f12e3.

Successfully  replaced voting disk group with +VD.

CRS-4266:  Voting file(s) successfully replaced

[root@clusterware2  ~]# crsctl query css votedisk

##  STATE     File Universal Id                 File Name Disk group
--  -----     -----------------                ---------  ---------
1. ONLINE    ae63f25b7bf24f69bf67ba85ea3897e5 (/dev/oracleasm/disks/VD1) [VD]
2. ONLINE    0d401ff1f3a74f0ebf358048d9ef0b93 (/dev/oracleasm/disks/VD2) [VD]
3. ONLINE    650707c4cf7f4f34bfd9c5f53a8d3d79 (/dev/oracleasm/disks/VD3) [VD]

Located 3 voting disk(s).

Agora temos o Voting Disk no seu diskgroup exclusivo. Vamos fazer o procedimento para deixar o OCR na mesma situação.

[root@clusterware2  ~]# ocrcheck  

Status of Oracle Cluster Registry is as follows:           
          Version                  :          3           
          Total space (kbytes)     :     262120           
          Used space (kbytes)      :       2888           
          Available space (kbytes) :     259232           
          ID                       :  628337282           
          Device/File Name         :    +CONFIG                                                              

                                    Device/File integrity check  succeeded
                                    Device/File  not configured
                                    Device/File  not configured
                                    Device/File  not configured
                                    Device/File not  configured
       Cluster registry integrity check succeeded
       Logical corruption check succeeded  

[root@clusterware2  ~]# ocrconfig -add +OCR  

[root@clusterware2  ~]# ocrcheck  

Status of Oracle Cluster Registry is as follows:
          Version                  :           3           
          Total space (kbytes)     :      262120 
          Used space (kbytes)      :        2888
          Available space (kbytes) :      259232
          ID                       :   628337282           
          Device/File Name         :     +CONFIG

                                   Device/File  integrity check succeeded           

          Device/File Name         :        +OCR           

                                   Device/File  integrity check succeeded
                                   Device/File not configured
                                   Device/File not configured
                                   Device/File not configured
       Cluster registry integrity check succeeded
       Logical corruption check succeeded
[root@clusterware2  ~]# ocrconfig -delete +CONFIG  

[root@clusterware2  ~]# ocrcheck  

Status of Oracle Cluster Registry is as follows:
          Version                  :           3
          Total space (kbytes)     :      262120
          Used space (kbytes)      :        2888
          Available space (kbytes) :      259232
          ID                       :   628337282
          Device/File Name         :        +OCR

                                    Device/File  integrity check succeeded
                                    Device/File  not configured
                                    Device/File  not configured
                                    Device/File  not configured
                                    Device/File  not configured
       Cluster registry integrity check succeeded
       Logical corruption check succeeded

Se quiséssemos melhorar a redundância poderíamos manter o diskgroup CONFIG.

Como boa prática, utilize redundância no ASM e no storage para o OCR e o VD.

Franky Weber Faust atua como administrador de banco de dados Oracle e MySQL no PagSeguro, tem 26 anos, é graduado em Tecnologia em Bancos de Dados e iniciou sua carreira trabalhando num projeto internacional da Volkswagen com os bancos de dados DB2 da IBM, SQL Server da Microsoft e também com o Oracle e desde o início direcionou seus estudos para as tecnologias Oracle. É especialista em tecnologias de Alta Disponibilidade como RAC, Dataguard e GoldenGate e compartilha seus conhecimentos no blog loredata.com.br. Possui as certificações OCE SQL, OCA 11g, OCP 12c, OCS RAC 12c e OCS Linux 6.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.