Oracle RAC em VMWare caindo com ORA-27072: File I/O error

This post is also available in: English

Durante 3 meses, tive problemas constantes de nós de uma instalação Oracle RAC caindo constantemente. O sistema era o seguinte:

  • S.O: Red Hat Enterprise Linux Server release 5.8 (Tikanga) - x86_64
  • Kernel: 2.6.18-308.16.1.el5
  • VMWare: VMware ESXi 5.0
  • Oracle 11.2.0.3 PSU 6
  • Oracle homes individuais e discos compartilhados para o RAC via VMFS

Era aleatório, o nó caia e voltava. As vezes a máquina reiniciava pelos processos do Oracle.
Mesmo após reinstação e atualização do Oracle para a última versão e aplicação do último PSU, o problema continuava.

Os logs do alerta e trace do oracle apresentavam o seguinte erro:

ORA-27072: File I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 4
Additional information: 657408
Additional information: -1
WARNING: Read Failed. group:1 disk:0 AU:321 offset:0 size:4096
path:/dev/oracleasm/disks/DATA01
incarnation:0xe968aff8 synchronous result:'I/O error'
subsys:System iop:0x7fb195be9000 bufp:0x7fb196117000 osderr:0x0 osderr1:0x0
ERROR: failed to read ACD block gn=1 blk=10752
ORA-15080: synchronous I/O operation to a disk failed
WARNING: LGWR failed to read ACDC for diskgroup 1 thread 2
WARNING: disk offlining resulting in I/O error
WARNING: Write Failed. group:1 disk:0 AU:321 offset:0 size:4096
path:/dev/oracleasm/disks/DATA01
incarnation:0xe968aff8 asynchronous result:'I/O error'
subsys:System iop:0x7fb195be9000 bufp:0x647fd000 osderr:0x534b4950 osderr1:0x0

Pesquisando mais a fundo, encontrei o seguinte erro no log do Redhat /var/log/messages:

Jul 6 19:45:58 oraclesrv01 kernel: sd 1:0:0:0: reservation conflict
Jul 6 19:45:58 oraclesrv01 kernel: sd 1:0:0:0: Unhandled error code
Jul 6 19:45:58 oraclesrv01 kernel: sd 1:0:0:0: SCSI error: return code = 0x00110018
Jul 6 19:45:58 oraclesrv01 kernel: Result: hostbyte=invalid driverbyte=DRIVER_OK,SUGGEST_OK

Como solução, tentei:

  • Montar discos novos, mas o problema se mantém.
  • Separar os dados 1 disco DATA e a configuração do cluster e votefiles em 3 discos OCRVOTE.

Nada resolveu. Depois de pesquisar bastante, finalmente descobri a causa do erro.

O VMFS é um sistema de arquivos de cluster que desativa (por padrão) que múltiplas máquinas virtuais abrem e leiam o mesmo disco virtual (arquivo .vmdk). Isso previne que mais de uma máquina virtua acesse inadvertidamente o mesmo arquivo .vmdk.

A opção "multi-writer" permite que os discos VMFS sejam compartilhados por múltiplas máquinas virtuais. Essa opção é usada para permitir "fault tolerance" no VMWare, em casos que os discos precisam ser lidos e escritos simultaneamente.

O artigo do link abaixo ensina o passo a passo para ativar esta opção:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1034165
Disabling simultaneous write protection provided by VMFS using the multi-writer flag (1034165)

Resumidamente, o que precisa ser feito é editar o arquivo ".vmx" que define as configurações da máquina virtual e adicionar para cada disco a ser compartilhado a seguinte entrada:

scsiX:Y.sharing = "multi-writer"

Se forem 4 discos, as entradas seriam as seguintes:

scsi1:0.sharing = "multi-writer"
scsi1:1.sharing = "multi-writer"
scsi1:2.sharing = "multi-writer"
scsi1:3.sharing = "multi-writer"

Pronto! Agora o seu oracle irá parar de dar error inexplicáveis.

Gostou? Não deixe de comentar ou deixar um 👍!

Deixe um comentário

Seu e-mail não será publicado.