Instalar XCache en CentOS 5

Breves instrucciones para compilar y instalar Xcache en Centos 5. No tiene mayor dificultad.

# wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
# tar -zxf xcache-1.2.2.tar.gz
# cd xcache
# phpize
# ./configure –enable-xcache
# make
# su
# make install

Instala las extesiones compartidas de php : /usr/lib/php/modules

# cat xcache.ini >> /etc/php.ini

Editamos php.ini para instalar Xcache como extension

# joe /etc/php.ini

zend_extension = /usr/lib/php/modules/xcache.so

La configuración del xcache está explicada en comentarios en el propio php.ini, pero hay cosas relevantes como el xcache.count, relativo al número de procesadores de nuestro sistema. Averiguamos el número de procesadores y luego editamos el php.ini

# cat /proc/cpuinfo |grep -c processor
xcache.count = 4

Las demás variables se pueden configurar fácilmente leyendo la documentación. Ahora podemos crear un archivo php con la función phpinfo ( ) y moverlo a nuestro directorio root para comprobar que Xcache funciona correctamente. No olvidemos reiniciar Apache!

# /etc/init.d/httpd restart

Instalar el Admin

Para instalar el admin primero creamos un fichero php como el siguiente para obtener el password encriptado en md5

echo md5("password");

Copiamos el resultado en php.ini, en la variable xcache.admin.pass

xcache.admin.pass = "password_en_md5"

Ahora copiamos el directorio web de Xcache a nuestro document root de apache


# cp -R admin/* /var/www/midominio.com/admin/.

Reiniciamos Apache. Accedemos al admin, introduciendo user y password.

Sobre el Error Segmentation Fault

Algo que me sucedió en la instalación de Xcache en Centos 5. Al comprobar los logs de Apache comprobé que había numerosos errores de Segmentation Fault.

# php -v
Segmentation fault

# cat /var/log/httpd/error_log
[Thu Oct 02 13:43:39 2008] [notice] child pid 15978 exit signal Segmentation fault (11)
[Thu Oct 02 13:43:42 2008] [notice] child pid 15979 exit signal Segmentation fault (11)
[Thu Oct 02 13:43:50 2008] [notice] child pid 15980 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:08 2008] [notice] child pid 15981 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:12 2008] [notice] child pid 15982 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:33 2008] [notice] child pid 15983 exit signal Segmentation fault (11)

Para evitarlo hacemos lo siguiente


# rm /dev/zero
# mknod /dev/zero char 1 5
# /etc/init.d/httpd restart

Otro problema relativo. Aunque creemos el fichero /dev/zero, por una limitación (no se si de php.ini o el propio kernel) puede que el valor de cache que asignamos a xcache.size es superior a lo que puede guardar y eso provoca el siguiente error:

xcache /dev/zero: No space left on device

Para arreglar, hemos de reducir el valor asignado a xcache.size, por ejemplo empezando por 8M y reiniciando apache. No deberíamos ver más ese error ni Segmentation Faults en el apache. Y si los hay, deberían ser por otro motivo que no fuera Xcache.

Monitoriza tu servidor con Glance

glances

Al igual que conocéis Htop, en está ocasión vamos a ver que es y como se instala Glance.

Glance es una herramienta de monitoreo basado en CLI curses para GNU/Linux y BSD OS. Glance es mucho más completo que el ultra conocido HTOP.
Glances utiliza la librería PsUtil para obtener la información del sistema. Está desarrollada en Phyton.

glance-screenshot

Instalación

Pre-requisitos:

  • Python 2.6+ (no probado con Python 3+)
  • build-essential (para instalación vía Pypi y setup.py)
  • python-dev (para instalación vía Pypi)
  • python-setuptools (para instalación vía setup.py)
  • python-psutil 0.4.1+ (reemplaza las librería anteriores libstatgrab’s lib)
  • python-jinja2 2.0+ (opcional para exportar a HTML)
  • pysensors (librería Python para estadísticas de sensores)

Desde administrador de paquetes (la manera mas fácil)

