Friday, October 10, 2008

Como instalar Oracle RAC por cuatro duros

Me considero un tio uña por naturaleza, vamos que no gasto un puñetero duro en nada que no sea estrictamente necesario. Cabilando, cabilando y googelando encontré un tipo que lo habia intentado en
su portatil sin gastarse un puñetero duro en maquinas caras ni sistemas de almacenamiento "shared". Vamos que metió dos instancias en una misma maquina fisica sin vmware ni historias de ese estilo (que por cierto lo intenté y los problemas con el shared disk eran de la leche).

Un colega dba y guiri ,al enterarse de lo que estaba haciendo me pregunta: what the fuck are you doing? this is useless !! Yo levanté la mirada de mi cafetito mañanero y le contesté: "Vaya por dios!". La guasa es que el guiri tiene razon, pero para practicar y fardar de que no te has gastado un puñetero duro, vale.


El fabuloso hardware que he empleado es un Dell Inspiron Core 2 Duo con 2Gb de RAM y 120 de disco duro con una particion Linux Centos 4 y a correr.

La cosa está en emular dos tarjetas de red sobre la tarjeta integrada que tiene el portatil:

/sbin/ifconfig eth0:1 195.168.1.2 netmask 255.255.255.0 broadcast 195.168.1.255

la segunda (eth0:2) la hace la instalacion de clusterware, solo hay que poner la entrada del host vipvip en el /etc/hosts de momento

quedando la cosa como sigue:

