Série de artigos sobre Instalação do Oracle RAC:
Instalação do Oracle RAC 10g Release 2 – Parte 1: Pré-requisitos
Instalação do Oracle RAC 10g Release 2 – Parte 2: Criação da VM
Instalação do Oracle RAC 10g Release 2 – Parte 3: Instalação do Linux
Instalação do Oracle RAC 10g Release 2 – Parte 4: Configuração do Linux
Instalação do Oracle RAC 10g Release 2 – Parte 5: Clonagem da VM
===================================
Olá pessoal!
Falta pouco para que iniciemos a instalação dos softwares Oracle que criarão o nosso ambiente Oracle RAC!
Neste artigo de hoje, veremos os seguintes itens:
- Criação de equivalência de usuários para acesso SSH;
- Particionamento dos discos do storage;
- Marcação das partições dos discos do storage como discos ASM;
- Criação de raw devices;
- Criação de block devices.
Vamos lá!
Existem duas formas de se instalar o Oracle Clusterware e o Oracle Database num ambiente clusterizado:
- Instalação dos binários (Oracle Home’s) em file system clusterizado;
- Instalação dos binários (Oracle Home’s) em file system local.
Eu particularmente não gosto de instalar os Oracle Home’s em file system clusterizado. Isso porque para a aplicação de patches, incidência de bugs no produto de clusterização de file systems, ou qualquer problema que fuja às mãos do DBA, afeterá TODOS os nós do cluster, já que o Oracle Home enxergado por um nó será o mesmo enxergado pelos outros. Isso acontece porque fisicamente só há um Oracle Home, armazenado num file system clusterizado onde é permitido montar esse mesmo file system em diversos nós com estado de read/write.
Eu sempre faço a instalação dos Oracle Home’s em file systems locais. Motivo: a aplicação de patches se torna individualizada, se o patch for do tipo “rolling”, apenas um nó será interrompido na aplicação do patch, ou seja, o ambiente de banco de dados RAC continuará disponível para os usuários através dos outros nós. Mas não é só pela aplicação dos patches que eu escolho a instalação local. O principal motivo é que cada máquina terá sua cópia de Oracle Home, desta forma, se uma máquina sofrer algum tipo de problema de hardware ou software, o cluster continuará ativo com outros nós. Já que cada nó enxergará o seu Oracle Home.
Pois bem, no entanto, como é feita a instalação dos produtos em file systems locais?
É simples! A instalação dos produtos Oracle serão disparadas a partir de um único nó. O Oracle Universal Installer (OUI) criará o Oracle Home com seus arquivos e subdiretórios necessários, após o “relink” dos binários, o próprio OUI disparará uma cópia desse Oracle Home para os outros nós. Para que isso aconteça, é necessário que o usuário oracle do primeiro servidor, consiga copiar os arquivos para o segundo servidor sem a necessidade de informar senha (já que isso é feito automaticamente). Para que isso seja realizado, criamos o que chamamos de “equivalência de usuário”, onde, o usuário oracle do servidor mvrac1 poderá copiar qualquer arquivo para o servidor mvrac2, considerando que o usuário oracle no servidor mvrac2 tenha os privilégios necessários nos diretórios de destino da cópia, e vice-versa. Quando a equivalência de usuários está criada, qualquer ação de cópia ou login remoto, é feita sem a solicitação de senha pelo sistema operacional.
Bom, a equivalência de usuário poderá ocorrer através de duas maneiras:
- rsh/rcp;
- ssh/scp.
A configuração por rsh/rcp é mais simples de ser feita, no entanto, não é a recomendada, já que não é segura. Já no ssh/scp, os dados são enviados pela rede de forma criptografada, o que aumenta a segurança. Inclusive, em muitas empresas, as portas utilizadas em rsh/rcp nem são liberadas no firewall por motivos de segurança. A configuração do ssh/scp é um pouco mais chata, mas é a que veremos aqui por ser a mais segura.
Para realizar a configuração da equivalência de usuários para acesso via SSH, é necessário criar as chaves SSH de acesso ao usuário. Os passos são esses:
- Criação das chaves do usuário oracle do servidor mvrac1;
- Criação das chaves do usuário oracle do servidor mvrac2;
- Criação de um arquivo de chaves autorizadas a acesso, contendo as chaves dos usuários oracle dos servidores mvrac1 e mvrac2. Esse arquivo será utilizado nos dois servidores;
- Inclusão dos servidores mvrac1 e mvrac2 num arquivo de hosts conhecidos para não mais confirmar o acesso via SSH e isso ser feito automaticamente.
Então, vamos para o primeiro passo, criar as chaves do usuário oracle dos servidores mvrac1 e mvrac2. Com o usuário oracle a partir do servidor mvrac1:
[oracle@mvrac1 ~]$ cd /home/oracle [oracle@mvrac1 ~]$ mkdir .ssh [oracle@mvrac1 ~]$ cd .ssh [oracle@mvrac1 .ssh]$ ssh-keygen -t dsa
Pressionar [ENTER] até voltar para o shell.
[oracle@mvrac1 .ssh]$ ssh-keygen -t rsa
Pressionar [ENTER] até voltar para o shell.
O mesmo precisa ser feito com o usuário oracle no servidor mvrac2:
[oracle@mvrac2 ~]$ cd /home/oracle [oracle@mvrac2 ~]$ mkdir .ssh [oracle@mvrac2 ~]$ cd .ssh [oracle@mvrac2 .ssh]$ ssh-keygen -t dsa
Pressionar [ENTER] até voltar para o shell.
[oracle@mvrac2 .ssh]$ ssh-keygen -t rsa
Pressionar [ENTER] até voltar para o shell.
Agora vamos criar o arquivo com as chaves SSH autorizadas a acessar os servidores. Dentro desse arquivo, haverá o conteúdo das chaves públicas. Começando com o usuário oracle no servidor mvrac1:
[oracle@mvrac1 .ssh]$ cat *.pub >> authorized_keys [oracle@mvrac1 .ssh]$ ls -l authorized_keys -rw-r--r-- 1 oracle oinstall 1036 Feb 20 10:24 authorized_keys
Observem que o arquivo authorized_keys tem 1036 bytes de tamanho, e, por enquanto, só existe no servidor mvrac1. Agora, colocaremos dentro desse mesmo arquivo, o conteúdo das chaves públicas do usuário oracle do servidor mvrac2:
[oracle@mvrac1 .ssh]$ ssh mvrac2 cat /home/oracle/.ssh/*.pub >> authorized_keys The authenticity of host 'mvrac2 (172.23.10.12)' can't be established. RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e. Are you sure you want to continue connecting (yes/no)? yes
Observem que eu tive que confirmar com yes e em seguida, terei que colocar a senha do usuário oracle do servidor mvrac2:
oracle@mvrac2's password:
Vamos verificar o tamanho do arquivo?
[oracle@mvrac1 .ssh]$ ls -l authorized_keys -rw-r--r-- 1 oracle oinstall 2072 Feb 20 10:26 authorized_keys
Ele agora tem 2072 bytes. Mas, ainda existe somente no servidor mvrac1. Devemos copiá-lo para o servidor mvrac2, nesse mesmo diretório, /home/oracle/.ssh, e, como a equivalência de usuários ainda não existe nos dois servidores (pela falta do arquivo authorized_keys no servidor mvrac2), terei que fornecer a senha do usuário oracle mais uma vez:
[oracle@mvrac1 .ssh]$ scp -p authorized_keys mvrac2:`pwd` oracle@mvrac2's password: authorized_keys 100% 2072 2.0KB/s 00:00
Bom, como no servidor mvrac1 eu estava no diretório /home/oracle/.ssh. E o arquivo authorized_keys tem que ir para o mesmo diretório no servidor mvrac2, observem que eu usei um comando do Linux dentro do comando scp. O comando foi o pwd. E sempre que quisermos usar um comando dentro de outro comando, deveremos colocá-lo entre crases: `pwd`. Dessa forma, ele executará o comando pwd no servidor mvrac1 e com base na saída do comando (/home/oracle/.ssh), jogará o arquivo dentro desse diretório no outro servidor. Se o diretório não existisse, teríamos um erro.
Vamos testar para ver se a equivalência de usuários está funcionando?
The authenticity of host 'mvrac2.viniciusdba.com.br (172.23.10.12)' can't be established. RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'mvrac2.viniciusdba.com.br' (RSA) to the list of known hosts. Fri Feb 19 11:37:38 BRST 2010
Observem que eu tive que digitar yes. Mas não precisei mais digitar a senha. Porque?
Não precisei digitar mais a senha porque a equivalência de usuários funcionou. Mas, o host mvrac2.viniciusdba.com.br ainda não é um host conhecido para o SSH. Dessa forma, no servidor mvrac1, com o usuário oracle, deveremos fazer o seguinte:
ssh mvrac1 date ssh mvrac1-priv date ssh mvrac1.viniciusdba.com.br date ssh mvrac1-priv.viniciusdba.com.br date ssh mvrac2 date ssh mvrac2-priv date ssh mvrac2.viniciusdba.com.br date ssh mvrac2-priv.viniciusdba.com.br date
Em todos as saídas, deveremos sempre confirmar com yes:
Are you sure you want to continue connecting (yes/no)? yes
Vocês viram que mesmo estando no servidor mvrac1, eu preciso fazer o ssh para ele mesmo. Isso é necessário porque quando o Oracle Universal Installer for confirmar se a equivalência de usuário está funcionando, ele fará isso também.
Quando fizer isso em todos os servidores, para confirmar se está tudo OK, basta refazer o comando:
ssh mvrac1 date ssh mvrac1-priv date ssh mvrac1.viniciusdba.com.br date ssh mvrac1-priv.viniciusdba.com.br date ssh mvrac2 date ssh mvrac2-priv date ssh mvrac2.viniciusdba.com.br date ssh mvrac2-priv.viniciusdba.com.br date
Ele não deverá mais pedir confirmação para nenhum host:
[oracle@mvrac1 .ssh]$ ssh mvrac1 date Sat Feb 20 11:38:59 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac1-priv date Sat Feb 20 11:39:00 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac1.viniciusdba.com.br date Sat Feb 20 11:39:00 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac1-priv.viniciusdba.com.br date Sat Feb 20 11:39:01 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac2 date Sat Feb 20 11:39:01 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac2-priv date Sat Feb 20 11:39:02 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac2.viniciusdba.com.br date Sat Feb 20 11:39:02 BRST 2010 [oracle@mvrac1 .ssh]$ ssh mvrac2-priv.viniciusdba.com.br date Sat Feb 20 11:39:03 BRST 2010
Isso criará no servidor mvrac1, dentro do diretório corrente, /home/oracle/.ssh, o arquivo known_hosts (hosts conhecidos):
[oracle@mvrac1 .ssh]$ ls -l known_hosts -rw-r--r-- 1 oracle oinstall 3246 Feb 20 10:33 known_hosts
Agora basta copiar esse arquivo para o outro servidor:
[oracle@mvrac1 .ssh]$ scp -p known_hosts mvrac2:`pwd` known_hosts 100% 3246 3.2KB/s 00:00
Pronto! Equivalência de usuários devidamente configurada!
Agora iremos para o particionamento de discos.
Como vocês se lembram, temos 4 discos disponibilizados:
- 1 disco de 12GB (disco local);
- 3 discos de 5GB (discos storage).
Não mexeremos nas partições do disco local, pois essas já foram configuradas durante a instalação do Linux.
Temos 3 discos de 5GB. Para instalarmos o Oracle RAC precisamos do seguinte:
- 3 partições para armazenar Voting Disk;
- 2 partições para armazenar OCR;
- 3 partições que serão os discos ASM.
Entrarei em mais detalhes sobre o Voting Disk e o OCR no artigo apropriado.
Até o Red Hat Enterprise Linux 4, geralmente se usava raw devices para o Voting Disk e o OCR. Os raw devices, são dispositivos brutos de caracter e não são buferizados. Porém, no kernel 2.6 o raw device foi depreciado, e no Red Hat Enterprise Linux 5 o serviço rawdevices nem existe mais. Por esse motivo, é necessário que o OCR e o Voting Disk deixem de usar raw devices e passem a usar block devices. Os block devices são dispositivos brutos de nível de acesso a blocos. Além disso, são buferizados. Porém, não há diferenças em desempenho (Metalink Note: 401132.1 – How to install Oracle Clusterware with shared storage on block devices).
Mas, o Oracle Universal Installer do Oracle Clusterware 10.2.0.1 não consegue determinar se os block devices estão compartilhados entre os nós (premissa para que se tenha um ambiente clusterizado), isso acontece porque quando o produto Clusterware 10.2.0.1 foi lançado, ainda não se usava block devices para esse fim. Sendo assim, a instalação precisa ser feita apontando para os dispositivos raw devices, e somente após a aplicação do patchset, que reaponteramos para os block devices. Mas, se eu comentei que os raw devices foram depreciados, como é que instalaremos utilizando esse tipo de dispositivo?
Usaremos um workaround para criar os dispositivos raw devices no RHEL5. Porém, como se trata de um workaround, devemos partir para a solução definitiva o quanto antes, a fim de evitar uma possível incidência de bugs envolvendo a utilização de raw devices. Até mesmo se encontrarmos algum bug envolvendo raw devices, tanto a Oracle quanto a Red Hat citarão que estamos utilizando um cenário que “não é mais certificado”, já que foi anunciada a depreciação desse tipo de dispositivo. Sendo assim, a tabela de partições será a seguinte:
- 3 partições para armazenar Voting Disk em raw device de 256MB cada;
- 3 partições para armazenar Voting Disk em block device de 256MB cada;
- 2 partições para armazenar OCR em raw device de 256MB cada;
- 2 partições para armazenar OCR em block device de 256MB cada;
- 3 partições que serão os discos ASM (o restante livre dos discos).
Vamos consultar os discos existentes no servidor mvrac1? Como root:
[root@mvrac1 oracle]# fdisk -l Disk /dev/sda: 12.8 GB, 12884901888 bytes 255 heads, 63 sectors/track, 1566 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 1435 11526606 83 Linux /dev/sda2 1436 1566 1052257+ 82 Linux swap / Solaris Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Disk /dev/sdc: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Disk /dev/sdd: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
O disco sda é o disco local do servidor mvrac1 (12GB). Já, os discos sdb, sdc e sdd são os discos do storage.
Vamos verificar se esses discos do storage também estão no servidor mvrac2?
[root@mvrac2 oracle]# fdisk -l Disk /dev/sda: 12.8 GB, 12884901888 bytes 255 heads, 63 sectors/track, 1566 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 1435 11526606 83 Linux /dev/sda2 1436 1566 1052257+ 82 Linux swap / Solaris Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Disk /dev/sdc: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Disk /dev/sdd: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
Como eu preciso criar mais de 4 partições por disco, e no Linux só é possível criar 4 partições primárias, criaremos então uma partição estendida com o tamanho integral do disco, e depois criaremos as partições lógicas para atender as nossas necessidades. Vamos ver como será exatamente a tabela de partições?
Como estamos vendo na tabela de partições acima, os discos sdb e sdc terão 5 partições lógicas e 1 partição extendida. Apenas para manter o padrão de nomenclatura, o disco sdd também terá 1 partição extendida e 3 partições lógicas. Bom, sabendo qual será a tabela de partições, vamos particionar?
Vamos começar pelo disco sdb, como root no servidor mvrac1:
[root@mvrac1 oracle]# fdisk /dev/sdb
Será solicitado o comando: criaremos a partição, então digitaremos a tecla [n] de new partition e depois pressionaremos a tecla [ENTER]:
Command (m for help): n
Em seguida, deveremos especificar se será uma partição estendida [e] ou primária [p]. Nesse caso, criaremos uma partição estendida, portanto, digitaremos a tecla [e] e depois a tecla [ENTER]:
Command action e extended p primary partition (1-4) e
Deveremos qual partição será (de 1 a 4), nesse caso, escolheremos a partição 1:
Partition number (1-4): 1
Em seguida, deveremos especificar o tamanho da partição, como é a partição estendida, pegará todo o tamanho do disco, basta pressionar [ENTER] para o primeiro cilindro, e [ENTER] para o último cilindro:
First cylinder (1-652, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): Using default value 652
Maravilha! Agora precisamos criar as partições lógicas, automaticamente, serão atribuídos números a partir de 5. Criar a nova partição, pressionar a tecla [n] e pressionar [ENTER]:
Command (m for help): n
A partição agora será do tipo lógica, basta pressionar a tecla [l] e depois [ENTER]:
Command action l logical (5 or over) p primary partition (1-4) l
Essa partição terá o tamanho de 256MB, portanto, basta pressionar [ENTER] no primeiro cilindro e no último cilindro, digitar +256M e em seguida pressionar [ENTER]:
First cylinder (1-652, default 1): 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M
Precisamos criar mais 3 partições de 256MB (colocarei aqui todos os comandos num único bloco):
Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (33-652, default 33): Using default value 33 Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (65-652, default 65): Using default value 65 Last cylinder or +size or +sizeM or +sizeK (65-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (97-652, default 97): Using default value 97 Last cylinder or +size or +sizeM or +sizeK (97-652, default 652): +256M
Agora precisamos criar a última partição lógica desse disco, basta pressionar [n], depois [ENTER], na hora de especificar o tamanho, basta pressionar [ENTER] para o cilindro inicial e o cilindro final:
Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (129-652, default 129): Using default value 129 Last cylinder or +size or +sizeM or +sizeK (129-652, default 652): Using default value 652
Para saber se a tabela de partições está correta, basta pressionar [p] e depois [ENTER]:
Command (m for help): p Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 652 5237158+ 5 Extended /dev/sdb5 1 32 256977 83 Linux /dev/sdb6 33 64 257008+ 83 Linux /dev/sdb7 65 96 257008+ 83 Linux /dev/sdb8 97 128 257008+ 83 Linux /dev/sdb9 129 652 4208998+ 83 Linux
Como está correto, temos que gravar a tabela e partições, basta pressionar [w] e depois [ENTER]:
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Como se trata de um disco compartilhado entre os servidores, vamos ver se ele foi também particionado no servidor mvrac2? Como root no servidor mvrac2:
[root@mvrac2 oracle]# fdisk -l /dev/sdb Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 652 5237158+ 5 Extended /dev/sdb5 1 32 256977 83 Linux /dev/sdb6 33 64 257008+ 83 Linux /dev/sdb7 65 96 257008+ 83 Linux /dev/sdb8 97 128 257008+ 83 Linux /dev/sdb9 129 652 4208998+ 83 Linux
As partições apareceram no servidor mvrac2! Mas, como o comando foi feito a partir do servidor mvrac1, os devices de cada partição ainda não foram criados no servidor mvrac2 (no diretório /dev/). Há duas formas de criarmos esses devices das partições no servidor mvrac2: reiniciando o servidor, ou, como root:
[root@mvrac2 oracle]# fdisk /dev/sdb
E gravar a tabela de partições, pressionando a tecla [w] e depois [ENTER]:
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Pronto! O disco /dev/sdb foi particionado com sucesso nos 2 servidores. O disco /dev/sdc terá a mesma estrutura de partições que o disco /dev/sdb, colocarei o comando num único bloco:
[root@mvrac1 oracle]# fdisk /dev/sdc Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 1 First cylinder (1-652, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): Using default value 652 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-652, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (33-652, default 33): Using default value 33 Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (65-652, default 65): Using default value 65 Last cylinder or +size or +sizeM or +sizeK (65-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (97-652, default 97): Using default value 97 Last cylinder or +size or +sizeM or +sizeK (97-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (129-652, default 129): Using default value 129 Last cylinder or +size or +sizeM or +sizeK (129-652, default 652): Using default value 652 Command (m for help): p Disk /dev/sdc: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 652 5237158+ 5 Extended /dev/sdc5 1 32 256977 83 Linux /dev/sdc6 33 64 257008+ 83 Linux /dev/sdc7 65 96 257008+ 83 Linux /dev/sdc8 97 128 257008+ 83 Linux /dev/sdc9 129 652 4208998+ 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Lembrando que no servidor mvrac2 esse disco precisa ter os devices das partições criadas no diretório /dev:
[root@mvrac2 oracle]# fdisk /dev/sdc Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
O disco /dev/sdd terá 1 partição estendida com o tamanho total do disco, 2 partições de 256MB e 1 partição com o restante de espaço disponível no disco (4,5GB):
[root@mvrac1 oracle]# fdisk /dev/sdd Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 1 First cylinder (1-652, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): Using default value 652 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-652, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (33-652, default 33): Using default value 33 Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (65-652, default 65): Using default value 65 Last cylinder or +size or +sizeM or +sizeK (65-652, default 652): Using default value 652 Command (m for help): p Disk /dev/sdd: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdd1 1 652 5237158+ 5 Extended /dev/sdd5 1 32 256977 83 Linux /dev/sdd6 33 64 257008+ 83 Linux /dev/sdd7 65 652 4723078+ 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
No servidor mvrac2 esse disco precisa ter os devices das partições criadas no diretório /dev:
[root@mvrac2 oracle]# fdisk /dev/sdd Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
As partições foram criadas!
Agora, marcaremos como discos de ASM, as partições reservadas para o ASM. Lembrando que as partições reservadas para o ASM são:
- /dev/sdb9: 4GB;
- /dev/sdc9: 4GB;
- /dev/sdd7: 4,5GB.
Para marcarmos as partições como discos ASM, basta usarmos a ASMLib. A nomenclatura padrão será: ASMDISKx. Como root, no servidor mvrac1:
[root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdb9 Marking disk "ASMDISK1" as an ASM disk: [ OK ] [root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK2 /dev/sdc9 Marking disk "ASMDISK2" as an ASM disk: [ OK ] [root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK3 /dev/sdd7 Marking disk "ASMDISK3" as an ASM disk: [ OK ]
Para verificar se os discos foram criados, ainda no servidor mvrac1:
[root@mvrac1 oracle]# /etc/init.d/oracleasm listdisks ASMDISK1 ASMDISK2 ASMDISK3
Agora, precisamos verificar se o servidor mvrac2 enxergará os discos de ASM criados. Antes, precisamos fazer um scan dos discos, no momento do scan, a ASMLib lerá o cabeçalho de todas as partições de disco do servidor:
[root@mvrac2 oracle]# /etc/init.d/oracleasm scandisks Scanning the system for Oracle ASMLib disks: [ OK ]
Agora precisamos verificar se os discos foram realmente enxergados:
[root@mvrac2 oracle]# /etc/init.d/oracleasm listdisks ASMDISK1 ASMDISK2 ASMDISK3
Pronto! Discos do ASM criados!
Agora falta apenas criar os raw e block devices. Usaremos o utilitário chamado UDEV para isso. Para criarmos esses dispositivos, criaremos arquivos com as regras necessárias no diretório /etc/udev/rules.d. O arquivo precisa ter a extensão .rules.
Criaremos primeiro o arquivo que criará os raw devices:
[root@mvrac1 oracle]# cd /etc/udev/rules.d/ [root@mvrac1 oracle]# vi 62-oracle-raw.rules
O conteúdo do arquivo 62-oracle-raw.rules será:
ACTION=="add", KERNEL=="sdb5", RUN+="/bin/raw /dev/raw/raw1 %N" ACTION=="add", KERNEL=="sdb7", RUN+="/bin/raw /dev/raw/raw2 %N" ACTION=="add", KERNEL=="sdc5", RUN+="/bin/raw /dev/raw/raw3 %N" ACTION=="add", KERNEL=="sdc7", RUN+="/bin/raw /dev/raw/raw4 %N" ACTION=="add", KERNEL=="sdd5", RUN+="/bin/raw /dev/raw/raw5 %N" KERNEL=="raw[1-5]*", OWNER="oracle", GROUP="dba", MODE="640"
Agora criaremos o arquivo que criará os block devices:
[root@mvrac1 oracle]# vi 63-oracle-block.rules
O conteúdo do arquivo 63-oracle-block.rules será:
KERNEL=="sdb6", NAME="ocr1", OWNER="root", GROUP="dba", MODE="0640" KERNEL=="sdb8", NAME="voting1", OWNER="oracle", GROUP="dba", MODE="0640" KERNEL=="sdc6", NAME="ocr2", OWNER="root", GROUP="dba", MODE="0640" KERNEL=="sdc8", NAME="voting2", OWNER="oracle", GROUP="dba", MODE="0640" KERNEL=="sdd6", NAME="voting3",OWNER="oracle",GROUP="dba", MODE="0640"
Após isso, faremos o restart do serviço udev:
[root@mvrac1 rules.d]# start_udev Starting udev: [ OK ]
Agora verificaremos se os devices foram criados:
[root@mvrac1 rules.d]# ls -l /dev/ocr* /dev/voting* /dev/raw/raw* brw-r----- 1 oracle dba 8, 22 Feb 20 17:34 /dev/ocr1 brw-r----- 1 oracle dba 8, 38 Feb 20 17:35 /dev/ocr2 crw-r----- 1 oracle dba 162, 1 Feb 20 17:36 /dev/raw/raw1 crw-r----- 1 oracle dba 162, 2 Feb 20 17:36 /dev/raw/raw2 crw-r----- 1 oracle dba 162, 3 Feb 20 17:36 /dev/raw/raw3 crw-r----- 1 oracle dba 162, 4 Feb 20 17:36 /dev/raw/raw4 crw-r----- 1 oracle dba 162, 5 Feb 20 17:36 /dev/raw/raw5 brw-r----- 1 root dba 8, 24 Feb 20 17:34 /dev/voting1 brw-r----- 1 root dba 8, 40 Feb 20 17:35 /dev/voting2 brw-r----- 1 oracle dba 8, 54 Feb 20 17:35 /dev/voting3
Os dispositivos foram criados!
Agora precisamos copiar esses arquivos para o servidor mvrac2:
[root@mvrac1 rules.d]# scp -p *ora*.rules mvrac2:`pwd` The authenticity of host 'mvrac2 (172.23.10.12)' can't be established. RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'mvrac2,172.23.10.12' (RSA) to the list of known hosts. root@mvrac2's password: 62-oracle-raw.rules 100% 386 0.4KB/s 00:00 63-oracle-block.rules 100% 359 0.4KB/s 00:00
Teremos que confirmar com yes, e depois digitar a senha do usuário root. Isso acontece porque criamos a equivalência de usuário para o usuário oracle. O root não precisa ter a equivalência de usuário criada.
Após copiar os arquivos para o servidor mvrac2, teremos que reiniciar o serviço udev no servidor mvrac2:
[root@mvrac2 rules.d]# start_udev Starting udev: [ OK ]
Agora verificaremos se os devices foram criados:
Agora verificaremos se os devices foram criados:
[root@mvrac2 rules.d]# ls -l /dev/ocr* /dev/voting* /dev/raw/raw* brw-r----- 1 oracle dba 8, 22 Feb 20 17:34 /dev/ocr1 brw-r----- 1 oracle dba 8, 38 Feb 20 17:35 /dev/ocr2 crw-r----- 1 oracle dba 162, 1 Feb 20 17:36 /dev/raw/raw1 crw-r----- 1 oracle dba 162, 2 Feb 20 17:36 /dev/raw/raw2 crw-r----- 1 oracle dba 162, 3 Feb 20 17:36 /dev/raw/raw3 crw-r----- 1 oracle dba 162, 4 Feb 20 17:36 /dev/raw/raw4 crw-r----- 1 oracle dba 162, 5 Feb 20 17:36 /dev/raw/raw5 brw-r----- 1 root dba 8, 24 Feb 20 17:34 /dev/voting1 brw-r----- 1 root dba 8, 40 Feb 20 17:35 /dev/voting2 brw-r----- 1 oracle dba 8, 54 Feb 20 17:35 /dev/voting3
Pronto! Devices criados!
Nesse momento estamos prontos para iniciar a instalação dos produtos Oracle!
Nos veremos no próximo post, semana que vem!
Um abraço!
Vinicius
——————————-
PS:
Observação:
Apenas para ficar claro, sobre as partições de discos, num ambiente corporativo eu costumo pedir o seguinte:
- 1 disco (LUN) de 2GB para utilizar as partições raw devices (esse disco posteriormente será eliminado);
- 2 discos (LUN’s) de 512MB para utilizar as partições block devices;
- 1 disco (LUN) de 256MB para utilizar a partição block device;
- Quantidade “X de discos para ASM, aí vai depender do tamanho do banco de dados.
Related posts
17 Comments
Deixe um comentário Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Disclaimer
Minhas postagens refletem minhas próprias opiniões e não representam necessariamente as opiniões do meu empregador, a Accenture.
Vinicius,
Parabéns por mais este trabalho e tanta dedicação.
Tudo comentado exatamente como deve ser sem pular sequer um detalhe.
Muito grato pela contribuição.
Abraço
Obrigado, Alexander!
Continue acompanhando o blog, pois depois da instalação do RAC, uma outra série se iniciará: administração do RAC.
Abraços!
[…] 4: Configuração do Linux Instalação do Oracle RAC 10g Release 2 – Parte 5: Clonagem da VM Instalação do Oracle RAC 10g Release 2 – Parte 6: Pré-instalação do RAC Instalação do Oracle RAC 10g Release 2 – Parte 7: Instalação do Oracle Clusterware […]
Grande Vinicius,
Parabensss pelos artigos sobre RAC…
Pode me ajudar com uma dúvida ?
No curso oficial da ORacle e ate mesmo em sua documentacao, ela nos diz para
apos a instalação do cluster, iniciarmos a instalacao dos binarios ASM em um
HOME proprio (ASM_HOME) e somente em seguida, realizarmos a instalacao do
binario do banco no ORACLE_HOME…
Mas, checando em alguns sites e no proprio ORACLE-BASE, vejo alguns tutoriais
realizando a instalacao do software Oracle em se ORACLE_HOME e partindo direto
para a criacao da instancia ASM, sem te-la devidamente instalada em seu
ASM_HOME…é ate um procedimento mais facil mas se instalado desta forma, tudo
relativo ao ASM ficara no ORACLE_HOME ? Este procedimento segue o padrao OFA ?
Um outro detalhe é quanto as areas de dump utilizadas pelo ASM…quando
realizamos desta maneira, onde esta area é gerada ?
Abração
Olá Fabio,
Na verdade, não se trata de seguir ou não o OFA.
Utilizar um ORACLE_HOME separado para o ASM se trata de uma melhor prática, já que caso se necessite aplicar algum patch, ou no OH do BD, ou no OH do ASM, isso será feito sem interferir no outro OH.
No 11gR2 isso foi totalmente modificado, já que o ASM não roda mais embaixo do OH do BD Oracle, e sim embaixo do OH do Grid Infrastructure (que para a gente no 10g é o Clusterware). Portanto, no 11gR2, têm-se apenas 2 estruturas de diretório:
OH do BD;
OH do Grid.
Sobre as áreas de dump, no 10g ele também fica embaixo do ORACLE_BASE: $ORACLE_BASE/admin/BD e $ORACLE_BASE/admin/+ASMn.
No 11g ele segue os mesmos “moldes”, ficando embaixo do ORACLE_BASE.
Abraços!
Oi Vinicius,
Por favor me explica uma coisa, estou neste tópico e acabei de executar os comandos para fazer a equivalencia de usuarios, MAS quando eu particiono os discos e vou lá no servidor mvrac2 para ver se esta igual o servidor mvrac1, com o comando fdisk -l /dev/sdb não tem nada feito, esta sem particionamento algum. Minha duvida é a seguinte, posso dar continuidade tranquilamente mesmo acontecendo isto, ou se eu insistir e criar manualmente TAMBEM as partições no servidor mvrac2 futuramente vai dar problema? Grato desde já.
Obs: a equivalencia apresentou estar tudo ok é só nesta parte que eu estou tendo problemas e estou usando TODOS os pré-requisitos que vc esta usando ate mesmo o S.O.
Olá Eduardo,
Você customizou o arquivo VMX da segunda máquina virtual? Isso geralmente ocorre quando há um erro no arquivo da segunda máquina virtual, onde ela não encontra os discos compartilhados.
Fala Vinicius (Upando o post…hehe)
Primeiramente parabéns pelos posts!!Muito bom mesmo.
Estou seguindo fielmente e tudo indo certo, porém na hora do /etc/init.d/oracleasm listdisks ele não listou os discos da maquina2 criados na maquina1. Parte de equivalencia foi tudo beleza…O arquivo VMX eu alterei no momento do clone da VM….sabe o que pode ser por não aparecer os disks na maquina2?
Michel,
Você tentou fazer um /etc/init.d/oracleasm scandisks antes?
Além disso, você particionou o disco de um lado e viu a partição sendo alterada do outro? Isso já demonstra que o disco que está trabalhando, é exatamente o mesmo para ambas as máquinas!
Abraços
Vinicius
olá vinicius,
o diretorio raw nao exite em /dev, terei que direcionar para outro diretorio?
Olá Liomar, não é necessário.
Se você configurar os arquivos de configuração corretamente, quando der o “start_udev” ele criará o diretório raw em /dev automaticamente.
Abraços
Vinicius
Vinícius,
Entendi tudo blz no seu artigo, mas fiquei com uma pulga atrás da orelha em relação a uma coisa. No artigo http://www.oracle-base.com/articles/linux/UdevScsiRulesConfigurationInOracleLinux5.php o autor preocupa-se em mapear exatamente os mesmos discos, não importando a ordem que o sistema operacional o reconheça. Quando você coloca uma regra do tipo
ACTION==”add”, KERNEL==”sdb5″, RUN+=”/bin/raw /dev/raw/raw1 %N”, como você garante que o sdb5 não vai se tornar sdc5 num próximo boot? E mais, o que vai acontecer ser um disco desses sumir/queimar? Afinal fazemos o que fazemos quase sempre nos preparando para o pior. Com certeza vou fazer esse teste no meu ambiente de testes, mas seria bom ouvir alguém experiente.
Abraço
Leonardo,
Eu nunca peguei este problema.
O que já peguei é num nó ser o sdc e no outro ser o sdf. Neste caso eu coloquei em cada servidor um arquivo de regras apontando para os devices corretos.
E como eu descobri isso?
Quando particionei o device sdc no nó 1, dei um fdisk -l no nó 2 e o sdf apareceu particionado… com isso fui fazendo o relacionamento entre os discos e ficou fácil identificar.
Sobre no próximo boot mudar a ordem, como te disse, nunca peguei… talvez seja válido usar o que o artigo do Oracle-Base cita.
Se queimar meu caro, acontecerá a mesma coisa que aconteceria com qualquer device, com udev ou não. Se você tiver mais de um voting disk, maravilha. Assim como o OCR. Fica fácil criar o voting3 apontando para um device íntegro. Depois disso, bastaria copiar bloco-a-bloco, através do dd, de um voting disk válido para o novo device…
Abraço!
Vinicus,
Primeiramente parabens pelo trabalho, muito bom no entendimento do Oracle Rac.
Tenho uma duvida quando criamos o arquivo 63-oracle-block.rules
KERNEL==”sdb6″, NAME=”ocr1″, OWNER=”root”, GROUP=”dba”, MODE=”0640″
KERNEL==”sdb8″, NAME=”voting1″, OWNER=”oracle”, GROUP=”dba”, MODE=”0640″
KERNEL==”sdc6″, NAME=”ocr2″, OWNER=”root”, GROUP=”dba”, MODE=”0640″
KERNEL==”sdc8″, NAME=”voting2″, OWNER=”oracle”, GROUP=”dba”, MODE=”0640″
KERNEL==”sdd6″, NAME=”voting3″,OWNER=”oracle”,GROUP=”dba”, MODE=”0640″
Algumas permissões setadas estão diferente do que esta listado:
brw-r—– 1 oracle dba 8, 22 Feb 20 17:34 /dev/ocr1
brw-r—– 1 oracle dba 8, 38 Feb 20 17:35 /dev/ocr2
crw-r—– 1 oracle dba 162, 1 Feb 20 17:36 /dev/raw/raw1
crw-r—– 1 oracle dba 162, 2 Feb 20 17:36 /dev/raw/raw2
crw-r—– 1 oracle dba 162, 3 Feb 20 17:36 /dev/raw/raw3
crw-r—– 1 oracle dba 162, 4 Feb 20 17:36 /dev/raw/raw4
crw-r—– 1 oracle dba 162, 5 Feb 20 17:36 /dev/raw/raw5
brw-r—– 1 root dba 8, 24 Feb 20 17:34 /dev/voting1
brw-r—– 1 root dba 8, 40 Feb 20 17:35 /dev/voting2
brw-r—– 1 oracle dba 8, 54 Feb 20 17:35 /dev/voting3
Os owner listados por vc estão diferente dos configurados no arquivo de permissões.
Isso causa algum erro na continuidade da atividade?????
Gustavo,
Isso causa sim.
As partições estão exatamente iguais? sdb6, sdb8, sdc6, etc.?
Veja,
Para o OCR, as permissões tem que ser root:dba
Para o Voting Disk as permissões tem que ser oracle:dba.
Está estranho pois parece que o voting1 e voting2 estão pegando as permissões do OCR e o ocr1 e ocr2 estão pegando as permissões do Voting Disk.
Faça um “crosscheck” entre as partições físicas e o arquivo 63-oracle-block.rules.
Abraço!
Vinicius
Boa Tarde, Vinícius!! Parabéns pelo artigo. Na criação dos devices você cita: “Há duas formas de criarmos esses devices das partições no servidor mvrac2: reiniciando o servidor, ou, como root:”
Há uma outra forma de você fazer uma releitura nos discos sem a necessidade de reinicialização do servidor… você poderia utilizar o comando “partprobe” no servidor mvrac2, como root.. para cada devices criado.
/sbin/partprobe /dev/sda
/sbin/partprobe /dev/sdb
/sbin/partprobe /dev/sdc
Olá Eder,
Tudo bem?
Sim, eu uso o partprobe nos meus trabalhos, mas como a visão do material é bem básica, preferi pedir pro pessoal rebootar a máquina.
Mas obrigado pela observação!
Abraços
Vinicius