Paquetes existen para Debian (SID), Arch, Fedora, RedHat, FreeBSD

Desde PyPi (forma facil y multiplatforma)

PyPi es una administrador de paquetes no oficial.

Primero necesitas instalar pypi en tu sistema. Por ejemplo en Ubuntu/Xubuntu:


sudo apt-get install python-pip build-essential python-dev

Luego, instalar la ultima version de Glance:


sudo pip install Glances

Esta instalación es básica para servidores y/o equipos con sistemas Debian/Ubuntu. Para instalar Glance en servidores basados en RHEL/Centos hay que instalar repositorios EPEL y después hacer


yum -y install python-pip

Ejecucion de Glance

En modo Standalone

Si quiere monitorear la maquina local, ejecuta:

glance

En modo cliente/servidor

Si quieres monitorear un maquina remotamente (llamado servidor) desde otra (llamada cliente)

Ejecuta este comando en el servidor:


server$ glances -s

Y este en el cliente:


client$ glances -c @server

Donde @server es la IP del servidor o el nombre del servidor

Glance utiliza el esquema de servicio XML/RPC y puede ser usado por otro software cliente

Guía de usuario

Por defecto las estadísticas se actualizan cada segundo, para cambiar esto puede usar la opción -t. Por ejemplo para definir la actualización cada 5 segundos seria:

glances -t 5

Las estadisticas importantes estan coloreadas como:

  • VERDE: conteo de estadísticas es “OK”
  • AZUL: conteo de estadistica es “CAREFUL” (Cuidado)
  • MAGENTA: conteo de estadistica es “WARNING” (Alarma)
  • ROJO: conteo de estadística es “CRITICAL” (Critico)

Cuando Glance esta en ejecucion puedes presionar las siguiente teclas:

‘h’ muestra el mensaje de ayuda en pantalla con las teclas que puedes utilizar

‘a’ definir el método automático. Los procesos son ordenados automaticamente

Si CPU > 70%, ordena los procesos por consumo de CPU

Si MEM > 70%, orden los procesos por consumo de tamaño de memoria

‘b’ intercambia entre bit/s o byte/s para la E/S de red

‘c’ ordena la lista de procesos por consumo de CPU

‘d’ habilita/deshabilita las estadísticas de I/O en disco

‘e’ habilita el modulo de sensores (la librería PySensors es necesaria; Solo Linux)

‘f’ hablita/deshabilita las estadísticas del sistema de archivos

‘l’ habilita/deshabilita el logeo de la aplicación.

‘m’ ordena la lista de procesos por consumo de memoria

‘n’ habilita/deshabilita las estadisticas de la interfaz de red

‘p’ ordena por el nombre del proceso

‘w’ elimina los WARNING finalizados (que ya no estan) del archivo log

’1′ intercambia entre las estadisticas globales del CPU y las estadisticas particulares por cada CORE

‘q’ salir de la aplicacion

En modo servidor, puede definir la IP donde escuchara las peticiones (-B DIRECCION) y el puerto (-p PUERTO)

En el modo cliente, puede definir el puerto del servidor con -p PUERTO

La IP de escucha por defecto es 0.0.0.0, es decir, en todas las que tenga el equipo.

Si teneis alguna pregunta sobre Glance, decirlos en los comentarios!! Be water my friends!!

Instalar Varnish en CentOS 5 y CentOS 6

Varnish es un acelerador para HTTP que está causando furor en el mundo del hosting y en general en el mundo Linux. Varnish aparece como alternativa al poderoso Nginx, que durante mucho tiempo fue el rey en cuanto a la optimización a nivel de cache, proxy y balanceo de carga para los servicios web. Varnish además de hacer todo lo que hace Nginx con mejor rendimiento, también tiene algunas característiacs destacables, como por ejemplo:

  • Lenguaje propio VLC, que permite al usuario manipular varnish a su gusto.
  • Concebido desde el comiento para utilizarse en sistemas 64 bits
  • Soporte parcial de ESI
  • No necesita reiniciar para tomar los cambios de configuraciones

