# /usr/sbin/prtconf |grep Mem
Memory size: 4096 Megabytes
Blog donde comento mis historias con el sistema operativo Sun Solaris durante todos estos años de lucha y placer.
sábado, 29 de agosto de 2009
Cómo saber cuanta memoria hay instalada en Solaris
Para saber la memoria que tenemos instalada en nuestra máquina, simplemente llamaremos a prtconf buscando Memory
viernes, 28 de agosto de 2009
Cómo saber si Solaris soporta binarios de 64 bits
Para comprobar si nuestra instalación de Solaris soporta binarios de 64bits utilizaremos el siguiente comando:
# /usr/bin/isainfo -vY si fuese SPARC
64-bit amd64 applications
sse3 sse2 sse fxsr mmx cmov amd_sysc cx8 tsc fpu
32-bit i386 applications
ahf sse3 sse2 sse fxsr mmx cmov sep cx8 tsc fpu
$ /usr/bin/isainfo -v
64-bit sparcv9 applications
vis2 vis
32-bit sparc applications
vis2 vis v8plus div32 mul32
jueves, 27 de agosto de 2009
Cómo saber cuál es el project actual
Para saber cuál es el project que tenemos asignado en nuestro proceso, utilizaremos el comando /usr/bin/id con la opción -p
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
miércoles, 26 de agosto de 2009
Cómo cambiar el planificador a un proceso en Solaris
Para cambiar el tipo de planificador que tiene asignado un proceso en Solaris deberemos utilizar /usr/sbin/priocntl. Por ejemplo, si quisieramos poner el LogWriter de Oracle en FX ejecutamos
# ps -cafe|grep ora_lgwrNota: Si estamos ejecutando Oracle en una zona, deberemos ejecutar el comando desde la zona global, para saber su pid utilizaremos ps -efZ para que nos muestre todos los procesos
0002011 13870 1 FSS 56 14:12:12 ? 0:01 ora_lgwr_VOLDEMORT
# priocntl -s -c FX -i pid 13870
# ps -cafe|grep ora_lgwr
0002011 13870 1 FX 0 14:12:12 ? 0:01 ora_lgwr_VOLDEMORT
martes, 25 de agosto de 2009
Cómo cambiar el project de un proceso en Solaris
Introducción
Puede que necesitemos cambiar el project asignado a un proceso en Solaris, para ello, utilizaremos el comando /usr/bin/newtask -p project-name -c pid
Por ejemplo, vamos a cambiar el daemon sshd del project system a user.root
# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd system
# newtask -p user.root -c 16839
# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd user.root
Puede que necesitemos cambiar el project asignado a un proceso en Solaris, para ello, utilizaremos el comando /usr/bin/newtask -p project-name -c pid
Por ejemplo, vamos a cambiar el daemon sshd del project system a user.root
# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd system
# newtask -p user.root -c 16839
# ps -ef -o user,group,pid,args,project|grep sshd
root root 16839 /usr/lib/ssh/sshd user.root
sábado, 22 de agosto de 2009
Cómo activar los interfaces de red sin saber cómo se llaman en Solaris
Podemos encontrarnos con una instalación de Solaris que necesitemos activar un interface de Red que, o bien previamente hemos desactivado o no lo activamos por defecto, sin embargo, no sabemos cómo se llama. Puede ser eri, em, ce, ... para ello, podemos utilizar el siguiente comando para que active todos los interfaces que reconoce el sistema.
# ifconfig -a plumb
viernes, 21 de agosto de 2009
Cómo ejecutar un proceso con un project diferente en Solaris
Puede que nos interese ejecutar algún comando con un project diferente, para ello, utilizaremos el comando /usr/bin/newtask con las opciones -p project comando.
$ id -pY si queremos, podemos utilizar esta forma si vamos a lanzar varios procesos
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ newtask -p oracle.hestia ps -o project,args
PROJECT COMMAND
oracle.hestia ps -o project,args
$ id -pDebemos tener en cuenta que el usuario debe pertenecer al projecto, sino nos mostrará el siguiente error.
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ newtask -p oracle.hestia
$ id -p
uid=2011(oracle) gid=2010(dba) projid=102(oracle.hestia)
$ ps -o project,args
PROJECT COMMAND
oracle.hermes bash
oracle.hestia ps -o project,args
group.dba -bash
$ exit
exit
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ newtask -p system ps
newtask: user "oracle" is not a member of project "system"
miércoles, 19 de agosto de 2009
Cómo desactivar/activar una CPU en Solaris
Puede que nos interese poner en offline una cpu bien porque está fallando, o porque queremos experimentar el comportamiento con una cpu menos, para ello utilizaremos el comando /usr/sbin/psradm como se muestra a continuación
No desactivéis una cpu con Oracle SE en una Zona con Solaris 10, existe un bug que nos permite añadir cpus pero no eliminar cpus, esto hará que Oracle se caiga.
Referencias
# psrinfoY para activar la cpu haremos la llamada con el argumento -n y el número de cpu que queremos activar
0 en línea desde 08/03/2009 14:17:57
1 en línea desde 08/04/2009 11:59:19
# psradm -f 1
# psrinfo
0 en línea desde 08/03/2009 14:17:57
1 fuera de línea desde 08/07/2009 14:08:06
# psradm -n 1Nota Importante:
# psrinfo
0 en línea desde 08/03/2009 14:17:57
1 en línea desde 08/07/2009 14:11:17
No desactivéis una cpu con Oracle SE en una Zona con Solaris 10, existe un bug que nos permite añadir cpus pero no eliminar cpus, esto hará que Oracle se caiga.
Referencias
- Metalink Note 460127.1
Cómo saber si Solaris está paginando
Introducción
Solaris tiene una gestión de la swap realmente avanzada, tanto, que hay veces que es muy dificil saber cuándo un proceso está swapeando y cuando no. Vamos a utilizar los comandos /usr/bin/vmstat y /usr/bin/iostat los cuales nos aportan información sobre el uso de la swap y discos.
Uso del comando vmstat
Este comando nos proporciona las estadísticas de uso de la memoria virtual de Solaris, en él, nos fijaremos en las columnas SwapIn - SwapOut (si,so) y PageIn - PageOut (pi,po). El problema es, a veces, no saber qué buscar, bien, vamos a ver si podemos aclararlo.
Si los valores de si o so no son 0, realmente tenemos un servidor muy cargado y swapeando (tal como entendemos todos, es decir, escribiendo en disco porque no le queda RAM), sin embargo, si estos valores son "0" (con en el ejemplo) lo siguiente que debemos mirar es el estado de pi y po. Estos valore indican las páginas que se han cargado (PageIn) y las que se han eliminado (PageOut), pero debemos tener en cuenta que est no significa que se utice espacio swap de disco para ello.
Vamos a verlo con el siguiente ejemplo, utilizaremos la opción -S para que vmstat nos muestre los valores de swap en un intervalo de 6 seg. (No hay que utilizar un valor menor de 5 ya que sino el propio comando interferirá en los resultados)
A continuación podemos ver un host que no tiene problemas de memoria ya que los valores de free, si,so,pi y po son constantes.
Vamos a utiliza el comando iostat el cual nos proporciona el uso de los discos, limitándonos a aquellos que se encuentren asignados a nuestro área de swap, de esta forma, podremos verificar si nuesto equipo está realmente utilizándolos
Asi que ..., sí, está swapeando y mucho ... ahora toca parametrizar correctamente nuestro Oracle
Conclusión
Para comprobar el correcto funcionamiento de nuestro sistema deberemos utilizar los comandos vmstat, iostat y sar
Referencias
Solaris tiene una gestión de la swap realmente avanzada, tanto, que hay veces que es muy dificil saber cuándo un proceso está swapeando y cuando no. Vamos a utilizar los comandos /usr/bin/vmstat y /usr/bin/iostat los cuales nos aportan información sobre el uso de la swap y discos.
Uso del comando vmstat
Este comando nos proporciona las estadísticas de uso de la memoria virtual de Solaris, en él, nos fijaremos en las columnas SwapIn - SwapOut (si,so) y PageIn - PageOut (pi,po). El problema es, a veces, no saber qué buscar, bien, vamos a ver si podemos aclararlo.
Si los valores de si o so no son 0, realmente tenemos un servidor muy cargado y swapeando (tal como entendemos todos, es decir, escribiendo en disco porque no le queda RAM), sin embargo, si estos valores son "0" (con en el ejemplo) lo siguiente que debemos mirar es el estado de pi y po. Estos valore indican las páginas que se han cargado (PageIn) y las que se han eliminado (PageOut), pero debemos tener en cuenta que est no significa que se utice espacio swap de disco para ello.
Vamos a verlo con el siguiente ejemplo, utilizaremos la opción -S para que vmstat nos muestre los valores de swap en un intervalo de 6 seg. (No hay que utilizar un valor menor de 5 ya que sino el propio comando interferirá en los resultados)
# vmstat -S 6Como podemos ver, los valores de si y so están a cero, sin embargo, el sistema está cargando continuamente páginas en memoria. Con el uso de iostat podremos ir afinando si nuestro sistema está o no realmente paginando en disco.
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr rm s6 sd sd in sy cs us sy id
0 0 0 6475424 838488 0 0 847 27 28 0 8 -0 -0 -0 -0 1441 1487 580 22 4 74
0 0 0 5541664 494480 0 0 536 0 0 0 0 0 0 0 0 2057 2599 1017 62 10 28
2 0 0 5534672 489152 0 0 389 1 1 0 0 0 0 0 0 1439 3772 876 67 9 25
0 0 0 5534248 489024 0 0 1047 0 0 0 0 0 0 0 0 1960 1945 1078 50 5 45
0 0 0 5534424 488872 0 0 342 0 0 0 0 0 0 0 0 2361 1742 1154 54 5 40
0 0 0 5538232 491632 0 0 361 0 0 0 0 0 0 0 0 1921 2148 1015 65 5 30
1 0 0 5545752 498264 0 0 351 0 0 0 0 0 0 0 0 3855 27594 1553 73 11 16
0 0 0 5550552 502264 0 0 769 1 1 0 0 0 0 0 0 3387 18331 1550 70 10 20
A continuación podemos ver un host que no tiene problemas de memoria ya que los valores de free, si,so,pi y po son constantes.
$ vmstat -S 6Uso del comando iostat
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr s0 s2 s4 sd in sy cs us sy id
0 0 0 11655392 2971784 0 0 2408 4 5 0 1 1 0 -0 163 2077 24269 2186 22 2 76
0 0 0 15870360 5630928 0 0 0 0 0 0 0 0 0 0 1044 3554 5886 3391 14 1 84
0 1 0 15865784 5626720 0 0 0 0 0 0 0 0 0 0 907 3367 10856 3295 18 1 81
0 1 0 15868640 5631256 0 0 0 0 0 0 0 0 0 0 934 3169 12233 3068 18 1 80
0 0 0 15871672 5634888 0 0 0 1 1 0 0 0 0 0 699 2855 10245 2876 15 1 83
0 0 0 15870600 5633928 0 0 0 0 0 0 0 0 0 0 1782 4977 6176 4957 16 2 82
0 0 0 15873832 5636952 0 0 0 0 0 0 0 0 0 0 1882 4608 4920 4869 17 2 82
0 0 0 15856600 5621712 0 0 0 0 0 0 0 0 0 0 123 2385 11685 2360 24 2 74
0 1 0 15868976 5631416 0 0 0 0 0 0 0 0 0 0 129 1897 36965 1819 26 2 73
0 0 0 15890056 5648016 0 0 23 1 1 0 0 0 0 0 61 1886 35675 1861 29 2 69
Vamos a utiliza el comando iostat el cual nos proporciona el uso de los discos, limitándonos a aquellos que se encuentren asignados a nuestro área de swap, de esta forma, podremos verificar si nuesto equipo está realmente utilizándolos
# swap -l
swapfile dev swaplo bloques libre
/dev/dsk/c5t20000004CF8F7B64d0s1 118,1489 16 8389632 7261120
/dev/dsk/c5t20000004CF7FE30Ed0s1 118,1497 16 8389632 7265360
# iostat -xnPzm 6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
0.5 0.6 5.0 0.6 0.0 0.0 0.7 16.4 0 0 c5t20000004CF8F7B64d0s0 (/)
0.1 0.0 0.7 1.3 0.0 0.0 7.8 9.3 0 0 c5t20000004CF8F7B64d0s1
0.1 0.3 6.9 17.4 0.0 0.0 4.2 23.9 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.1 0.0 0.7 1.3 0.0 0.0 7.6 8.5 0 0 c5t20000004CF7FE30Ed0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0 0 c5t600A0B80002AF618000007A94A710D33d0s1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0 0 c5t600A0B80002AF618000007A94A710D33d0s2
0.0 0.1 15.1 73.3 0.0 0.0 16.0 80.8 0 0 c5t600A0B80002AF618000007A94A710D33d0s6
0.4 1.1 8.1 39.3 0.0 0.0 0.0 3.3 0 0 c5t600A0B80002AF618000007A74A70F3ACd0s6
4.4 2.4 126.8 59.9 0.0 0.0 0.0 5.3 0 2 c5t600A0B80002AF618000007A54A70F35Fd0s6
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0 0 sol10-oracle-applications:vold(pid491)
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
5.6 0.2 46.4 0.5 0.0 0.1 1.7 9.5 1 5 c5t20000004CF8F7B64d0s0 (/)
2.4 8.2 19.1 1039.9 0.3 0.5 28.7 47.7 2 5 c5t20000004CF8F7B64d0s1
0.0 0.2 0.0 2.9 0.0 0.0 0.0 7.0 0 0 c5t20000004CF7FE30Ed0s0 (/opt/zones)
0.9 7.8 6.8 974.4 0.3 0.4 30.3 49.6 2 4 c5t20000004CF7FE30Ed0s1
0.9 22.5 6.8 5528.8 0.0 1.2 0.0 50.0 0 98 c5t600A0B80002AF618000007A94A710D33d0s6
0.0 1.9 0.0 350.4 0.0 0.1 0.0 37.7 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
55.6 13.3 1266.3 372.3 0.0 2.2 0.0 32.0 0 97 c5t600A0B80002AF618000007A54A70F35Fd0s6
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
3.5 0.0 39.3 0.0 0.0 0.0 0.0 6.9 0 2 c5t20000004CF8F7B64d0s0 (/)
1.5 2.7 12.0 338.7 0.0 0.1 0.1 29.4 0 2 c5t20000004CF8F7B64d0s1
0.2 2.7 1.3 338.7 0.0 0.1 0.0 38.0 0 2 c5t20000004CF7FE30Ed0s1
0.3 27.2 2.7 4387.7 0.0 1.1 0.0 39.8 0 99 c5t600A0B80002AF618000007A94A710D33d0s6
0.2 3.7 2.7 356.2 0.0 0.1 0.0 17.6 0 7 c5t600A0B80002AF618000007A74A70F3ACd0s6
47.0 3.2 841.6 236.9 0.0 2.9 0.0 57.3 0 100 c5t600A0B80002AF618000007A54A70F35Fd0s6
Asi que ..., sí, está swapeando y mucho ... ahora toca parametrizar correctamente nuestro Oracle
Conclusión
Para comprobar el correcto funcionamiento de nuestro sistema deberemos utilizar los comandos vmstat, iostat y sar
Referencias
lunes, 17 de agosto de 2009
Instalar squid en Solaris 10 - Parte 1
Introducción
Squid es un proxy http que nos permite acelerar la navegación y disminuir el consumo de ancho de banda de nuestra conexión a internet. Una de las razones de instalar squid es eliminar la necesidad de bajar repetidas veces el mismo contenido de internet y por lo tanto, es algo muy recomendable cuando hablamos de una lan.
En esta primera parte veremos cómo instalar squid de forma simple, en las siguientes entregas veremos cómo instalar squid como proxy transparente y por último veremos cómo utilizar squid para acelerar nuestras páginas web instalandolo como proxy reverso.
Existe mucha literatura sobre la conveniencia o no de un proxy, la mayoría de lo escrito no es cierto ya que se basan en que Internet es dinámico, y lo es, pero no es tan dinámico como ellos quieren hacernos creer. Un proxy bien instalado es una gran ayuda y ventaja para los usuarios, uno mal instalado es un incordio, sin embargo, esto no difiere en nada a otra aplicación. Una de las quejas sobre el uso de los proxys radica en que el contenido está desfasado, bien, eso puede ser cierto (o no) en función de cómo se configure, además, las páginas no cambian cada microsegundo (normalmente).
Vamos a ver cómo configurar squid-cache para que nos permita tener el contenido fresco y, a su vez, nos permita ahorrarnos ancho de banda.
Compilación de squid-cache
Primero deberemos comprobar si tenemos un compilador de C/C++ disponible en el sistema, si hemos instalado Solaris completo plus OEM, entonces tendremos el compilar gcc en /usr/sfw/bin/gcc en OpenSolaris, tenemos un link en /usr/gnu/bin/cc a /usr/sfw/bin/gcc
Vamos a configurar la compilación de squid para tener algunas opciones que por defecto no se activan. Simplemente comentaremos algunas de las opciones que hemos activado y, por qué.
Instalación de squid-cache
En función de si hemos hecho la compilación con root o no, lo instalaremos de la siguiente forma:
Si lo hemos compilado como root o con un usuario que tenga permisos de escritura en el directorio definido en --prefix
Una vez configurado el sistema, debemos crear el sistema de archivos (swap) para ello deberemos utilizar el argumento -z, pero antes debemos configurar correctamente el sistema de archivos para asignar el usuario y grupo, definidos en cache_efective_user y cache_efective_group
Ya tenemos todo preparado para poder lanzar nuestro servicio, para ello, utilizaremos el comando RunCache que se encuenta en $SQUID_HOME/bin/RunCache
Ya podemos verificar el correcto funcionamiento de nuestro servidor proxy, para ello, utilizaremos el comando squidclient que se encuentra en $SQUID_HOME/bin de la siguiente forma:
En esta entrega hemos visto cómo configurar squid-cache para que funcione como proxy http de una forma sencilla sobre Solaris 10, en las siguientes entregas entraremos en la configuración con mayor detalle y de cómo podemos sacar el máximo partido a nuestro nuevo proxy.
Referencias
Squid es un proxy http que nos permite acelerar la navegación y disminuir el consumo de ancho de banda de nuestra conexión a internet. Una de las razones de instalar squid es eliminar la necesidad de bajar repetidas veces el mismo contenido de internet y por lo tanto, es algo muy recomendable cuando hablamos de una lan.
En esta primera parte veremos cómo instalar squid de forma simple, en las siguientes entregas veremos cómo instalar squid como proxy transparente y por último veremos cómo utilizar squid para acelerar nuestras páginas web instalandolo como proxy reverso.
Existe mucha literatura sobre la conveniencia o no de un proxy, la mayoría de lo escrito no es cierto ya que se basan en que Internet es dinámico, y lo es, pero no es tan dinámico como ellos quieren hacernos creer. Un proxy bien instalado es una gran ayuda y ventaja para los usuarios, uno mal instalado es un incordio, sin embargo, esto no difiere en nada a otra aplicación. Una de las quejas sobre el uso de los proxys radica en que el contenido está desfasado, bien, eso puede ser cierto (o no) en función de cómo se configure, además, las páginas no cambian cada microsegundo (normalmente).
Vamos a ver cómo configurar squid-cache para que nos permita tener el contenido fresco y, a su vez, nos permita ahorrarnos ancho de banda.
Compilación de squid-cache
Primero deberemos comprobar si tenemos un compilador de C/C++ disponible en el sistema, si hemos instalado Solaris completo plus OEM, entonces tendremos el compilar gcc en /usr/sfw/bin/gcc en OpenSolaris, tenemos un link en /usr/gnu/bin/cc a /usr/sfw/bin/gcc
root@opensolaris:/ # which ccLo primero que haremos será descargarnos el código fuente de squid-cache desde su página oficial http://www.squid-cache.org.
/usr/gnu/bin/cc
$ mkdir ~/squidConfiguración Compilación
$ cd ~/squid
$ wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE6.tar.gz
$ gzip -dc squid-2.7.STABLE5.tar.gz | tar xvpf -
Vamos a configurar la compilación de squid para tener algunas opciones que por defecto no se activan. Simplemente comentaremos algunas de las opciones que hemos activado y, por qué.
- --enable-cache-digest habilita el hashing de la caché
- --enable-delay-pools habilita la configuración de anchos de banda
- --enable-http-violations habilita las violaciones del protocolo HTTP
- --enable-store-io habilita modos de almacenamiento UFS y DISKD
$ ./configure --helpUna vez decidido el tipo de configuración, lanzaremos el comando configure y posteriormente el make
$ cd squid-2.7.STABLE6Una vez configurada la instalación, lanzaremos el comando make para proceder a la compilación
$ ./configure \
--with-large-files \
--with-pthreads \
--enable-follow-x-forwarded-for \
--enable-default-err-language=Spanish \
--enable-cache-digests \
--enable-delay-pools \
--enable-http-violations \
--prefix=/usr/local/squid \
--enable-x-accelerator-vary \
--with-maxfd=8192 \
--enable-storeio=ufs,diskd
$ makeSi todo ha ido bien, ya tenemos compilado nuestro squid, el siguiente paso será instalarlo.
Instalación de squid-cache
En función de si hemos hecho la compilación con root o no, lo instalaremos de la siguiente forma:
Si lo hemos compilado como root o con un usuario que tenga permisos de escritura en el directorio definido en --prefix
# cd squid-2.7.STABLE6Si lo hemos compilado con otro usuario (ya que no tendrá permisos para crear el directorio que tengamos definido en --prefix)
# make && make install
$ cd squid-2.7.STABLE6Una vez compilado he instalado, crearemos el grupo y usuario encargado de ejecutar squid, en nuestro caso utilizaremos squid como nombre de grupo y usuario.
$ make
$ su -
# cd squid-2.7.STABLE6
# make install
# groupadd squidA continuación vamos a editar el archivo de configuración de squid que se encuentra en $SQUID_HOME/etc/squid.conf los principales parámetros de configuración son los siguientes:
# useradd -g squid -s /bin/false -d /dev/null squid
# passwd -l squid
- visible_hostname nombre_que_queremos_para_el_proxy
- cache_effective_user _nombre_de_usuario_dueño_del_proceso_
- cache_effective_group _grupo_del_dueño_del_proceso_
- http_port _puerto_de_squid_
- cache_dir _tipo_almacenamiento_ _ubicación_ _tamaño_cache_ 16 256
- strip_query_terms _guardar_log_sin_parametros_
acl ALL src 0.0.0.0/0.0.0.0Este nos permite definir varias reglas de control, sin embargo, si necesitamos incluir muchas cadenas o configuraciones más extensas entonces, squid nos permite definir un acl como una entrada de fichero utilizando la siguiente configuración (Esta configuración tiene la definición de un conjunto de IPs en el archivo bloqued_ips.acl)
acl LAN src 192.168.1.0/255.255.255.0
http_access allow LAN
http_access deny ALL
acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
http_access deny blacklist
# cat /usr/local/squid/etc/acls/bloqued_ips.aclA continuación está el archivo de configuración completo de squid con varios sistemas de control para impedir el acceso a webs p2p, messenger, etc. Puede encontrar más información sobre la configuración de acls en la documentación oficial de squid-cache http://wiki.squid-cache.org/SquidFaq/SquidAcl
192.168.1.30
192.168.1.31
192.168.1.32
# vi /usr/local/squid/etc/squid.confCreación del directorio de swap
############################################
## SQUID.CONF
##
## Description:
## - definicion de confiruacion de SQUID 2.7.x
############################################
############################################
## PARAMETROS ADMINISTRATIVOS
############################################
visible_hostname proxy
cache_effective_user squid
cache_effective_group squid
httpd_suppress_version_string on
strip_query_terms false
############################################
## PARAMETROS DE RED
############################################
http_port 3128
############################################
## PARAMETROS CACHE
############################################
cache_dir ufs /usr/local/squid/var/cache 64000 16 256
coredump_dir /usr/local/squid/var/run
pid_filename /usr/local/squid/var/run/squid.pid
cache_log /dev/null
cache_store_log /dev/null
cache_access_log /usr/local/squid/var/logs/access.log
emulate_httpd_log on
log_ip_on_direct on
hierarchy_stoplist cgi-bin ?
debug_options ALL, 2
############################################
## PARAMETRIZACION DE LA CACHE MEMORIA
############################################
memory_replacement_policy lru
############################################
## PARAMETROS TAMA!NO CACHE
############################################
cache_mem 2048 MB
cache_swap_low 98
cache_swap_high 99
maximum_object_size 2048 MB
maximum_object_size_in_memory 128 KB
############################################
# FTP
############################################
ftp_user anonymous@sfchildren.com
############################################
## PARAMETRIZACION ERRORES
############################################
error_directory /usr/local/squid/share/errors/Spanish
err_html_text support@sfchildren.com
############################################
## REFRESH PATTERN
############################################
# Debian
refresh_pattern -i \.deb$ 129600 100% 129600
refresh_pattern -i \.gz$ 129600 100% 129600
refresh_pattern -i \.bz2$ 129600 100% 129600
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 43200
refresh_pattern -i \.tiff?$ 14400 80% 43200
refresh_pattern -i \.bmp$ 14400 80% 43200
refresh_pattern -i \.jp?g$ 14400 80% 43200
refresh_pattern -i \.xbm$ 14400 80% 43200
refresh_pattern -i \.png$ 14400 80% 43200
refresh_pattern -i \.wrl$ 14400 80% 43200
refresh_pattern -i \.ico$ 14400 80% 43200
refresh_pattern -i \.pnm$ 14400 80% 43200
refresh_pattern -i \.pbm$ 14400 80% 43200
refresh_pattern -i \.pgm$ 14400 80% 43200
refresh_pattern -i \.ppm$ 14400 80% 43200
refresh_pattern -i \.rgb$ 14400 80% 43200
refresh_pattern -i \.ppm$ 14400 80% 43200
refresh_pattern -i \.rgb$ 14400 80% 43200
refresh_pattern -i \.xpm$ 14400 80% 43200
refresh_pattern -i \.xwd$ 14400 80% 43200
refresh_pattern -i \.pict?$ 14400 80% 43200
# Movies
refresh_pattern -i \.mov$ 14400 80% 43200
refresh_pattern -i \.mp?g?$ 14400 80% 43200
refresh_pattern -i \.avi$ 14400 80% 43200
refresh_pattern -i \.qtm?$ 14400 80% 43200
refresh_pattern -i \.viv$ 14400 80% 43200
refresh_pattern -i \.swf$ 14400 80% 43200
# Sounds
refresh_pattern -i \.wav$ 14400 80% 43200
refresh_pattern -i \.aiff?$ 14400 80% 43200
refresh_pattern -i \.au$ 14400 80% 43200
refresh_pattern -i \.ram?$ 14400 80% 43200
refresh_pattern -i \.snd$ 14400 80% 43200
refresh_pattern -i \.mid$ 14400 80% 43200
refresh_pattern -i \.mp2$ 14400 80% 43200
refresh_pattern -i \.mp3$ 14400 80% 43200
# Archives
refresh_pattern -i \.sit$ 14400 80% 43200
refresh_pattern -i \.zip$ 14400 80% 43200
refresh_pattern -i \.hqx$ 14400 80% 43200
refresh_pattern -i \.exe$ 14400 80% 43200
refresh_pattern -i \.arj$ 14400 80% 43200
refresh_pattern -i \.lzh$ 14400 80% 43200
refresh_pattern -i \.lha$ 14400 80% 43200
refresh_pattern -i \.cab$ 14400 80% 43200
refresh_pattern -i \.rar$ 14400 80% 43200
refresh_pattern -i \.tar$ 14400 80% 43200
refresh_pattern -i \.gz$ 14400 80% 43200
refresh_pattern -i \.z$ 14400 80% 43200
refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 43200
refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 43200
# Data files
refresh_pattern -i \.txt$ 14400 80% 43200
refresh_pattern -i \.pdf$ 14400 80% 43200
refresh_pattern -i \.doc$ 14400 80% 43200
refresh_pattern -i \.rtf$ 14400 80% 43200
refresh_pattern -i \.tex$ 14400 80% 43200
refresh_pattern -i \.latex$ 14400 80% 43200
# Java-type objects
refresh_pattern -i \.class$ 14400 80% 43200
refresh_pattern -i \.js$ 14400 80% 43200
refresh_pattern -i \.class$ 14400 80% 43200
# Web-type objects
refresh_pattern -i \.css$ 10 20% 4320
refresh_pattern -i \.html?$ 10 20% 4320
refresh_pattern \/$ 10 20% 4320
# Para evitar problemas con scripts .do
refresh_pattern -i \.do$ 0 0% 1440
# Default
refresh_pattern . 0 20% 4320
############################################
## CONFIGURACIONES ACLs
############################################
acl all src 0.0.0.0/0.0.0.0
############################################
## LAN
############################################
acl lan-isp src 192.168.1.0/255.255.255.0
############################################
## ACCESO LOCALHOST
############################################
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
############################################
## NO CACHE QUERYs
############################################
acl QUERY urlpath_regex cgi-bin \?
acl QUERY urlpath_regex gateway.dll \?
acl QUERY urlpath_regex gateway \?
# No cachemaos los cgi
no_cache deny QUERY
############################################
## ACCESO AL SISTEMA DE CONFIGURACION
############################################
acl manager proto cache_object
############################################
## DIRECCIONES IP BLOQUEADAS POR ENCIMA DE
## LO GENERAL
############################################
acl blacklist src "/usr/local/squid/etc/acls/bloqued_ips.acl"
acl blacklisturl url_regex -i "/usr/local/squid/etc/acls/bloqued_url.acl"
http_access deny blacklisturl
http_access deny blacklist
############################################
## URL SIN CACHE
###########################################
acl urlnocache url_regex -i "/usr/local/squid/etc/acls/no_cache.acl"
no_cache deny urlnocache
##############################################
# URL PROHIBIDAS P2P
##############################################
acl bad_url_p2p url_regex -i "/usr/local/squid/etc/acls/webs_p2p.acl"
http_access deny bad_url_p2p
##############################################
# EXEPCIONES URLS PROHIBIDAS
##############################################
acl bad_url_exceptions url_regex -i "/usr/local/squid/etc/acls/bad_url_exceptions.acl"
http_access allow bad_url_exceptions
##############################################
## URL DENEGADAS
##############################################
acl bad_url url_regex -i "/usr/local/squid/etc/acls/bad_url.acl"
http_access deny bad_url
##############################################
## EXECEPCIONES PALABRAS PROHIBIDAS
##############################################
acl bad_query_exceptions urlpath_regex -i "/usr/local/squid/etc/acls/bad_words_exceptions.acl"
http_access allow bad_query_exceptions
##############################################
# PALABRAS PROHIBIDAS
##############################################
acl bad_query urlpath_regex -i "/usr/local/squid/etc/acls/bad_words.acl"
http_access deny bad_query
##############################################
# DOMINIOS PROHIBIDAS
##############################################
acl bad_domain dstdom_regex -i "/usr/local/squid/etc/acls/bad_domains.acl"
http_access deny bad_domain
##############################################
# Puertos Seguros
##############################################
acl SSL_ports port 443-563 # SSL
acl Safe_ports port 80 # http
acl Safe_ports port 20 21 # ftp
acl Safe_ports port 1025-65535 # unregistered ports
# Permitimos utilizar el CONNECT a puertos seguros, hemos deshabilitado el acces
# para POP y SMTP puesto que nos pueden ocasionar fallos de seguridad, ademas, nos
# pueden utilizar como SPAMMER's
acl CONNECT method CONNECT
# Permitimos acceder al sistema de configuracion solo desde LOCALHOST
http_access allow manager localhost
http_access deny manager
# Cualquier llamada a puertos que no sean seguros denegada
http_access deny !Safe_ports
http_access deny CONNECT !Safe_ports
##############################################
# ACCESO A LA CACHE
##############################################
http_access allow lan-isp
http_access allow localhost
http_access deny all
Una vez configurado el sistema, debemos crear el sistema de archivos (swap) para ello deberemos utilizar el argumento -z, pero antes debemos configurar correctamente el sistema de archivos para asignar el usuario y grupo, definidos en cache_efective_user y cache_efective_group
# cd /usr/local/squidA continuación vamos a verificar que el sistema está correctamente configurado, para ello utilizaremos la opción parse que nos evaluará la estructura del archivo de configuración
# mkdir -p /usr/local/squid/var/cache
# chown -R squid:squid /usr/local/squid/var/cache
# cd var
# mkdir run
# chown -R squid:squid logs
# chmod 750 logs
# /usr/local/squid/sbin/squid -z
# /usr/local/squid/sbin/squid -k parseIniciar el Servicio de squid
Ya tenemos todo preparado para poder lanzar nuestro servicio, para ello, utilizaremos el comando RunCache que se encuenta en $SQUID_HOME/bin/RunCache
# /usr/local/squid/bin/RunCache &Verificar Funcionamiento
Ya podemos verificar el correcto funcionamiento de nuestro servidor proxy, para ello, utilizaremos el comando squidclient que se encuentra en $SQUID_HOME/bin de la siguiente forma:
$ /usr/local/squid/bin/squidclient -h localhost http://www.sun.comPodemos ver cómo en $SQUID_HOME/var/logs/access.log se nos produce una nueva entrada
# tail -f /usr/local/squid/var/logs/acess.logResumen
En esta entrega hemos visto cómo configurar squid-cache para que funcione como proxy http de una forma sencilla sobre Solaris 10, en las siguientes entregas entraremos en la configuración con mayor detalle y de cómo podemos sacar el máximo partido a nuestro nuevo proxy.
Referencias
sábado, 15 de agosto de 2009
Cómo saber cuántas CPU hay instaladas en Solaris
Para saber el número de procesadores y tipo instalados en una máquina con Solaris, utilizaremos el comando psrinfo
Sin embargo, si queremos saber cuántas CPU Físcas tenemos, utilizaremos la opción -p del comando psrinfo
# /usr/sbin/psrinfoY si quisiera saber el tipo de CPU que tenemos instalado, simplemente añadiremos la opción -v
0 en línea desde 08/03/2009 14:17:57
1 en línea desde 08/04/2009 11:59:19
# /usr/sbin/psrinfo -v
Estado del procesador virtual 0 a: 08/07/2009 14:06:03
en línea desde 08/03/2009 14:17:57.
El procesador sparcv9 funciona a 900 MHz,
y tiene un procesador de coma flotante sparcv9 .
Estado del procesador virtual 1 a: 08/07/2009 14:06:03
en línea desde 08/04/2009 11:59:19.
El procesador sparcv9 funciona a 900 MHz,
y tiene un procesador de coma flotante sparcv9 .
Sin embargo, si queremos saber cuántas CPU Físcas tenemos, utilizaremos la opción -p del comando psrinfo
# psrinfoReferencias
0 en línea desde 08/29/2009 05:20:41
1 en línea desde 08/29/2009 05:20:42
2 en línea desde 08/29/2009 05:20:42
3 en línea desde 08/29/2009 05:20:42
8 en línea desde 08/29/2009 05:20:42
9 en línea desde 08/29/2009 05:20:42
10 en línea desde 08/29/2009 05:20:42
11 en línea desde 08/29/2009 05:20:42
# psrinfo -pv
El procesador fÃsico dispone de 4 virtuales virtuales (0-3)
SPARC64-VI (portid 1024 impl 0x6 ver 0x93 clock 2150 MHz)
El procesador fÃsico dispone de 4 virtuales virtuales (8-11)
SPARC64-VI (portid 1032 impl 0x6 ver 0x93 clock 2150 MHz)
jueves, 13 de agosto de 2009
Instalación de Oracle 10g en una zona sobre Solaris - Parte 4
Introducción
Hasta aquí hemos visto cómo instalar y configurar Oracle en una Zona de Solaris 10, en este post vamos a ver cómo configurar el listener para que se gestione con SMF (en vez de la forma tradicional). Es cierto, el listener de Oracle es muy robusto, durante los últimos cuatro años sólo he tenido que reiniciarlo en tres ocasiones, y las tres estaban con Oracle 10.2.0.1, desde que hice el upgrade a 10.2.0.4 no se ha quedado tonto nunca, sin embargo, creo que es mejor utilizar SMF para eliminar un punto de fallo más
Configuración del Listener
Para la configuración del listener tenemos dos opciones: editar el archivo $ORACLE_HOME/network/admin/listener.ora o ejecutar $ORACLE_HOME/bin/netca
En ambos casos, la configuración no reviste complicación, a continuación os muestro la configuración del listener llamada PRIMARY y un segundo listener llamado STANDBY cada listener escucha en tres puertos
Configuración de password en el Listener
A partir de la versión 10g, los parámetros de configuración por defecto del listener se han incrementado para garantizar una mayor seguridad. A partir de esta versión, las tareas de mantenimiento remotas están deshabilitadas (ADMIN_RESTRICTIONS ON) y se establece como nivel de seguridad el acceso mediante el propietario de la instalación, en la mayoria oracle, en la máquina en la que se ejecuta.
Vamos a limitar el acceso a los archivo listener.ora, tnsnames.ora y sqlnet.ora al usuario oracle y sólo a él. En la primera parte de la instalación, creaba un profile para el usuario oracle con una máscara 027, ésto hace que no tengamos que estar corrigiendo los permisos cada vez que lanzamos alguna utilidad de Oracle. Si no queremos asignar esta máscara (creo que es altamente recomendable) deberemos asegurarnos que todos los ficheros de nuestra instalación están protegidos.
Sin embargo, vamos a aplicar un valor más restrictivo a nuestro listener.ora y sqlnet.ora para que sólo oracle pueda editarlo.
Nota: Recuerda que si ejecutas $ORACLE_HOME/bin/netca creará copias de seguridad listenerFECHA.bak que tendrán los permisos según la máscara
Cambios de permisos en lsnrctl
Oracle recomienda asignar 751 a $ORACLE_HOME/bin/lsnrctl, sin embargo, es más seguro establecer 750 o mejor 700 aunque este último cambio requiere de una verificación más extensa en un entorno de pruebas.
El servicio PL/SQL External Procedures (ExtProc) sirve para que el PL/SQL pueda ejecutar binarios del sistema, sin embargo, si no es necesario, eliminaremos el servicio del listener. En nuestro ejemplo no está
Cambiar el puerto por defecto
Aunque no es obligatorio, si es muy recomendable cambiar el puerto por defecto 1521 por otro, en nuestro caso es 1703, 1704, 1704 y 2703, 2704, 2705
Configuración del listener mediante SMF
Al igual que explicaba como Instalar Hadoop sobre Solaris con SMF podemos seguir los mismos pasos para configurar nuestro listener y olvidarnos de un servicio. Para ello, deberemos crear el directorio /var/svc/manifest/application/database/oracle y copiar el archivo listener.xml de la siguiente forma.
Recuerda que debes editar las propiedades "home", "project" y "listener" con tus valores antes de importar el XML
Uso de SVC para Iniciar y Detener el listener
Ahora, en vez de utilizar lsnrctl stop LISTENER, utilizaremos svcadm {enable|disable} FMRI, por ejemplo, para detener el listener PRIMARY
En este post hemos visto como configurar nuestro listener para hacerlo más seguro y además, cómo configurarlo para usar el framework SMF permitiéndonos olvidarnos un poco de este proceso vital para Oracle. Espero que os haya gustado y no haberos aburrido, en la próxima entrega entraremos en la configuración de los TNS, múltiples bases de datos utilizando projects para cada una de ellas, y por último haremos una base de datos de ejemplo que nos servirá como catálogo de RMAN.
Referencias
Hasta aquí hemos visto cómo instalar y configurar Oracle en una Zona de Solaris 10, en este post vamos a ver cómo configurar el listener para que se gestione con SMF (en vez de la forma tradicional). Es cierto, el listener de Oracle es muy robusto, durante los últimos cuatro años sólo he tenido que reiniciarlo en tres ocasiones, y las tres estaban con Oracle 10.2.0.1, desde que hice el upgrade a 10.2.0.4 no se ha quedado tonto nunca, sin embargo, creo que es mejor utilizar SMF para eliminar un punto de fallo más
Configuración del Listener
Para la configuración del listener tenemos dos opciones: editar el archivo $ORACLE_HOME/network/admin/listener.ora o ejecutar $ORACLE_HOME/bin/netca
En ambos casos, la configuración no reviste complicación, a continuación os muestro la configuración del listener llamada PRIMARY y un segundo listener llamado STANDBY cada listener escucha en tres puertos
$ vi $ORACLE_HOME/network/admin/listener.oraAhora vamos a aplicar unas reglas básicas de seguridad para evitar que nos puedan (o tengan más dificil) manipular nuestro listener y a su vez nuestra base de datos.
PRIMARY =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1703))
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1704))
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 1705))
)
)
STANDBY =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2703))
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2704))
(ADDRESS = (PROTOCOL = TCP)(HOST = osiris.test.com)(PORT = 2705))
)
)
:wq
Configuración de password en el Listener
A partir de la versión 10g, los parámetros de configuración por defecto del listener se han incrementado para garantizar una mayor seguridad. A partir de esta versión, las tareas de mantenimiento remotas están deshabilitadas (ADMIN_RESTRICTIONS ON) y se establece como nivel de seguridad el acceso mediante el propietario de la instalación, en la mayoria oracle, en la máquina en la que se ejecuta.
$ lsnrctlCorregir los permisos de $TNS_ADMIN ($ORACLE_HOME/network/admin)
LSNRCTL for Solaris: Version 10.2.0.4.0 - Production on 12-AUG-2009 13:36:18
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> set current_listener STANDBY
Current Listener is STANDBY
LSNRCTL> start
Starting /u01/app/oracle/10.2/db/bin/tnslsnr: please wait...
TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
System parameter file is /u01/app/oracle/10.2/db/network/admin/listener.ora
Log messages written to /u01/app/oracle/10.2/db/network/log/standby.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))
Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
STATUS of the LISTENER
------------------------
Alias STANDBY
Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
Start Date 12-AUG-2009 13:36:33
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
Listener Log File /u01/app/oracle/10.2/db/network/log/standby.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))
Services Summary...
Service "TEST" has 1 instance(s).
Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL> change_password
Old password: __por defecto no tiene__
New password:
Reenter new password:
Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
Password changed for STANDBY
The command completed successfully
LSNRCTL> save_config
Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
Saved STANDBY configuration parameters.
Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
Old Parameter File /u01/app/oracle/10.2/db/network/admin/listener.bak
The command completed successfully
LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=TCP)(Host=osiris.test.com)(Port=2703))
STATUS of the LISTENER
------------------------
Alias STANDBY
Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
Start Date 12-AUG-2009 13:36:33
Uptime 0 days 0 hr. 9 min. 5 sec
Trace Level off
Security ON: Password or Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/10.2/db/network/admin/listener.ora
Listener Log File /u01/app/oracle/10.2/db/network/log/standby.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2703)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2704)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=osiris.test.com)(PORT=2705)))
Services Summary...
Service "TEST" has 1 instance(s).
Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL> quit
Vamos a limitar el acceso a los archivo listener.ora, tnsnames.ora y sqlnet.ora al usuario oracle y sólo a él. En la primera parte de la instalación, creaba un profile para el usuario oracle con una máscara 027, ésto hace que no tengamos que estar corrigiendo los permisos cada vez que lanzamos alguna utilidad de Oracle. Si no queremos asignar esta máscara (creo que es altamente recomendable) deberemos asegurarnos que todos los ficheros de nuestra instalación están protegidos.
Sin embargo, vamos a aplicar un valor más restrictivo a nuestro listener.ora y sqlnet.ora para que sólo oracle pueda editarlo.
Nota: Recuerda que si ejecutas $ORACLE_HOME/bin/netca creará copias de seguridad listenerFECHA.bak que tendrán los permisos según la máscara
$ pwd
/u01/app/oracle/10.2/db/network
$ ls -ltr
total 22
drwxr-x--- 2 oracle dba 512 ago 3 15:52 bin
drwxr-x--- 4 oracle dba 512 ago 3 15:52 tools
drwxr-x--- 4 oracle dba 512 ago 3 15:54 install
drwxr-x--- 2 oracle dba 512 ago 3 15:55 doc
drwxr-x--- 2 oracle dba 1024 ago 3 15:55 mesg
drwxr-x--- 2 oracle dba 1024 ago 3 16:33 lib32
drwxr-x--- 2 oracle dba 512 ago 3 16:36 jlib
drwxr-x--- 2 oracle dba 1024 ago 3 16:39 lib
drwxr-x--- 2 oracle dba 512 ago 4 16:42 trace
drwxr-x--- 2 oracle dba 512 ago 12 12:51 log
drwxr-x--- 3 oracle dba 512 ago 12 13:36 admin
$ umask
0027
$ ls -l admin/
total 64
-rw------- 1 oracle dba 1570 ago 12 13:54 listener.ora
drwxr-x--- 2 oracle dba 512 ago 3 15:52 samples
-rw-r----- 1 oracle dba 172 dic 26 2003 shrept.lst
-rw-r----- 1 oracle dba 6490 ago 11 14:02 sqlnet.log
-rw------- 1 oracle dba 91 ago 12 13:07 sqlnet.ora
-rw-r----- 1 oracle dba 6546 ago 11 14:02 tnsnames.ora
Cambios de permisos en lsnrctl
Oracle recomienda asignar 751 a $ORACLE_HOME/bin/lsnrctl, sin embargo, es más seguro establecer 750 o mejor 700 aunque este último cambio requiere de una verificación más extensa en un entorno de pruebas.
$ which lsnrctlEliminar Servicios no necesario
/u01/app/oracle/10.2/db/bin/lsnrctl
$ ls -l /u01/app/oracle/10.2/db/bin/lsnrctl
-rwxr-x--x 1 oracle dba 140024 ago 3 16:39 /u01/app/oracle/10.2/db/bin/lsnrctl
$ chmod 750 /u01/app/oracle/10.2/db/bin/lsnrctl
$ ls -l /u01/app/oracle/10.2/db/bin/lsnrctl
-rwxr-x--- 1 oracle dba 140024 ago 3 16:39 /u01/app/oracle/10.2/db/bin/lsnrctl
El servicio PL/SQL External Procedures (ExtProc) sirve para que el PL/SQL pueda ejecutar binarios del sistema, sin embargo, si no es necesario, eliminaremos el servicio del listener. En nuestro ejemplo no está
Cambiar el puerto por defecto
Aunque no es obligatorio, si es muy recomendable cambiar el puerto por defecto 1521 por otro, en nuestro caso es 1703, 1704, 1704 y 2703, 2704, 2705
Configuración del listener mediante SMF
Al igual que explicaba como Instalar Hadoop sobre Solaris con SMF podemos seguir los mismos pasos para configurar nuestro listener y olvidarnos de un servicio. Para ello, deberemos crear el directorio /var/svc/manifest/application/database/oracle y copiar el archivo listener.xml de la siguiente forma.
Recuerda que debes editar las propiedades "home", "project" y "listener" con tus valores antes de importar el XML
# mkdir -p /var/svc/manifest/application/database/oracleUna vez validado e importado, vamos a crear el method encargado de lanzar el listener, para ello, crearemos el archivo listener en /lib/svc/method/listener
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/oracle-install/smf/listener.xml
# svccfg
svc:> validate /var/svc/manifest/application/database/oracle/listener.xml
svc:> import /var/svc/manifest/application/database/oracle/listener.xml
svc:> quit
# cd /lib/svc/methodPor ultimo, nos queda activar el servicio, para ello ejecutaremos el siguiente comando, teniendo en cuenta que hay cuatro instancias primary_10g, standby_10g, primary_11g y standby_11g, en función de cuál sea.
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/oracle-install/smf/listener
# chmod 750 listener
# chown root:bin listener
# svcadm enable -t svc:/application/database/oracle/listener:primary_10gPodemos comprobar su estado utilizando el comando svcs y el servicio que queremos comprobar en nuestro caso listener
# svcs listenerNota: Puedes descargarte directamente el archivo listener.xml y listener si lo prefieres.
STATE STIME FMRI
disabled ago_10 svc:/application/database/oracle/listener:primary_11g
disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
disabled 16:23:13 svc:/application/database/oracle/listener:standby_10g
online 16:21:37 svc:/application/database/oracle/listener:primary_10g
# svcadm enable svc:/application/database/oracle/listener:standby_10g
# svcs listener
STATE STIME FMRI
disabled ago_10 svc:/application/database/oracle/listener:primary_11g
disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
online 16:21:37 svc:/application/database/oracle/listener:primary_10g
online 16:23:47 svc:/application/database/oracle/listener:standby_10g
Uso de SVC para Iniciar y Detener el listener
Ahora, en vez de utilizar lsnrctl stop LISTENER, utilizaremos svcadm {enable|disable} FMRI, por ejemplo, para detener el listener PRIMARY
# svcadm disable svc:/application/database/oracle/listener:primary_10gComo se encuentra dentro de SMF, si por algún motivo el proceso se muere SMF se encargará de volverlo a lanzar, aquí tienes un ejemplo.
$ ps -ef|grep lsResumiendo
oracle 9325 27127 0 16:29:37 pts/1 0:00 grep ls
oracle 8986 7561 0 16:21:38 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr PRIMARY -inherit
oracle 9124 7561 0 16:23:48 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr STANDBY -inherit
$ kill -9 9124
$ ps -ef|grep ls
oracle 9349 27127 0 16:29:47 pts/1 0:00 grep ls
oracle 8986 7561 0 16:21:38 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr PRIMARY -inherit
oracle 9347 7561 0 16:29:46 ? 0:00 /u01/app/oracle/10.2/db/bin/tnslsnr STANDBY -inherit
$ svcs listener
STATE STIME FMRI
disabled ago_10 svc:/application/database/oracle/listener:primary_11g
disabled 16:21:24 svc:/application/database/oracle/listener:standby_11g
online 16:21:37 svc:/application/database/oracle/listener:primary_10g
online 16:29:46 svc:/application/database/oracle/listener:standby_10g
En este post hemos visto como configurar nuestro listener para hacerlo más seguro y además, cómo configurarlo para usar el framework SMF permitiéndonos olvidarnos un poco de este proceso vital para Oracle. Espero que os haya gustado y no haberos aburrido, en la próxima entrega entraremos en la configuración de los TNS, múltiples bases de datos utilizando projects para cada una de ellas, y por último haremos una base de datos de ejemplo que nos servirá como catálogo de RMAN.
Referencias
miércoles, 12 de agosto de 2009
Cómo poner otro carácter de escape en zlogin -C
Por defecto, es carácter de escape en zlogin -c es ~. sin embargo, para poder poner cualquier otro, simplemente utilizaremos la opción -e con nuestro nuevo carácter de escape, en nuestro caso #
# zlogin -C -e\# osiris
[Conectado a la consola de la zona 'osiris']
#.
[Conexión con consola de la zona 'osiris' cerrada]
lunes, 10 de agosto de 2009
Instalación de Oracle 10g en una zona sobre Solaris - Parte 3
Introducción
En los post anteriores hemos visto cómo preparar el entorno, y posteriormente cómo instalar el motor de base de datos explicando la arquitectura OFA.
En este, veremos cómo instalar una base de datos a partir de una plantilla que previamente crearemos.
Creación de una plantilla
Vamos a crearnos una plantilla con las configuraciones. Esto no es necesario, aunque si muy recomendable si vais a crear varias instancias con la misma estructura. Para no extenderme mucho en el post y que no parezca facebook sólo voy a poner aquellos puntos donde realmente se realizan cambios. Para ello, comenzaremos por lanzar el asistente
En el paso 6 deberemos seleccionar si queremos o no el modo archivelog, si activamos la casilla de Activar Archivado, deberemos configurar el destino de los mismos.
Si hemos activado Archivado entonces, haremos click sobre Variable de Ubicación y definiremos los destinos, como se muestra a continuación
En el paso "7" nos pedirá que asignemos el tamaño de memoria, tipo de conexión y el charset de la base de datos.
Continuaremos hasta el paso "8" donde seleccionaremos la ubicación de los controlfile, redo y datafiles como se muestra a continuación
Repetiremos este pasa para cada uno de los tres grupos de redo que tenemos, asignando dos archivos de redo por cada grupo como mínimo
Finalizaremos el asistente y guardaremos nuestra plantilla como CATALOG para usarla en nuestros próximos pasos.
Creación de una nueva base de datos
Vamos a crear nuestra base de datos utilizando la plantilla que hemos creado, de esta forma lanzaremos el asistente de creación dbca y seleccionaremos CATALOG como tipo de base de datos, a continuación os detallo los pasos más importantes
Continuaremos hasta el paso "8"
Continuaremos hasta el paso "9"
Registraremos la base de datos en los listener que queramos y ya podemos darle a crear
Resumen
En este post hemos visto cómo crear una plantilla y posteriormente crear una nueva base de datos para poder repetir el proceso de una forma sencilla. En el próximo post, veremos cómo configurar SMF para mantener nuestro listener siempre activo y algunos cambios en la parametrización.
Referencias
En los post anteriores hemos visto cómo preparar el entorno, y posteriormente cómo instalar el motor de base de datos explicando la arquitectura OFA.
En este, veremos cómo instalar una base de datos a partir de una plantilla que previamente crearemos.
Creación de una plantilla
Vamos a crearnos una plantilla con las configuraciones. Esto no es necesario, aunque si muy recomendable si vais a crear varias instancias con la misma estructura. Para no extenderme mucho en el post y que no parezca facebook sólo voy a poner aquellos puntos donde realmente se realizan cambios. Para ello, comenzaremos por lanzar el asistente
$ $ORACLE_HOME/bin/dbca &Seleccionamos "Gestionar Plantillas" y "Siguiente"
En el paso 6 deberemos seleccionar si queremos o no el modo archivelog, si activamos la casilla de Activar Archivado, deberemos configurar el destino de los mismos.
Si hemos activado Archivado entonces, haremos click sobre Variable de Ubicación y definiremos los destinos, como se muestra a continuación
En el paso "7" nos pedirá que asignemos el tamaño de memoria, tipo de conexión y el charset de la base de datos.
Continuaremos hasta el paso "8" donde seleccionaremos la ubicación de los controlfile, redo y datafiles como se muestra a continuación
Repetiremos este pasa para cada uno de los tres grupos de redo que tenemos, asignando dos archivos de redo por cada grupo como mínimo
Finalizaremos el asistente y guardaremos nuestra plantilla como CATALOG para usarla en nuestros próximos pasos.
Creación de una nueva base de datos
Vamos a crear nuestra base de datos utilizando la plantilla que hemos creado, de esta forma lanzaremos el asistente de creación dbca y seleccionaremos CATALOG como tipo de base de datos, a continuación os detallo los pasos más importantes
Continuaremos hasta el paso "8"
Continuaremos hasta el paso "9"
Registraremos la base de datos en los listener que queramos y ya podemos darle a crear
Resumen
En este post hemos visto cómo crear una plantilla y posteriormente crear una nueva base de datos para poder repetir el proceso de una forma sencilla. En el próximo post, veremos cómo configurar SMF para mantener nuestro listener siempre activo y algunos cambios en la parametrización.
Referencias
sábado, 8 de agosto de 2009
Cómo sincronizar el reloj mediante NTP en Solaris
Para hacer que el reloj de Solaris se sincronice automáticamente, simplemente crearemos un archivo en /etc/inet/ntp.conf con la IP/host del que queremos se actualice
# echo "server hora.rediris.es" > /etc/inet/ntp.conf
# svcadm enable svc:/network/ntp
viernes, 7 de agosto de 2009
Instalación de Oracle 10g en una zona sobre Solaris - Parte 2
Introducción
En la primera parte, hemos visto como configurar la zona para que nos permita instalar Oracle de una forma más eficiente. En esta parte, vamos a ver cómo diseñar la estructura de directorios para que nos permita una gestión eficiente y sencilla.
Oracle Flexible Architecture (OFA)
Oracle define un conjunto de buenas prácticas para distribuir los datos y las aplicaciones, a este tipo de reglas se conocen como OFA. La principal ventaja es la separación entre la lógica, hardware y software, para ello, tendremos los puntos de montaje asignados por cada división hardware (discos, raid) y a su vez por cada división lógica (instancias)
El punto de montaje será /pN donde p será una cadena constante y N una valor numérico correlativo, por ejemplo.
Con la definición OFA como base, yo creo la siguiente configuración adaptada a mi estrucutra
Qué ventaja nos aporta? Principalmente que la estructura es siempre constante, y aunque actualicemos a una release no tendremos problemas. Imaginar que instaláis en $ORACLE_HOME/oradata/$ORACLE_SID, si actualizásemos nuestro $ORACLE_HOME con una nueva versión tenemos un problema, y dos posible soluciones
Instalación de Oracle 10g2
La instalación no supone mayor problema, principalmente porque hemos creado un profile donde hemos asignado nuestro ORACLE_HOME, apuntando a /u01/app/oracle/10.2/db. No voy a entrar en el detalle de la instalación, ya que no es el problema que quiero resolver, basta con seleccionar el tipo de instalación SE, EE e Instalar sólo el motor. A continuación os muestro la pantalla
Es muy probable que el asistente nos diga que los parámetros del kernel no están. Ya he comentado que en Solaris 10 no hace falta incluirlo en /etc/system, aunque el instalador de Oracle los va a buscar ahí.
Instalación del patch 10.2.0.4
Una vez instalado el motor de base de datos, instalaremos el patch 10.2.0.4 (p6810189_10204_Solaris-64) que debes descargar de Metalink, para poder aplicar este parche, es necesario actualizar la versión de opatch a la 10.2.0.4 y los TimeZones
Preparación de la Estructura OFA
Vamos a crear la estrucutura que nos permitirá mantener organizado nuestra instalación de Oracle y lo más importante, nos permitirá hacer upgrades de forma "sencilla"
/dev/dsk/c5t600A0B80002AF68E000007354A70F366d0s6
49G 6,0G 42G 13% /u02
/dev/dsk/c5t600A0B80002AF618000007A74A70F3ACd0s6
49G 6,0G 42G 13% /u03
/dev/dsk/c5t600A0B80002AF68E000007374A710CBEd0s6
49G 5,5G 43G 12% /u04
/dev/dsk/c5t600A0B80002AF618000007A54A70F35Fd0s6
98G 16G 81G 17% /u01
/dev/dsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
197G 99G 96G 51% /u05
/dev/dsk/c5t600A0B80002AF618000007A94A710D33d0s6
98G 23G 75G 24% /u01/app/oracle/10.2/db/flash_recovery_area
Conclusión
Hemos visto como OFA nos aporta una forma organizada de mantener nuestra instalación y un mantenimiento simplificado, ahora ya tenemos la estructura creada y preparada para poder lanzar el asistente de creación de base de datos dbca que nos permitirá administrar las diferentes instancias, sin embargo, esto tendrá que esperar a la próxima entrega.
Referencias
En la primera parte, hemos visto como configurar la zona para que nos permita instalar Oracle de una forma más eficiente. En esta parte, vamos a ver cómo diseñar la estructura de directorios para que nos permita una gestión eficiente y sencilla.
Oracle Flexible Architecture (OFA)
Oracle define un conjunto de buenas prácticas para distribuir los datos y las aplicaciones, a este tipo de reglas se conocen como OFA. La principal ventaja es la separación entre la lógica, hardware y software, para ello, tendremos los puntos de montaje asignados por cada división hardware (discos, raid) y a su vez por cada división lógica (instancias)
El punto de montaje será /pN donde p será una cadena constante y N una valor numérico correlativo, por ejemplo.
/u01En nuestro primer punto de montaje /u01 instalaremos nuestro software Oracle siguiendo la siguiente estructura /u01/app/OSUSER/VERSION/TYPE donde OSUSER es el nombre del usuario del sistema operativo, VERSION la versión del producto y TYPE el tipo de producto. Si queremos instalar la versión Oracle 10g2 SE con el usuario oracle nos quedará de la siguiente forma /u01/app/oracle/10.2/db
/u02
/u03
Con la definición OFA como base, yo creo la siguiente configuración adaptada a mi estrucutra
/u0?/oradata/$ORACLE_SID/A continuación puedes verla con más detalle (la instancia se llama Voldemort)
/u0?/archv_log/$ORACLE_SID/
/u0?/redo/$ORACLE_SID/
/u0?/controlfile/$ORACLE_SID/
$ find /u0{2,3,4} -type d -print 2>/dev/nullPor lo tanto, nuestra instancia estará definida de la siguiente manera, los controlfile en /u02/controlfile/VOLDEMORT, /u03/controlfile/VOLDEMORT y /u04/controlfile/VOLDEMORT. Redo en /u02/redo/VOLDEMORT, /u03/redo/VOLDEMORT y /u04/redo/VOLDEMORT y los datos en /u05/oradata/VOLDEMORT/u02
/u02/archv_log
/u02/archv_log/VOLDEMORT
/u02/controlfile
/u02/controlfile/VOLDEMORT
/u02/redo
/u02/redo/VOLDEMORT
/u02/oradata
/u02/oradata/VOLDEMORT
/u03
/u03/redo
/u03/redo/VOLDEMORT
/u03/controlfile
/u03/controlfile/VOLDEMORT
/u03/archv_log
/u03/archv_log/VOLDEMORT
/u03/oradata
/u03/oradata/VOLDEMORT
/u04
/u04/redo
/u04/redo/VOLDEMORT
/u04/controlfile
/u04/controlfile/VOLDEMORT
/u04/archv_log
/u04/archv_log/VOLDEMORT
/u04/oradata
/u04/oradata/VOLDEMORT
Qué ventaja nos aporta? Principalmente que la estructura es siempre constante, y aunque actualicemos a una release no tendremos problemas. Imaginar que instaláis en $ORACLE_HOME/oradata/$ORACLE_SID, si actualizásemos nuestro $ORACLE_HOME con una nueva versión tenemos un problema, y dos posible soluciones
- Dejarlo donde estaba. Esto es un caos
- Reconstruir la DB. Bueno, es posible y no es muy difícil ...
Instalación de Oracle 10g2
La instalación no supone mayor problema, principalmente porque hemos creado un profile donde hemos asignado nuestro ORACLE_HOME, apuntando a /u01/app/oracle/10.2/db. No voy a entrar en el detalle de la instalación, ya que no es el problema que quiero resolver, basta con seleccionar el tipo de instalación SE, EE e Instalar sólo el motor. A continuación os muestro la pantalla
Es muy probable que el asistente nos diga que los parámetros del kernel no están. Ya he comentado que en Solaris 10 no hace falta incluirlo en /etc/system, aunque el instalador de Oracle los va a buscar ahí.
Instalación del patch 10.2.0.4
Una vez instalado el motor de base de datos, instalaremos el patch 10.2.0.4 (p6810189_10204_Solaris-64) que debes descargar de Metalink, para poder aplicar este parche, es necesario actualizar la versión de opatch a la 10.2.0.4 y los TimeZones
Preparación de la Estructura OFA
Vamos a crear la estrucutura que nos permitirá mantener organizado nuestra instalación de Oracle y lo más importante, nos permitirá hacer upgrades de forma "sencilla"
# mkdir -p /u0{1,2,3,4,5}Aunque yo he creado todos los directorios en el mismo disco, es para simplificar el post, ya que la forma óptima de utilización es montar cada u0x sobre un disco diferente, como os muestro a continuación. Donde u02, u03, u04 son simétricos ya que almacenan los redo, controlfile y temporales y u05 es donde se almacenan los datafiles en un RAID 1+0 en una SAN
# mkdir /u0{1,2,3}/controlfile
# mkdir /u0{1,2,3}/redo
# mkdir /u0{1,2,3,4,5}/oradata
# chown -R oracle:dba /u0?
# chmod 700 /u0?
/dev/dsk/c5t600A0B80002AF68E000007354A70F366d0s6
49G 6,0G 42G 13% /u02
/dev/dsk/c5t600A0B80002AF618000007A74A70F3ACd0s6
49G 6,0G 42G 13% /u03
/dev/dsk/c5t600A0B80002AF68E000007374A710CBEd0s6
49G 5,5G 43G 12% /u04
/dev/dsk/c5t600A0B80002AF618000007A54A70F35Fd0s6
98G 16G 81G 17% /u01
/dev/dsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
197G 99G 96G 51% /u05
/dev/dsk/c5t600A0B80002AF618000007A94A710D33d0s6
98G 23G 75G 24% /u01/app/oracle/10.2/db/flash_recovery_area
Conclusión
Hemos visto como OFA nos aporta una forma organizada de mantener nuestra instalación y un mantenimiento simplificado, ahora ya tenemos la estructura creada y preparada para poder lanzar el asistente de creación de base de datos dbca que nos permitirá administrar las diferentes instancias, sin embargo, esto tendrá que esperar a la próxima entrega.
Referencias
jueves, 6 de agosto de 2009
Cómo cambiar el planificador por defecto en Solaris
Para establecer el planificador FSS por defecto en Solaris, ejecutaremos en la zona global y reiniciaremos para que tenga efecto.
# dispadmin -d FSSY para saber cuántos tipos de planificadores hay, simplemente ejecutaremos
# dispadmin -l
CONFIGURED CLASSES
==================
SYS (System Class)
TS (Time Sharing)
FSS (Fair Share)
RT (Real Time)
FX (Fixed Priority)
IA (Interactive)
martes, 4 de agosto de 2009
Instalación de Oracle 10g en una zona sobre Solaris - Parte 1
Introducción
Existe mucha información de cómo instalar Oracle 10g sobre Solaris, sin embargo, quería hacer un post donde explicar algunos trucos que suelo utilizar yo.
El problema, Licenciamiento de Oracle
Bien, todos sabemos que Oracle se puede Licenciar por usuario y cpu. Hasta aquí todo correcto, pero qué pasa con los equipos CMT (UltraSPARC T1, T2, T2+) que tienen hasta 128 Threads? El problema es que el Sistema computa cada thread como una cpu (aunque realmente no es cierto) y por lo tanto, tenías n micros.
En las primeras versiones de Solaris 10 no existía forma de físicamente particionar el hardware (si que existe a nivel de Hardware, por ejemplo, en la serie M) y por lo tanto, la solución era utilizar resource pool, sin embargo, para Oracle ésto no era válido (si, he puesto era porque han cambiado un poco las cosas).
En la versión Solaris Update 4 se introdujo una nueva propiedad llamada cappable que nos permite limitar de una forma más sencilla los recursos de la zona.
No es que antes no se pudiese, no, lo que sucede es que ahora, es realmente mucho más sencillo habilitar los límites de máximo número de cpu y uso, además según la nota de Metalink 317257.1, es un licenciamiento válido, como se muestra a continuación
Creación Zona para Oracle
La creación de la Zona no es muy diferente a la creación de una zona como ya expliqué en el post Gestión básica de Zonas, sin embargo, debemos tener en cuenta algunas cosas:
Asignaremos el planificador FSS por defecto a nuestra máquina, rebootaremos para que los cambios se apliquen y concluiremos con la instalación de la zona gnosis y su configuración
Configuración de Número de CPUs y Uso de CPU
Dentro de las nuevas posibilidades de configuración que nos aporta Solaris 10u5, tenemos capped-cpu y dedicated-cpu que son excluyentes es decir, no podemos asignar dedicated y capped de forma simultánea.
Vamos a ver cuándo es interesante capped-cpu y cuando dedicated-cpu. Imaginemos que tenemos una máquina con 4 UltraSPARC IV+, para Solaris existen 8 cpu, y nuestra licencia de Oracle SE es hasta 4 cpus. En esta situación lo que queremos es limitar el número de CPUs visibles a la Zona para ello utilizaremos dedicated-cpu ya que esas 4 cpu asignadas no serán accesibles por ninguna zona más (Realmente, lo que sucede es que se crea un nuevo pset y se binda los procesos de la zona a este pset). Sin embargo, si tengo una máquina con 2 UltraSPARC IIIcu, y al igual que sucede antes, mi licencia es de hasta 4 cpus, lo que me interesa es asignar un valor de capped-cpu para que varias zonas puedan compartir los recursos, siendo 1 un 100% de uso de micro, por lo tanto, si tengo 2 CPUs y quiero que mi zona de Production tenga una CPU y media, asignaré un valor de ncpus=1,50. Utilizando capped-cpu ambas CPUs son visibles para las zonas, sin embargo, sólo podrán utilizar el número de CPUs asignado en ncpus
Conclusión, la principal diferencia entre dedicated-cpu y capped-cpu radica en la visibilidad de las CPUs para las Zonas, con dedicated-cpu sólo serán visibles para la zona asignada, y con capped-cpu todas las zonas verán las CPUs pero podrán utilizar sólo aquel valor asignado en ncpus
Una vez que tengamos claro el tipo de resouce pool que queremos, asignaremos una propiedad u otra, en mi caso he asignado los siguientes valores
Zona Osiris Integration
Como ye hemos comentado antes, ahora los valores del tamaño máximo de segmento, semáforos, etc. se asignan mediante project de esta forma, es posible modificarlos en caliente. El valor de max-shm-memory será 1/4 de la memoria total del sistema según Metalink
Configuración del profile del usuario oracle
Aunque no es necesario, ya que se puede establecer siempre de forma manual, creo que es más recomendable crearlo, yo utilizo siempre el profile para evitar problemas al asignar los ORACLE_HOME u ORACLE_SID
Referencias
Existe mucha información de cómo instalar Oracle 10g sobre Solaris, sin embargo, quería hacer un post donde explicar algunos trucos que suelo utilizar yo.
El problema, Licenciamiento de Oracle
Bien, todos sabemos que Oracle se puede Licenciar por usuario y cpu. Hasta aquí todo correcto, pero qué pasa con los equipos CMT (UltraSPARC T1, T2, T2+) que tienen hasta 128 Threads? El problema es que el Sistema computa cada thread como una cpu (aunque realmente no es cierto) y por lo tanto, tenías n micros.
En las primeras versiones de Solaris 10 no existía forma de físicamente particionar el hardware (si que existe a nivel de Hardware, por ejemplo, en la serie M) y por lo tanto, la solución era utilizar resource pool, sin embargo, para Oracle ésto no era válido (si, he puesto era porque han cambiado un poco las cosas).
En la versión Solaris Update 4 se introdujo una nueva propiedad llamada cappable que nos permite limitar de una forma más sencilla los recursos de la zona.
No es que antes no se pudiese, no, lo que sucede es que ahora, es realmente mucho más sencillo habilitar los límites de máximo número de cpu y uso, además según la nota de Metalink 317257.1, es un licenciamiento válido, como se muestra a continuación
To create a Solaris 10 container that fits the licensing requirements set by Oracle, the Solaris system administrator needs to create a resource pool with the desired number of CPUs or cores and bind a zone to this resource pool. Alternatively, the administrator may set up a zone to use dynamic pool with specified CPU maximum limit. The license is driven by the number of CPUs or cores in this pool.
Creación Zona para Oracle
La creación de la Zona no es muy diferente a la creación de una zona como ya expliqué en el post Gestión básica de Zonas, sin embargo, debemos tener en cuenta algunas cosas:
Oracle hace un uso intensivo de los discos, por lo tanto, es necesario hacer visibles los discos como devices y no montados a través de la zona.Para ello, vamos ha configurar la zona, con los siguientes parámetros, en mi configuración los discos están en una SAN con una Emulex, y la máquina tiene dos zonas, gnosis Oracle 10.2.0.4 Production y osiris Oracle 10.2.0.4 Integration. Por ello, la parametrización de cpu-shares es 80 para gnosis y 20 para osiris.
Es muy recomendable hacer que las IP sean de tipo exclusive para evitar fallos en el rendimiento.
# zonecfg -z gnosisDesde la versión 10 de Solaris, ya no es necesario establecer los valores de max-shm-memory en el archivo /etc/system sin embargo, si el valor de noexec_user_stack a 1. Para ello, vamos a editar el archivo /etc/system de la zona global
gnosis: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:gnosis> create
zonecfg:gnosis> set zonepath=/opt/zones/gnosis
zonecfg:gnosis> set autoboot=true
zonecfg:gnosis> add net
zonecfg:gnosis:net> set physical=e1000g0
zonecfg:gnosis:net> set address=10.80.1.7/24
zonecfg:gnosis:net> set defrouter=10.80.1.254
zonecfg:gnosis:net> end
zonecfg:gnosis> add device
zonecfg:gnosis:device> set match=/dev/dsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
zonecfg:gnosis:device> end
zonecfg:gnosis> add device
zonecfg:gnosis:device> set match=/dev/rdsk/c5t600A0B80002AF68E000007324A70F30Ed0s6
zonecfg:gnosis:device> end
zonecfg:gnosis> set scheduling-class=FSS
zonecfg:gnosis> set cpu-shares=80
zonecfg:gnosis> set max-shm-memory=4G
zonecfg:gnosis> verify
zonecfg:gnosis> commit
zonecfg:gnosis> exit
# vi /etc/systemNota: Como ya he dicho, en Solaris 10, ya no es necesario poner aquí los valores semáforos y segmentos de memoria máximos, sin embargo, yo sigo utilizando algun Solaris 9 y por eso, tengo el system así.
* **********************************
* FC Tuning
* *********************************
set ssd:ssd_io_time=0x78
set sd:sd_max_throttle=16
* ***********************************
* Parametros para Tunear el Sistema
* ***********************************
*
* maxusers = Total Memory (In Mb)
*
set maxusers=4096
*
* rflim_fd_max
* Limite de descriptores maximos de archivos abiertos
* por defecto: 1024
*
set rlim_fd_max=8192
*
* rlim_fd_cur
* por defecto: 64
*
set rlim_fd_cur=8192
*
* sq_max_size
* Controla la cola de los drivers (buffer)
* por defecto: 2
* asignado a infinito: 0
*
set sq_max_size=0
*************************************************
* configuracion para el acceso de la memoria *
*************************************************
* Minimo porcentaje que pageout puede consumir
* Default: 4 - Range: 1 .. 80
set min_percent_cpu=6
*************************************************
* permitir accesos de root en la maquina *
*************************************************
set reserved_procs=20
*************************************************
* parametrizacion de oracle 10g2 *
*************************************************
set noexec_user_stack=1
set semsys:seminfo_semmni=100
set semsys:seminfo_semmns=1024
set semsys:seminfo_semmsl=605
set semsys:seminfo_semvmx=32767
************************************************
* debemos poner MAXINT64 en UltraSPARC
* setting this parameter to the maximum possible
* value has no side effects.
* 4096*2*1024*1024
*************************************************
set shmsys:shminfo_shmmax=8589934592
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
* ya no tiene soporte en el kernel de la sol9
set shmsys:shminfo_shmmin=1
Asignaremos el planificador FSS por defecto a nuestra máquina, rebootaremos para que los cambios se apliquen y concluiremos con la instalación de la zona gnosis y su configuración
Configuración de Número de CPUs y Uso de CPU
Dentro de las nuevas posibilidades de configuración que nos aporta Solaris 10u5, tenemos capped-cpu y dedicated-cpu que son excluyentes es decir, no podemos asignar dedicated y capped de forma simultánea.
Vamos a ver cuándo es interesante capped-cpu y cuando dedicated-cpu. Imaginemos que tenemos una máquina con 4 UltraSPARC IV+, para Solaris existen 8 cpu, y nuestra licencia de Oracle SE es hasta 4 cpus. En esta situación lo que queremos es limitar el número de CPUs visibles a la Zona para ello utilizaremos dedicated-cpu ya que esas 4 cpu asignadas no serán accesibles por ninguna zona más (Realmente, lo que sucede es que se crea un nuevo pset y se binda los procesos de la zona a este pset). Sin embargo, si tengo una máquina con 2 UltraSPARC IIIcu, y al igual que sucede antes, mi licencia es de hasta 4 cpus, lo que me interesa es asignar un valor de capped-cpu para que varias zonas puedan compartir los recursos, siendo 1 un 100% de uso de micro, por lo tanto, si tengo 2 CPUs y quiero que mi zona de Production tenga una CPU y media, asignaré un valor de ncpus=1,50. Utilizando capped-cpu ambas CPUs son visibles para las zonas, sin embargo, sólo podrán utilizar el número de CPUs asignado en ncpus
Conclusión, la principal diferencia entre dedicated-cpu y capped-cpu radica en la visibilidad de las CPUs para las Zonas, con dedicated-cpu sólo serán visibles para la zona asignada, y con capped-cpu todas las zonas verán las CPUs pero podrán utilizar sólo aquel valor asignado en ncpus
Una vez que tengamos claro el tipo de resouce pool que queremos, asignaremos una propiedad u otra, en mi caso he asignado los siguientes valores
Zona Osiris Integration
# zonecfg -z osirisZona Gnosis Production
zonecfg:osiris> add capped-cpu
zonecfg:osiris:capped-cpu> set ncpus=0,75
zonecfg:osiris:capped-cpu> end
zonecfg:osiris> verify
zonecfg:osiris> commit
# zonecfg -z gnosisCreación del project, grupo y usuario
zonecfg:gnosis> add capped-cpu
zonecfg:gnosis:capped-cpu> set ncpus=1,75
zonecfg:gnosis:capped-cpu> end
zonecfg:gnosis> verify
zonecfg:gnosis> commit
Como ye hemos comentado antes, ahora los valores del tamaño máximo de segmento, semáforos, etc. se asignan mediante project de esta forma, es posible modificarlos en caliente. El valor de max-shm-memory será 1/4 de la memoria total del sistema según Metalink
# projadd group.dba
# projmod -sK "process.max-msg-qbytes=(privileged,65536,deny)" group.dba
# projmod -sK "process.max-sem-nsems=(privileged,4096,deny)"group.dba
# projmod -sK "project.max-shm-memory=(privileged,2147483648,deny)" group.dba
# groupadd -g 2010 group.dba
# useradd -s /bin/bash -d /export/home/oracle -m -g dba oracle
Configuración del profile del usuario oracle
Aunque no es necesario, ya que se puede establecer siempre de forma manual, creo que es más recomendable crearlo, yo utilizo siempre el profile para evitar problemas al asignar los ORACLE_HOME u ORACLE_SID
# zlogin osiris
[Conectado a la zona 'osiris' pts/4]
Last login: Tue Aug 4 18:49:24 on pts/4
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
# su - oracle
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
$ id -p
uid=2011(oracle) gid=2010(dba) projid=100(group.dba)
$ vi .profileCrearemos la estructura de directorios para la instalación
# asignamos la mascara por defecto
umask 027
# configuracion del path y demas
PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin
export PATH
# configuracion activa
ORACLE_ACTIVE=VOLDEMORT
# usuario de sistema para oracle
ORACLE_SYSTEM_USER=oracle
# version de DB
ORACLE_DB_VERSION=10.2
# directorios de trabajo de oracle
ORACLE_BASE_PATH=/u01/app/${ORACLE_SYSTEM_USER}/${ORACLE_DB_VERSION}/db
ORACLE_HOME=$ORACLE_BASE_PATH
ORACLE_SID=$ORACLE_ACTIVE
export ORACLE_BASE ORACLE_HOME ORACLE_SID
# REV 1.2
OFA_SUPPORT=Yes
# configuracion del path y demas
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export PATH
# REV 1.1
ODBCINI=/etc/odbc.ini
ODBCSYSINI=/etc
export ODBCINI ODBCSYSINI
# mostramos la configuracion activa
echo "*****************************************************"
banner ${ORACLE_SYSTEM_USER}
echo "*****************************************************"
echo "ORACLE configurado con:"
echo "ORA_SID: $ORACLE_ACTIVE"
echo "ORA_HOME: $ORACLE_HOME"
if [ -a /etc/odbc.ini ]; then
echo "ODBC_SUPPORT: YES"
echo "+ ODBC_HOME: $ODBCSYSINI"
echo "+ ODBC_FILE: $ODBCINI"
else
echo "ODBC_SUPPORT: ** NO **"
fi
echo "USING_OFA: ${OFA_SUPPORT}"
# finalizamos mirando el correo
MAIL=/usr/mail/${LOGNAME:?}
# mkdir /u01 /u02 /u03 /u04 /u05Ya tenemos todo preparado para poder comenzar con la instalación de Oracle 10g en nuestra zona de Solaris, puedes continuar con el proceso en la segunda parte de Instalación de Oracle 10g en Solaris - Parte 2
# chown oracle:dba /u0?
# chmod 750 /u0?
Referencias
Suscribirse a:
Entradas (Atom)