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.