La forma de funcionar de Varnish es muy sencilla, pero a la vez efectiva:  se guarda la información de cada request en la memoria virtual y el S.O es quien decide qué es guardado y que es paginado al disco duro. Esto es muy útil para que no se cachee información mientras se mueve al disco duro por otras aplicaciones.

varnish

Cada request desde el cliente genera hilos independientes y una vez se llega al límite de hilos, las nuevas conexiones son puestas en cola y recién a medida que se liberan otras, estas nuevas comienzan a despacharse. Sólo si la cola de peticiones pendientes alcanza un gran límite recién serán descartadas.

Un escenario ideal es tener apache, lighttpd o nginx en el puerto 8080 y Varnish en el 80 para actuar como proxy delante del webserver. En fin, ahora que ya tenemos una ideal general de como funciona, vamos a la parte divertida:

Para instalar Varnish vamos a seguir los siguientes pasos:

Si bien este repo es para RHEL/CentOS 5.x, funciona perfecto en la versión CentOS 6.x.

Instalamos el repositorio:

 rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm 

Instalamos Varnish

yum install varnish 

Lo configuramos para iniciar al arranque del sistema:

chkconfig varnish on 

Iniciamos Varnish

service varnish start 

Para comprobar si está funcionando, basta con tipear:

service varnish status

Finalmente, resta configurar el servicio desde dos archivos clave:

/etc/sysconfig/varnish, para configurar el servicio a nivel general

/etc/varnish/default.vlc, para configurar las directivas propias que afectarán a cada sitio web.

 

Más información en la web oficial de Varnish

Cluster Mysql con CentOS, DRBD y Heartbeat

Heartbeat (High Availability)Distributed Replicated Block Device

CentOS + DRBD + HeartBeat + MYSQL DRBD (Distributed Replicated Block Device), es un sistema para almacenamiento distribuido usado en Linux para realizar replicaciones de sistemas de archivos por bloques. Este paquete consiste en un modulo del Kernel drbd-kmod, y scripts que permiten que se puedan realizar replicaciones muy similares a un RAID 1, en red. DRBD se suele usa acompañado de herramientas de High Availability (HA), como Heartbeat, para lograr servidores de alta disponibilidad.

Paquetes Necesarios

En el siguiente ejemplo utilizaremos como base un sistema 32 bits, para lo cual necesitaremos instalar por Yum, o por RPM los siguientes paquetes.
• drbd.i386
• kmod-drbd.i686
• MySQL-server <– Aplica a nuestro caso se puede usar cualquier otro servicio.
• Heartbeat*
• Gnutls*
• Ipvsadm*

Para ejecutar el modulo de drbd en el kernel debemos ejecutar lo siguiente:

• modprobe drbd

Instalación del Sistema Operativo CentOS.
El sistema operativo lo instalaremos como una instalación normal, con las particiones que deseemos para el, con la única diferencia que dejaremos un espacio sin particionar para ser usado por DRBD, en esta partición almacenaremos en el futuro las aplicaciones que deseemos administrar con DRBD, por ejemplo, si deseamos como es nuestro caso que DRBD mantenga actualizado nuestro MySQL, debemos asegurarnos que TODA la data del MySQL se este almacenando en el volumen lógico del DRBD.

Preparación de la partición de DRBD

Para particionar el volumen que hemos dedicado a nuestro DRBD, será necesario crear un volumen físico, luego agruparlo y por último crear el volumen lógico, de la siguiente forma.
• Pvcreate /dev/sda5 <–/dev/sda5 dependerá de la partición que nos de fdisk –l
• Vgcreate drbd /dev/sda5 <– drbd es el nombre que le daremos al grupo de volúmenes.
• Lvcreate -L1024M -n mysql-drbd drbd <– mysql-drbd es el nombre que le daremos a nuestro volumen lógico.

Configurar DRBD

Una vez hayamos preparado las particiones de DRBD en ambos servidores, es momento de proceder a realizar la configuración de DRBD, esto consiste en editar un fichero ubicado en la ruta /etc/drbd.conf, este archivo tiene características muy peculiares dependiendo de lo que deseamos realizar. En nuestro caso esta adaptado a las necesidades de MySQL, y quedaría de la siguiente forma.