[root@publica ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:A0:C5:B4:48:4F
inet addr:10.15.65.133 Bcast:10.15.255.255 Mask:255.255.0.0
inet6 addr: fe80::2a0:c5ff:feb4:484f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6273905 errors:0 dropped:0 overruns:0 frame:0
TX packets:400635 errors:0 dropped:0 overruns:0 carrier:0
collisions:69011 txqueuelen:1000
RX bytes:552824678 (527.2 MiB) TX bytes:190091327 (181.2 MiB)
Interrupt:169 Base address:0xcc00

eth0:1 Link encap:Ethernet HWaddr 00:A0:C5:B4:48:4F
inet addr:195.168.1.2 Bcast:195.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:169 Base address:0xcc00

el fichero /etc/hosts

[root@publica ~]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
10.15.65.146 vipvip.fracasoft.com vipvip
195.168.1.2 privada.fracasoft.com privada
10.15.65.133 publica.fracasoft.com publica


Otra cosa que hay que tener en cuenta es cambiar los puñeteros parametros del sistema para adaptarlos a Oracle y poner los paquetes necesarios dependiendo de la distribucion que estés usando. Tambien crear la cuenta oracle y sus grupos es buena idea hacerlo en este punto. Existen mil sitios donde los explican y un buen ejemplo es:
http://www.oracle-base.com/articles/10g/OracleDB10gR2RACInstallationOnLinuxUsingNFS.php

El siguiente paso es configurar ssh y rsh, segun indican los mejores pediatras. lo que no dejan claro es que con uno solo de ellos funciona. NO ES NECESARIO LOS DOS.
Arrancamos el demonio sshd:

$ /etc/rc.d/init.d/sshd start

Generamos las claves:

$ ssh-keygen -t dsa

... y copiamos id_dsa.pub a authorizes_keys

$ cd .ssh
$ cp id_dsa.pub authorized_keys
$ chmod 644 authorized_keys

comprobamos que podemos logear a todos los nodos:

$ ssh privada

$ ssh publica

Vamos a utilizar ASM para simplificar las cosas y aprovecharnos de su facil gestion, asi como de la herramienta dbca que nos genera una base de datos y 2 instancias en un momento.

Para el almacenamiento usamos raw devices que es muy facil gestionarlos con esta versionde linux:

$ mkdir /asmdisks
$ dd if=/dev/zero of=/asmdisks/disk1 bs=1024k count=2000
$ dd if=/dev/zero of=/asmdisks/disk2 bs=1024k count=2000
$ dd if=/dev/zero of=/asmdisks/disk3 bs=1024k count=2000

$ dd if=/dev/zero of=/asmdisks/disk4 bs=1024k count=100
$ dd if=/dev/zero of=/asmdisks/disk5 bs=1024k count=20

$ /sbin/losetup /dev/loop1 /asmdisks/disk1
$ raw /dev/raw/raw1 /dev/loop1
$ chown oracle.dba /dev/raw/raw1

y asi para todos los demas .....

El chavalote de donde saque la mayor parte de este manual (Sean Hull) aconseja hacer los links para el OCR y VOT disks, pero no funcionan ni cara al viento:

$ ln -sf /dev/raw/raw4 /home/oracle/product/disk_ocr
$ ln -sf /dev/raw/raw5 /home/oracle/product/disk_vot

para el que no se ha percatado todavia...... NO LOS PONGAS

Seguimos con la instalacion de clusterware, este se encarga de instalar todo el software que controla el cluster. Habría que instalarlo en cada nodo del RAC pero como solo tenemos una maquina fisica, lo instalamos una sola vez. En una instalacion real se lanza una sola vez el script de instalacion pero en realidad copia el software en todos los nodos (ese es uno de los motivos porque hay que configurar ssh) y al finalizar la instalacion hay que ejecutar un par de script como usuario root en cada uno de los nodos que conforman el RAC.

lanzamos :

$ ./runInstaller -ignoreSysPrereqs

aunque podemos ahorrarnos el "ignoreSysPrereqs" si estamos en un sistema linux basado en redhat

Aqui empieza el cachondeo con las ip publicas, privadas y su puta madre. Segun todos los manuales y web sites donde consulto , la red publica tiene que tener una ip publica, es decir aquellas que no son 10.x.x.x o 192.168.x.x, pero a mi me estaba volviendo loco porque la instalacion no las daba por buenas y no podia seguir con ella. Otra cosa a tener en cuenta es usar el hostname con su dominio, no lo olvides !!
La unica opcion que me dejaba tirar pa'lante era poner una ip "privada" en el apartado de ip-publica y una ip "publica" en el apartado de ip-privada. Luego pregunta por el raw device para ocr y votting disk. Acordaros de poner /dev/raw/rawX y no usar ningun soft link. En el apartado de "Specify Network Interface Usage" volvemos a cambiar "Interface Type": donde pone publica poned privada y viceversa.
EL resto de la instalcion es un juego de niños. Llegados al punto de ejecutar como root el script root.sh que tan amablemete te lo indica, lo hacemos y se queja de la ip vip. Ejecutamos vipca y configura eth0:2 para la ip vip (esta se utiliza en caso de failover). Pues eso, vipca termina ok y podemos seguir en la ventana de la instalacion de clusterware. Si cuando ejecutamos root.sh vemos que se queda colgado es por usar soft links en los raw devices para ocr.

Una vez terminado ejecutamos esto y vemos que estan ya configurado el cluster para dos nodos: publica y privada (ya les podia haber puesto otro nombre que estos llevan a la confusion, pero como soy un perrangano pues es lo que hay)

./olsnodes

Siguientemente, instalamos el software de oracle 10g en modo entreprise para un RAC y de esto hay documentacion para aburrir.

Luego aprovechandonos de dbca utility creamos una instancia ASM, una base de datos y dos instancias. La instancia ASM la podemos crear a mano:

+ASM1, es el nombre de la criatura asi que
ORACLE_SID=+ASM1

y el fichero init+ASM1.ora que diga:

user_dump_dest=/home/oracle/admin/+ASM1/udump
background_dump_dest=/home/oracle/admin/+ASM1/bdump
core_dump_dest=/home/oracle/admin/+ASM1/cdump
large_pool_size=15m
instance_type=asm
asm_diskstring='/dev/raw/raw1', '/dev/raw/raw2','/dev/raw/raw3'

Arrancamos desde sqlplus la instancia ASM :

SQL> startup nomount

creamos 2 disk group:

SQL> create diskgroup DBDATA external redundancy disk
'/dev/raw/raw1','/dev/raw/raw2;
SQL> create diskgroup DBRECO external redundancy disk '/dev/raw/raw3';

Añadimos al init+ASM1.ora los diskgroups:

SQL> !echo "asm_diskgroups='DBDATA','DBRECO'" >> init+ASM1.ora

... y la montamos y/o arrancamos:

SQL> startup force

Ahora le decimos al cluster que tenemos esta instancia ASM que va a contener una base de datos RAC

$ srvctl add asm -n publica -i +ASM1 -o /home/oracle/product/10.2.0.1/db_1

La paramos desde sqlplus y vemos como se arranca con la utilidad srvctl:

SQL> shutdown immediate

$ srvctl start asm -n publica


Ya por ultimo solo queda crear una base de datos asociada a la instancia ASM (a la vez que la crea, se crea la instancia para el nodo publica). Seguimos los pantallazos muy facilmente y cuando terminamos volvamos a ejecutar dbca para crear una instancia nueva sobre la base de datos rac para el nodo privada.


Y c'est tout !!!


No comments: