Hola a todos, este es el primer post de este blog, aqui le mostrare como hacer un servidor espejo (mirrors), a nivel de archivo en GNU / Linux.
ALGUNOS EJEMPLOS, para lo cuales le puede servir este -COMO-:
1. Digamos que desea sincronizar todos los usuarios automaticamente de un servidor padre a otros servidores.
2. Tiene un servidor de archivo con samba en la principal y en la sucursales quieres instalar localmente servidores de archivos pero que esten todo sincronizados.
3. Desea hacer backup automatico de archivos a nivel diferencial.
4. Desea hacer migraciones de un servidor mas antiguo a uno nuevo mas potente.
* Podriamos enumerar otros ejemplos, pero la idea fundamental de este -COMO- es sincronizar todos los usuarios de un servidor padre a otros hijos.
QUE NECESITAMOS:
1. Tener instalado GNU / Linux (No importa que distribuccion sea: RED HAT, SUSE, CENTOS, DEBIA, UBUNTU, SLACKWARE, etc...)
2. Tener rsync instalado en tus Servidores o PCs.
3. Antes de realizar este COMO hacer un backup (home, root, passwd, shadow y group) del servidor y los espejos.
INSTALANDO RSYNC.
En CENTOS (Sirve para cualquier distribuccion basada en .rpm que tenga yum).
$ sudo yum install rsync
En el caso de Red Hat (RHEL).
$ up2date rsync
En DEBIAN (Sirve para cualquier Distribuccion basada en .deb que tenga apt).
$ sudo apt-get install rsync
CONFIGURACION DEL SERVIDOR
Entramos al Servidor padre y como vamos a ejecutar a rsync a partir del xinetd, debemos asegurarnos de que está asociado al puerto 873/tcp dentro del archivo /etc/services. Para ello hay que comprobar que el archivo contiene un línea como la siguiente:
rsync 873/tcp #
rsync 873/udp #
Verificamos con:
cat /etc/services |grep rsync
Ahora debemos activar el servicio dentro de xinetd (Editando el archivo de rsync en /etc/xinetd.d/rsync):
# vim /etc/xinetd.d/rsync
Deberia quedar de esta manera:
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
services rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
* Si el archivo no existe debe crearlo en /etc/xinetd.d/ con el nombre de rsync y copiar el contenido anterior.
Ahora vamos a configurar el servicio de rsync, para esto necesitamos editar dos archivos (/etc/rsyncd.conf y /etc/rsyncd.secrets), sino existen debemos crearlos.
rsyncd.conf: sirve para la configuracion.
rsyncd.secrets: sirve para especificar cuales usuarios pueden sincronizar.
/etc/rsyncd.conf
gid = nobody
uid = nobody
read only = true
use chroot = no
hosts allow = 192.168.x.x,192.168.x.x #IP_DE_LOS_SERVIDORES HIJOS
uid = nobody
read only = true
use chroot = no
hosts allow = 192.168.x.x,192.168.x.x #IP_DE_LOS_SERVIDORES HIJOS
hosts deny = *
max connections = 2
syslog facility = daemon
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
exclude=/usr/ \
exclude=/boot/ \
exclude=/ \
exclude=/etc/ \
max connections = 2
syslog facility = daemon
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
exclude=/usr/ \
exclude=/boot/ \
exclude=/ \
exclude=/etc/ \
[usuarios]
path=/opt/script/sincronizacion/usuarios
path=/opt/script/sincronizacion/usuarios
comment = "Este directorio contiene una copia de los usuarios del sistema"
[home]
path=/home
comment = "Archivos home de los usuarios".
[root]
path=/root
comment = "Archivos del root"
[home]
path=/home
comment = "Archivos home de los usuarios".
[root]
path=/root
comment = "Archivos del root"
/etc/rsyncd.secrets
nombre_usuario:password
Para mejor seguridad le cambiamos los permisos a estos archivos:
#chmod 644 /etc/rsyncd.conf
#chmod 700 /etc/rsyncd.secrets
Para mas seguridad podemos retringir las conexiones de los hosts.
# vim /etc/hosts.deny
Lo dejamos como este:
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
ALL:ALL:DENY
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
ALL:ALL:DENY
Luego agregamos los equipos que se conectan:
# vim /etc/hosts.allow
Lo dejamos como este:
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
rsync:192.168.x.x:allow
rsync:192.168.x.x:allow * Si deseamos que utilice cualquier servicio debemos colocar "ALL" en vez del rsync.
* Recuerde cambiar la IP por la que lleva su red.
PREPARANDO LO QUE SE VA A COPIAR.
Ya que tenemos el servidor configurado, ahora como indicamos al principio nos enfocaremos en sincronizar los usuarios del sistemas con los servidores espejos.
* Le Recomiendo tener la misma distribuccion, version e instalacion de servicios en todos los servidores, ya que el manejo de los UID y GID segun cada distribuccion.
Vamos a crear un carpeta, la cual compartimos en el /etc/rsyncd.conf (si revisan su archivo de rsyncd.conf veran que ya la agregamos anteriolmente.)
# mkdir -p /opt/script/sincronizacion/usuarios
Para evitar tener que mover grandes informaciones del home de cada usuario, ademas de no estar complicandolo con copias diferenciar local y dejar que rsync se encargue de esta parte diferenciar, vamos a crear un link del home en "/opt/script/sincronizacion/usuarios".
# vim /opt/script/script_copia_archivos_usuarios.sh
Aqui esta el contenido:
#!/bin/bash
# Angel J. Reynoso
# Tel.: 809-997-4870
# - kp01 -
# - GTS - Green Tecnology Services
# Creado: 30/01/2006
# Modficado: 09/03/2011
#######################################
# Este archivo se utiliza para copiar los archivos relacionado a las cuentas de cada usuarios.
# Angel J. Reynoso
# Tel.: 809-997-4870
# - kp01 -
# - GTS - Green Tecnology Services
# Creado: 30/01/2006
# Modficado: 09/03/2011
#######################################
# Este archivo se utiliza para copiar los archivos relacionado a las cuentas de cada usuarios.
# Variables.
RUTA1="/opt/script/sincronizacion"
RUTA2="/etc"
# Preparando los Logs.
echo "Fecha de Inicio: $(date)" 2>> $RUTA1/log.log
echo "------------------------------------------------------" 2>> $RUTA1/log.log
# Proceso.
cp -rp $RUTA2/passwd $RUTA1/usuarios/ 2>> $RUTA1/log.log
cp -rp $RUTA2/shadow $RUTA1/usuarios/ 2>> $RUTA1/log.log
cp -rp $RUTA2/group $RUTA1/usuarios/ 2>> $RUTA1/log.log
RUTA1="/opt/script/sincronizacion"
RUTA2="/etc"
# Preparando los Logs.
echo "Fecha de Inicio: $(date)" 2>> $RUTA1/log.log
echo "------------------------------------------------------" 2>> $RUTA1/log.log
# Proceso.
cp -rp $RUTA2/passwd $RUTA1/usuarios/ 2>> $RUTA1/log.log
cp -rp $RUTA2/shadow $RUTA1/usuarios/ 2>> $RUTA1/log.log
cp -rp $RUTA2/group $RUTA1/usuarios/ 2>> $RUTA1/log.log
Le damos permiso de ejecuccion:
#chmod +x /opt/script/script_copia_archivo_usuario.sh
Bien, si lo desean podemos hacer una prueba ejecuntado el sript:
#/opt/script/script_copia_archivo_usuario.sh
Ya tenemos todo casi listo, solo falta programa este script en el CRONTAB para que la realice cada X tiempo.
CONFIGURACION DE LOS CLIENTES (Servidores HIJOS):
Estos es mas sencillo, la idea es crear un script que programemos para que sincronice con el servidor los directorios "home, root y usuarios" a X horas y luego otro script que copie los archivos "passwd, group y shadows".
Recuerda que los archivos del home y root se sincronizan solo, osea que el segundo script solo copiara los archivos "passwd, group y shadow".
Vamos a crear el directorio donde estaran los scripts.
# mkdir -p /opt/script/sincronizacion
Ahora creamos el script que sincroniza con el servidor.
# vim /opt/script/sincronizacion/sinc_automatica.sh
Aqui esta el contenido:
#!/bin/bash
# Angel J. Reynoso
# Tel.: 809-997-4870
# - kp01 -
# - GTS - Green Tecnology Services
# Creado: 30/01/2006
# Modficado: 09/03/2011
#######################################
# Este archivo se utiliza para sincronizar del directorio usuario creado en /opt/script/sincronizacion en el servidor.
# Variables.
SERVIDOR="192.168.x.x" #Coloque aqui la ip de su servidor
COMANDO=$(whereis rsync | cut -d" " -f2)
COMANDO=$(whereis rsync | cut -d" " -f2)
RUTA1="/opt/script/sincronizacion"
# Sincronizacion de la carpeta usuario.
echo "Fecha de Inicio: $(date)" >> $RUTA1/log.log
echo "---------------------------------------" >> $RUTA1/log.log
# USUARIOS
$COMANDO --force --delete -azvpogLt $SERVIDOR::usuarios $RUTA1/usuarios 2>> $RUTA1/log.log
# HOME
$COMANDO --force --delete -azvpogLt $SERVIDOR::home $RUTA1/usuarios 2>> $RUTA1/log.log
# ROOT
$COMANDO --force --delete -azvpogLt $SERVIDOR::root $RUTA1/usuarios 2>> $RUTA1/log.log
echo "Fecha Final" >> $RUTA1/log.log
echo "***************************************" >> $RUTA1/log.log
Luego creamos el script que copiara los archivos "passwd, group y shadow".
# vim /opt/script/sincronizacion/copiar_automatica.sh
Aqui esta el contenido:
#!/bin/bash
# Angel J. Reynoso
# Tel.: 809-997-4870
# - kp01 -
# - GTS - Green Tecnology Services
# Creado: 30/01/2006
# Modficado: 09/03/2011
#######################################
# Este archivo se utiliza para copiar del directorio /opt/script/sincronizacion/usuarios/ los archivos passwd, group y shadow que fueron sincronizado del servidor al /etc.
#Variables
RUTA1="/opt/script/sincronizacion/usuarios"
RUTA2="/etc/"
#Proceso.
echo "Fecha inicio de la Copia: $(date)" >> $RUTA1/../log.log
cp -rp $RUTA1/* $RUTA2 2>> $RUTA1/../log.log
RUTA2="/etc/"
#Proceso.
echo "Fecha inicio de la Copia: $(date)" >> $RUTA1/../log.log
cp -rp $RUTA1/* $RUTA2 2>> $RUTA1/../log.log
Listo.
Si necesitan ayuda pueden dejar sus comentarios o comunicarce conmigo.
Saludos.-
Angel J. Reynoso
kp01
Tel.: 829-997-4870
kp01aj@gmail.com
Holaaa muchas gracias x compartirlo!! Pero tengo una duda, yo en realidad necesito mantener la copia de un servidor samba, la pregunta es existe la forma de tener una copia espejo de samba osea si el servidor principal se cae, que el secundario levante solo??? Saludos y muchas gracias!!
ResponderEliminarClaro hermano... tienes muchas opciones para resolver ese problema, puedes crear un servidor BDC, asi podras respaldar tu dominio... entra a este link y hasme saber si te sirve: http://dns.bdat.net/documentos/validacion_ldap/x498.html.
ResponderEliminarBuena tu explicación, pero aun leyendo tengo una duda, si esto se refiere tambien a el caso que yo tengo:
ResponderEliminarManejo un servidor con Centos 5.6 x64 en el cual estan dos discos instalados uno con todo el sistema Centos y una BD la cual deseo se sincronice con el segundo disco pero lo que no se es:
1. que comando utilizo para saber si esta o no activo el segundo disco. Si no, entonces como activarlo
2. como configurar el segundo disco para que sea un espejo del primero.
Es posible esto o tiene que ser siempre entre 2 servidores
Saludos Angel
Hola hermano,
ResponderEliminarEsta pequeña GUIA esta orientada a trabajar con archivos entre servidores o localmente, puede servirte pero entiendo que para lo que deseas hacer no es lo optimo.
Espero ayudarte con las siguientes repuestas:
1. Para saber si los discos están reconocido en el sistema, a mi en lo personal me gusta usar este comando: "cat /proc/partitions", luego veo si están montado con "mount", Pero me gustaría saber si en la instalación usaste LVM, RAID o disco separados, para poder ayudarte mejor.
2. Hacer espejo entre discos, claro que es posible, lo único que la forma como lo haga depende del Hardware que tengas, ya que algunos servidores vienen con tarjetas que te hacen la replicación entre discos, si tu hardware trae este soporte solo tienes que entrar al BIOS o software manejador de esa tarjeta y programar tu arreglo, sino tiene un hardware con estas cualidades puede hacerlo tu mismo a nivel de software en tu instalación inicial o si ya instalaste desde el sistema, puedes hacerlo también con script que te hagan esta replicación automática. También hay algunos software que hacen esto.
Aquí puede encontrar mas información.
http://es.wikipedia.org/wiki/RAID
http://lamaquinadiferencial.wordpress.com/2009/02/22/raid-1-por-software-en-ubuntu-debian-discos-en-espejo/
http://es.wikipedia.org/wiki/Logical_Volume_Manager
http://iie.fing.edu.uy/ense/asign/admunix/discos.htm
http://www.monografias.com/trabajos14/discosraid/discosraid.shtml
Saludos.
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuen dia, si lo que requiero es tener un servidor espejo de mi www en caso de que se caiga levante el servidor hijo? gracias
ResponderEliminar