# Our MySQL share
resource db {
protocol C;
handlers {pri-on-incon-degr “echo ‘!DRBD! pri on incon-degr’ | wall ; sleep 60 ; halt -f”; }
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; } # or panic, …
syncer { rate 6M; }
on srv-nodo01-drbd {
device /dev/drbd1; #Este es el device que se crea para DRBD
disk /dev/mysql_drbd/mysql-drbd; #Este es el volumen lógico que creamos
address 10.134.16.210:7789; #ip servidor nodo01
meta-disk internal;
}
on srv-nodo02-drbd {
device /dev/drbd1;
disk /dev/mysql_drbd/mysql-drbd;
address 10.134.16.209:7789;
meta-disk internal;
}
}

Este es el contenido del archivo /etc/drbd.conf, y debe ser igual en ambos equipos por ende podemos hacer simplemente un scp o un rsync entre ambos para copiarlo.

Una vez configurado nuestros DRBD, debemos iniciar el servicio pero antes debemos crear los recursos que hemos configurado, en nuestro caso como se puede observar en el archivo el recurso se llama “db”, por tal motivo ejecutaremos el siguiente comando e iniciamos el servicio.

drbdadm create-md db

La ejecución de este comando dará las siguientes respuestas:

[root@node1 etc]# drbdadm create-md db
v08 Magic number not found
v07 Magic number not found
About to create a new drbd meta data block on /dev/sda5.
. ==&gt; This might destroy existing data! &lt;== Do you want to  proceed? [need to type 'yes' to confirm] yes Creating meta data…  initialising activity log NOT initialized bitmap (256 KB) New drbd meta  data block sucessfully created.</blockquote>
service drbd start 

Podemos ver que el servicio esta funcionando correctamente si ejecutamos lo siguiente en ambos equipos.

cat /proc/drbd
[root@node1 etc]# service drbd start

Starting DRBD resources:    [ d0 n0 ]. …… 
[root@node1  etc]# cat /proc/drbd version: 8.0.4 (api:86/proto:86) SVN Revision:  2947 build by buildsvn@c5-i386-build, 2007-07-31 19:17:18  . 0:  cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r—   .  ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0    . resync:  used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0 act_log:  used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
[root@node1  etc]# ssh root@node2 cat /proc/drbd   version: 8.0.4 (api:86/proto:86)  SVN Revision: 2947 build by buildsvn@c5-i386-build, 2007-07-31 19:17:18   . 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C  r—   . ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0    . resync:  used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0 act_log:  used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

En este punto si nos fijamos en los resultados del comando anterior podremos observar que ambos nodos están configurados como secundarios, y como es de suponerse necesitamos que uno de ellos al menos, sea primario. Para realizar esta tarea es necesario hacer lo siguiente.

[root@node1 etc]# drbdadm — –overwrite-data-of-peer primary db
[root@node1 etc]# watch -n 1 cat /proc/drbd

version:  8.0.4 (api:86/proto:86) SVN Revision: 2947 build by  buildsvn@c5-i386-build, 2007-07-31 19:17:18  . 0: cs:SyncTarget  st:Primary/Secondary ds:Inconsistent/Inconsistent C r—   . ns:0 nr:68608  dw:68608 dr:0 al:0 bm:4 lo:0 pe:0 ua:0 ap:0    .  [&gt;...................] sync’ed:  0.9% (8124/8191)M finish: 0:12:05  speed: 11,432 (11,432) K/sec resync: used:0/31 hits:4283 misses:5  starving:0 dirty:0 changed:5 act_log: used:0/257 hits:0 misses:0  starving:0 dirty:0 changed:0

En este punto está listo configurado y operativo el DRBD, por lo que podemos formatear nuestro volumen lógico para dejarlo preparado para recibir información, de la siguiente forma.

mkfs.ext3 /dev/drbd1 ; mkdir /db ; mount /dev/drbd1 /db

