Tuesday, November 11, 2008

CLUSTERWARE Y LA MADRE QUE LE PARIO

CLUSTERWARE Y LA MADRE QUE LE PARIO

aqui voy a comentar todo ese follon de siglas que no hay chacho que se aclare

In fact, CRS is much more than the cluster software. It provides a method to configure High Availability (HA) services and Oracle Notification Services (ONS). We will examine more details on the CRS in later part of this chapter.

ONS proporciona servicio de mensajeria proveyendo a listeners y AS el estado-disponibilidad de cada nodo del cluster. ONS es la base para otros servicios como FAN y FCF

... y si no te ha quedado claro:

The following list describes some of the major Oracle Clusterware background processes. The list includes components that are processes on Linux and UNIX operating systems, or services on Windows.

  • Cluster Ready Services (CRS)—The primary program for managing high availability operations in a cluster. Anything that the CRS process manages is known as a cluster resource, which could be a database, an instance, a service, a listener, a virtual IP (VIP) address, an application process, and so on. The CRS process manages cluster resources based on the resource's configuration information that is stored in the OCR. This includes start, stop, monitor and failover operations. The CRS process generates events when a resource status changes. When you have installed Oracle RAC, the CRS process monitors the Oracle database instance, listener, and so on, and automatically restarts these components when a failure occurs. By default, the CRS process makes three attempts to start the Oracle Notification Service (ONS), one attempt to start an Oracle database, and five attempts to restart other database components. The CRS process does not attempt to restart the VIP. After these initial attempts, the CRS process does not make further restart attempts if the resource does not restart.

  • Cluster Synchronization Services (CSS)—Manages the cluster configuration by controlling which nodes are members of the cluster and by notifying members when a node joins or leaves the cluster. If you are using certified third-party clusterware, then the css process interfaces with your clusterware to manage node membership information.

  • Event Management (EVM)—A background process that publishes events that Oracle Clusterware creates.

  • Oracle Notification Service (ONS)—A publish and subscribe service for communicating Fast Application Notification (FAN) events.

  • Oracle Process Monitor Daemon (OPROCD)—This process (the OraFenceService service in Windows) is locked in memory to monitor the cluster and provide I/O fencing. The OPROCD periodically wakes up and checks that the interval since it last awoke is within the expected time. If not, then OPROCD resets the processor and restarts the node. An OPROCD failure results in Oracle Clusterware restarting the node.

  • RACG—Extends clusterware to support Oracle-specific requirements and complex resources. Runs server callout scripts when FAN events occur.

Monday, October 27, 2008

RAC en un CentOS 5.2 , baratito tambien

en los ficheros de /etc/udev/rules.d:

[root@localhost rules.d]# more 60-raw.rules
# This file and interface are deprecated.
# Applications needing raw device access should open regular
# block devices with O_DIRECT.
#
# Enter raw device bindings here.
#
# An example would be:
# ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
# ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
ACTION=="add", KERNEL=="sda9", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sda10", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sda5", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sda6", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sda7", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="sda8", RUN+="/bin/raw /dev/raw/raw6 %N"

[root@localhost rules.d]# more 99-raw-perms.rules
KERNEL=="raw[1-6]", MODE="0640", GROUP="oinstall", OWNER="oracle"

# From Enterprise Linux 5.2 DVD
cd /media/dvd/Server
rpm -Uvh binutils-2.*
rpm -Uvh elfutils-libelf-0.*
rpm -Uvh glibc-2.*
rpm -Uvh glibc-common-2.*
rpm -Uvh libaio-0.*
rpm -Uvh libgcc-4.*
rpm -Uvh libstdc++-4.*
rpm -Uvh make-3.*
rpm -Uvh compat-libstdc++-33*
rpm -Uvh elfutils-libelf-devel-*
rpm -Uvh glibc-headers*
rpm -Uvh glibc-devel-2.*
rpm -Uvh libgomp*
rpm -Uvh gcc-4.*
rpm -Uvh gcc-c++-4.*
rpm -Uvh libaio-devel-0.*
rpm -Uvh libstdc++-devel-4.*
rpm -Uvh unixODBC-2.*
rpm -Uvh unixODBC-devel-2.*
rpm -Uvh sysstat-7.*
rpm -Uvh libXp-1.0.0-8.1.el5.i386.rpm
cd /
eject

$ ./runInstaller -ignoreSysPrereqs

antes de ejecutar ./rootsh cambiar los scripts (en caso contrario da un error de libpXXXX que no la encuentra)
This is a bug when you run RAC 10gR2 on RHEL5

The solution is remove the LD_ASSUME_KERNEL setting from the following files:
$ORA_CRS_HOME/bin/vipca
$ORA_CRS_HOME/bin/srvctl

vipca

tambien en vipca si vemos:
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]

As per the same note above, on raclinux2 execute the following from the CRS bin directory as root:

./oifcfg setif –global eth0/192.168.0.0:public
./oifcfg setif –global eth1/10.10.10.0:cluster_interconnect

para evitarnos problemas, configurar el NIC con 3 IP privadas y configurar los interfaces asi:
[root@rac1 network-scripts]# more ifcfg-eth0:1
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0:1
HWADDR=00:A0:C5:B4:48:4F
ONBOOT=yes
NETMASK=255.255.0.0
IPADDR=10.15.65.146
TYPE=Ethernet
USERCTL=yes
NAME=eth0:1
[root@rac1 network-scripts]# more ifcfg-eth0
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:A0:C5:B4:48:4F
ONBOOT=yes
NETMASK=255.255.0.0
IPADDR=10.15.65.133
TYPE=Ethernet
NAME=eth0
[root@rac1 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@rac1 network-scripts]# 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

### puto RAC de los cojones

10.15.65.133 rac1.localdomain rac1
10.15.65.146 rac1-priv.localdomain rac1-priv
10.15.65.134 rac1-vip.localdomain rac1-vip



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 !!!