Para probar ahora que todo este funcionando como esperamos podemos crear archivos falsos en nuestra partición, e intercambiar los roles de primario y secundario para verificar que se estén sincronizando nuestros archivos, para esto podemos seguir los siguientes pasos.

[root@node1 etc]# for i in {1..5};do dd if=/dev/zero of=/db/file$i bs=1M count=100;done

Este comando creará 5 ficheros de 100 megabytes, con el nombre file 1,file 2,file 3, file 4, file 5. Después de hacer el cambio de nodos manualmente como se describe a continuación, podremos verificar que nuestros ficheros se han replicado.

[root@node1 /]# umount /db ; drbdadm secondary db
[root@node2 /]# mkdir /db ; drbdadm primary db ; mount /dev/drbd1 /db
[root@node2 /]# ls /db/ file1  file2  file3  file4  file5  lost+found

Ahora podemos realizar el proceso contrario para verificar qque si por algún motivo nuestro nodo01 falla, la información del nodo02 podrá ser replicada al nodo01 sin problemas.

[root@node2 /]# rm /db/file2 ; dd if=/dev/zero of=/db/file6 bs=100M count=2
[root@node2 /]# umount /db/ ; drbdadm secondary db
[root@node1 /]# drbdadm primary db ; mount /dev/drbd1 /db
[root@node1 /]# ls /db/ file1  file3  file4  file5  file6  lost+found

En este punto ya hemos comprobado que nuestro DRBD funciona correctamente, y por ende solo nos queda configurar la última herramienta de HA, Heartbeat, que lo haremos después de configurar MySQL con las particiones de DRBD

Configuración de MYSQL

Para configurar MySQL con las particiones de DRBD es simple en nuestro archivo /etc/my.cfg, tenemos una directiva que nos dice donde se almacena la data de MySQL, esta directiva es datadir=/var/lib/mysql en este caso el datadir apunta al directorio /var/lib/MySQL, lo que haremos ahora es simplemente mover el directorio /var/lib/MySQL, a /db y luego crearemos un enlace simbólico lo que será suficiente para que la data almacenada por MySQL se escriba en nuestro volumen lógico. Para esto debemos detener el servicio de MySQL previamente.

Nodo 01
[root@node1 /]# service mysqld stop
[root@node1 /]# mkdir /db/mysql
[root@node1 /]# chown -R mysql.mysql /db/mysql
[root@node1 /]# mv /home/mysql/data /db/mysql/data
[root@node1 /]# ln -s /db/mysql/data /home/mysql/data
Nodo 02
[root@node2 /]# service mysql stop
[root@node2 /]# mv /home/mysql/data /tmp
[root@node2 /]# ln -s /db/mysql/data /home/mysql/data

Una vez realizado esto ya estan preparados nuestros dos nodos, por lo que procederemos a iniciar Mysql en el Nodo01.

Configuración de Heartbeat

La configuración de Heartbeat consiste básicamente en 5 pasos que en su mayoría deberán ser ejecutados y realizados de forma idéntica en cada equipo.

• Editar el fichero vi /etc/sysctl.conf de la siguiente forma:

net.ipv4.ip_forward = 1

• Verificar que los servicios necesarios estén ejecutándose

chkconfig –level 2345 heartbeat on
chkconfig –del ldirectord

• Editar el fichero de heartbeat /etc/ha.d/ha.cf de la siguiente forma en AMBOS nodos:

#/etc/ha.d/ha.cf content

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694 #si hay varios heartbeat es necesario editar el Puerto
bcast eth0 # Linux
auto_failback on #(This will failback to machine1 after it comes back)
ping 10.10.150.100 #(Your gateway IP)
apiauth ipfail gid=haclient uid=hacluster
node machine1.myhost.com
node machine2.myhost.com

• Editar el fichero /etc/ha.d/haresources al igual que el ha.cf idénticos en ambos nodos.

#/etc/ha.d/haresources content
machine1.myhost.com  LVSSyncDaemonSwap::master IPaddr2::10.10.150.3/24/eth0:1 drbddisk::db  Filesystem::/dev/drbd1::/db::ext3 mysqld

• Ahora debemos editar el fichero de seguridad que nos permitirá que el heartbeat se autentifique entre el nodo01 y nodo02 únicamente, también deben ser idénticos en ambos nodos.

#/etc/ha.d/authkeys content
auth 2
2 sha1 YourSecretString

• Para evitar inconvenientes de permisología con le fichero de autenticación es necesario ejecutar el siguiente comando.

chmod 600 /etc/ha.d/authkeys

Herramientas de Diagnóstico

/etc/ha.d/resource.d/LVSSyncDaemonSwap master status

/etc/init.d/heartbeat status

/etc/init.d/mysqld status

Instalar y configurar cliente y servidor de hora NTP en CentOS 5

Hoy en día resulta muy importante tener nuestros equipos con la hora adecuada, tanto para saber a que hora suceden eventos, así como para simplemente enviar y/o recibir correo de forma adecuada.

Si se trata de un entorno laboral/empresarial esta actividad pasa a ser una norma, pues de esta forma estaremos seguros de los registros generados en los sitemas y de esta forma realizaremos seguimiento de forma acertada utilizando los registros del sistema.

Puede hallar una definición formal del protocolo NTP en: wikipedia

Instalamos y configuramos la parte cliente de NTP

Para cambiar la zona horaria en sistemas operativos basados en CentOS 5.4 es necesario validar que se encuentra instalado el paquete que nos permitirá establecer la zona horaria en la que nos encontramos, con el comando:

# yum list tzadata.noarch

Y la salida debería ser:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: mirrors.tummy.com
* base: mirrors.igsobe.com
* extras: centos.corenetworks.net
* updates: mirror.raystedman.net
Installed Packages
tzdata.noarch        2009k-1.el5           installed
tzdata.noarch        2009u-1.el5           installed

En caso que no esté instalado, proceda a instalarlo con el comando:

# yum install tzdata.noarch

Y luego proceda a configurar la zona horaria con el comando:

tzselect

Responde al asistente escogiendo tu zona horaria por ejemplo: América y luego Caracas.

Ahora bien, para crear un servidor NTP como un cliente de otro servidor NTP para que la hora se actualice automáticamente de forma periódica el procedimiento es el siguiente:

* Instalar el programa ntpdate

# yum install ntp.i386

* Agregas una tarea programada para que actualice la hora cada 4 horas:

# crontab -e

* Dentro de la edición del crontab agregas la siguiente línea:

0 */4 * * * /usr/sbin/ntpdate -u 2.pool.ntp.org

Instalamos y configuramos la parte servidor de NTP

* Se debe instalar el paquete ntpdate como fue indicado anteriormente

* Modificar archivo de configuración /etc/ntp.conf con los siguientes valores:

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
#restrict -6 default kod nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
#restrict -6 ::1

# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org

#broadcast 192.168.1.255 key 42         # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 key 42             # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 key 42  # manycast client

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /var/lib/ntp/drift

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys

# Specify the key identifiers which are trusted.
#trustedkey 4 8 42

# Specify the key identifier to use with the ntpdc utility.
#requestkey 8

# Specify the key identifier to use with the ntpq utility.
#controlkey 8

# Permisos que se asignara para cada servidor de tiempo.
# En los ejemplos, no se permite a las fuente consultar, ni
# modificar el servicio en el sistema ni enviar mensaje de
# registro.
restrict 0.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.centos.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery

# Se Activa la difusion hacia los clientes
broadcastclient

* Iniciar el servicio con:

# service ntpd start

* Agregar el servicio para que se inicie de forma automática con el sistema:

# chkconfig ntpd on

* Finalmente permitir al firewall recibir solicitudes de ntp de nuestros clientes agregando al archivo: /etc/sysconfig/iptables la siguiente línea:

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Antes de la línea:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

* Reiniciamos el firewall:

# service iptables restart

Y listoooooooooo ya tenemos nuestro propio cliente y servidor de hora NTP ¡¡¡¡¡
Si teneis alguna duda, comentarla¡¡¡