Pasar al Servidor Linux (Parte #1) - Preparación del Sistema

Actualizado el . Posteado en Blog. Visitado 1759 veces.

                               Migrar a Linux

Introducción


Existen muchos escenarios donde es posible que tenga que mover los datos y los requisitos operativos de un servidor a otro. Es posible que deba implementar sus soluciones en un nuevo centro de datos, actualizar a una computadora más grande o realizar la transición a un nuevo hardware a un nuevo proveedor de servidor.

Sean cuales sean sus razones, hay muchas consideraciones diferentes que debe hacer al pasar de un sistema a otro. Conseguir configuraciones funcionalmente equivalentes puede ser difícil si no está operando con una solución de administración de configuración como Chef, Puppet o Ansible. No sólo debe transferir datos, sino también configurar sus servicios para que operen de la misma manera en una computadora nueva.

En este tutorial, discutiremos cómo preparar sus sistemas de origen y destino para una migración. Esto incluirá obtener sus dos computadoras para comunicarse con las claves SSH y una investigación sobre qué componentes necesitan ser transferidos. Vamos a trabajar en la migración en el próximo artículo .

Hacer Copias de Seguridad


El primer paso a seguir es crear copias de seguridad nuevas. Sólo porque no debería haber un problema no significa que algo inesperado no va a suceder. No desea quedar en una situación en la que un comando rompe algo en su computaora de producción actual antes de que el reemplazo esté en funcionamiento.

Hay varias maneras diferentes de hacer una copia de seguridad de su servidor. Su selección dependerá de las opciones que tengan sentido para su escenario y de lo que le resulte más cómodo.

Si tiene acceso al hardware físico y un espacio de copia de seguridad (unidad de disco, USB, etc.), puede clonar el disco utilizando cualquiera de las muchas soluciones de copia de seguridad de imágenes disponibles. Un equivalente funcional cuando se trata con un servidor se toma una instantánea o imagen desde la interfaz del panel de control.

Otras opciones a menudo conservarán los datos y tal vez parte de la información sobre sus servicios. Todo depende del mecanismo de respaldo que desee implementar.

Una vez que haya completado las copias de seguridad, estará listo para continuar. Para el resto de esta guía, asumiremos que ha iniciado sesión en ambos sistemas como root.

Recopilar Información sobre el Sistema de Origen


Antes de comenzar la migración, debemos tomar las medidas iniciales para configurar nuestro sistema de destino para que coincida con nuestro sistema de origen.

Queremos igualar tanto como podamos entre el servidor actual y el que planeamos instalar. Si desea que la migración se realice sin problemas, entonces no debería tomar esto como una oportunidad para actualizar a la versión más reciente o probar cosas nuevas. Hacer cambios puede llevar a la inestabilidad ya los problemas en la línea.

La mayoría de la información básica que le ayudará a decidir qué sistema de servidor crear, se puede recuperar con un simple comando uname :

uname -r

3.2.0-24-virtual

Esta es la versión del kernel que nuestro sistema actual está ejecutando. Para que las cosas salgan bien, siempre es una buena idea tratar de igualar eso en el sistema de destino.

uname -m

i686

Esta es la arquitectura del sistema. i686 indica que se trata de un sistema de 32 bits. Si la cadena devuelta era x86_64 , esto significaría que se trata de un sistema de 64 bits.

También debe intentar igualar la distribución y la versión de su servidor de origen. Si no conoce la versión de la distribución que ha instalado en el equipo de origen, puede averiguarlo escribiendo:

cat /etc/issue

Ubuntu 12.04.2 LTS \n \l

Si es posible, debe crear su nuevo servidor con estos mismos parámetros. En este caso, crearíamos un sistema Ubuntu 12.04 de 32 bits. Si es posible, también intentaremos hacer coincidir la versión del kernel con el nuevo sistema.

Configurar el Acceso de Clave SSH entre Servidores de Origen y Destino


Necesitaremos que nuestros servidores puedan comunicarse para que puedan transferir archivos. La forma más fácil de hacerlo es con las teclas SSH. Aquí puede aprender a configurar las claves SSH en un servidor Linux.

Queremos crear una nueva clave en nuestro servidor de destino para que podamos agregarla al archivo authorized_keys nuestro servidor de origen. El nuevo servidor no tendrá una clave extraviada en su archivo authorized_keys cuando la migración esté completa.

En primer lugar, en su servidor de destino, compruebe que su usuario root no tiene una clave SSH (debe iniciar sesión como root) escribiendo:

ls ~/.ssh

authorized_keys

Si ves archivos llamados id_rsa.pub e id_rsa , entonces ya tienes claves y solo necesitarás transferirlos.

Si no ve esos archivos, cree un nuevo par de claves escribiendo:

ssh-keygen -t rsa

Pulse "Enter" en todas las indicaciones para aceptar los valores predeterminados.

Ahora, transfiera la clave al servidor de origen escribiendo:

cat ~/.ssh/id_rsa.pub | ssh other_server_ip "cat >> ~/.ssh/authorized_keys"

Ahora debe ser capaz de SSH libremente a su servidor de origen desde el sistema de destino escribiendo:

ssh other_server_ip 

No se le pedirá una contraseña si ha configurado correctamente.

Crear una Lista de Requisitos


Esta es en realidad la primera parte en la que va a hacer un análisis en profundidad de su sistema y los requisitos.

Durante el transcurso de las operaciones, sus requisitos de software pueden cambiar. A veces los servidores antiguos tienen algunos servicios y software que se necesitaban en un punto, pero han sido reemplazados.

Mientras que los servicios innecesarios deben ser deshabilitados y, si son completamente innecesarios, se necesita descubrir qué servicios se están utilizando en su servidor de origen y, a continuación, decidir si dichos servicios deberían existir en su nuevo servidor.

La forma en que descubre servicios y niveles de ejecución depende en gran medida del tipo de sistema "init" que emplea su servidor. El sistema init es responsable de iniciar y detener los servicios, ya sea a pedido al usuario automáticamente.

Descubriendo Servicios y Niveles de Ejecución en Servidores System V


System V es uno de los sistemas de init más antiguos todavía en uso en muchos servidores de hoy. Ubuntu ha intentado cambiar al sistema de inicialización de Upstart, y en el futuro puede estar pasando a un sistema de inicialización Systemd.

Actualmente, tanto los archivos de init de System V como los nuevos archivos de inicio de Upstart se pueden encontrar en los mismos sistemas, lo que significa que tendrás más lugares para ver. Otros sistemas utilizan el sistema V también. Puede ver si su servidor utiliza System V escribiendo:

which service

/usr/sbin/service

Si el comando devuelve una ruta del sistema, como lo hizo anteriormente, tiene System V en su sistema.

Puede obtener una idea de los servicios que se están ejecutando actualmente escribiendo esto:

service --status-all

 [ ? ]  acpid
 [ ? ]  anacron
 [ + ]  apache2
 [ ? ]  atd
 [ - ]  bootlogd
 [ ? ]  console-setup
 [ ? ]  cron
 [ ? ]  cryptdisks
 . . .

Esto mostrará todos los servicios que el sistema System-V init conoce. El "+" significa que el servicio se inicia, el "-" significa que se detiene, y el "?" Significa que System-V no conoce el estado del servicio.

Si System-V no conoce el estado del servicio, es posible que esté controlado por un sistema init alternativo. En los sistemas Ubuntu, esto suele ser Upstart.

Aparte de averiguar qué servicios se están ejecutando actualmente, otra buena pieza de información que debe tener es en qué nivel de ejecución un servicio está activo. Los niveles de ejecución determinan qué servicios deben estar disponibles cuando el servidor se encuentra en estados diferentes. Es probable que desee igualar la configuración del servidor de origen en el nuevo sistema.

Puede descubrir los niveles de ejecución que cada servicio tiene activo para utilizar una serie de herramientas. Una forma es a través de herramientas como chkconfig o sysv-rc-conf .

En un sistema Ubuntu o Debian, puede instalar y utilizar chkconfig para comprobar los servicios de System V disponibles en diferentes niveles de ejecución. La mayoría de los sistemas basados ​​en RHEL deben tener instalado este software:

apt-get update
apt-get install chkconfig
chkconfig --list

acpid                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
anacron                   0:off  1:off  2:off  3:off  4:off  5:off  6:off
apache2                   0:off  1:off  2:on   3:on   4:on   5:on   6:off
atd                       0:off  1:off  2:off  3:off  4:off  5:off  6:off
bootlogd                  0:off  1:off  2:off  3:off  4:off  5:off  6:off
console-setup             0:off  1:off  2:off  3:off  4:off  5:off  6:off
cron                      0:off  1:off  2:off  3:off  4:off  5:off  6:off
cryptdisks                0:on   1:off  2:off  3:off  4:off  5:off  6:off
cryptdisks-early          0:on   1:off  2:off  3:off  4:off  5:off  6:off
. . .

Otra alternativa es sysv-rc-conf , que se puede instalar y ejecutar de esta manera:

apt-get update
apt-get install sysv-rc-conf
sysv-rc-conf --list

acpid       
anacron     
apache2      0:off  1:off   2:on    3:on    4:on    5:on    6:off
atd         
bootlogd    
console-setu
cron        
cryptdisks   0:on   6:on
cryptdisks-e 0:on   6:on
. . .

Si desea comprobar manualmente un lugar para utilizar una herramienta, puede hacerlo comprobando un número de directorios que toman la forma de /etc/rc*.d/ . El asterisco se reemplazará con el número del nivel de ejecución.

Por ejemplo, para ver qué servicios son activados por System V en el nivel de ejecución 2, puede comprobar los archivos allí:

cd /etc/rc2.d
ls -l

total 4
-rw-r--r-- 1 root root 677 Jul 26  2012 README
lrwxrwxrwx 1 root root  18 Dec 28  2012 S20php5-fpm -> ../init.d/php5-fpm
lrwxrwxrwx 1 root root  15 Apr 26  2012 S50rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  14 Jun 21  2013 S75sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  17 Dec 28  2012 S91apache2 -> ../init.d/apache2
. . .

Estos son enlaces a archivos de configuración ubicados en /etc/init.d/ . Cada enlace que comienza con un "S" significa que se utiliza para iniciar un servicio. Los scripts que comienzan con un "K" eliminan los servicios en ese nivel de ejecución.

Descubriendo Servicios y Niveles de Ejecución en Servidores Upstart


Ubuntu y servidores basados ​​en Ubuntu son prácticamente los únicos servidores que implementan el sistema de inicialización de Upstart por defecto. Éstos se utilizan típicamente como el sistema principal del init, con el sistema V que es configurado para los servicios heredados.

Para ver si su servidor tiene un sistema init de Upstart, escriba:

which initctl

/sbin/initctl

Si recibe una ruta al ejecutable como lo hicimos anteriormente, entonces su servidor tiene capacidades Upstart y debe investigar qué servicios son controlados por Upstart.

Puede ver qué servicios son iniciados por Upstart escribiendo:

initctl list

mountall-net stop/waiting
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 482
tty4 start/running, process 728
udev start/running, process 354
upstart-udev-bridge start/running, process 350
ureadahead-other stop/waiting
. . .

Esto le indicará el estado actual de todos los servicios administrados Upstart. Puede saber qué servicios se están ejecutando actualmente y tal vez ver si hay servicios que proporcionan la misma funcionalidad en la que uno ha asumido el control de un servicio heredado que ya no está en uso.

Una vez más, debe familiarizarse con los servicios que se supone que estarán disponibles en cada nivel de ejecución.

Puede hacerlo con el comando initctl escribiendo:

initctl show-config

mountall-net
  start on net-device-up
passwd
  start on filesystem
rc
  emits deconfiguring-networking
  emits unmounted-remote-filesystems
  start on runlevel [0123456]
  stop on runlevel [!$RUNLEVEL]
rsyslog
  start on filesystem
  stop on runlevel [06]
  . . .

Esto escupe mucha información de configuración para cada servicio. La parte a buscar es la especificación de nivel de ejecución.

Si prefiere recopilar esta información manualmente, puede ver los archivos ubicados en el directorio /etc/init (observe la omisión del ".d" después de "init" aquí).

En su interior, encontrará una serie de archivos de configuración. Dentro de estos archivos, hay especificaciones de nivel de ejecución dadas así:

start on runlevel [2345]
stop on runlevel [!2345]

Debe tener una buena idea de las diferentes maneras de descubrir los servicios Upstart y los niveles de ejecución.

Descubriendo Servicios y Niveles de Ejecución en Servidores Systemd


Un nuevo estilo de init que cada vez es más adoptado por las distribuciones es el sistema init systemd.

Systemd es bastante divergente de los otros tipos de sistemas init, pero es increíblemente. Puede informarse sobre la ejecución de servicios escribiendo:

systemctl list-units -t service

UNIT                                           LOAD   ACTIVE SUB     DESCRIPTION
atd.service                                    loaded active running ATD daemon
avahi-daemon.service                           loaded active running Avahi mDNS/DNS-SD Stack
colord.service                                 loaded active running Manage, Install and Generate Color Profiles
cups.service                                   loaded active running CUPS Printing Service
dbus.service                                   loaded active running D-Bus System Message Bus
dcron.service                                  loaded active running Periodic Command Scheduler
dkms.service                                   loaded active exited  Dynamic Kernel Modules System
. . .

Systemd no reproduce exactamente el concepto de niveles de ejecución de otros sistemas init. En su lugar, implementa el concepto de "objetivos". Mientras que los sistemas con sistemas init tradicionales sólo pueden estar en un nivel de ejecución a la vez, un servidor que utiliza systemd puede alcanzar varios objetivos al mismo tiempo.

Debido a esto, averiguar qué servicios están activos cuando es un poco más difícil.

Puede ver qué destinos están activos escribiendo:

systemctl list-units -t target

UNIT                LOAD   ACTIVE SUB    DESCRIPTION
basic.target        loaded active active Basic System
cryptsetup.target   loaded active active Encrypted Volumes
getty.target        loaded active active Login Prompts
graphical.target    loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target     loaded active active Local File Systems
. . .

Puede listar todos los destinos disponibles escribiendo:

systemctl list-unit-files -t target

UNIT FILE                 STATE   
basic.target              static  
bluetooth.target          static  
cryptsetup.target         static  
ctrl-alt-del.target       disabled
default.target            disabled
emergency.target          static  
final.target              static  
getty.target              static  
graphical.target          disabled
halt.target               disabled
. . .

A partir de aquí, podemos averiguar qué servicios están asociados con cada objetivo. Los destinos pueden tener servicios u otros objetivos como dependencias, por lo que podemos ver qué políticas implementa cada objetivo escribiendo:

systemctl list-dependencies target_name.target

Por ejemplo, puede escribir algo como esto:

systemctl list-dependencies multi-user.target

multi-user.target
├─atd.service
├─avahi-daemon.service
├─cups.path
├─dbus.service
├─dcron.service
├─dkms.service
├─gpm.service
. . .

Esto mostrará el árbol de dependencias de ese destino, proporcionándole una lista de servicios y otros objetivos que se iniciarán cuando se alcance dicho destino.

Doble Comprobación de Servicios a Través de otros Métodos


Aunque la mayoría de los servicios se configuran a través del sistema init, es posible que haya algunas áreas en las que un proceso o servicio se resbale por las grietas y se controle de forma independiente.

Podemos tratar de encontrar estos otros servicios y procesos analizando los efectos secundarios de estos servicios. En la mayoría de los casos, los servicios se comunican entre sí o con entidades externas de alguna manera. Sólo hay un número específico de formas en que los servicios pueden comunicarse y comprobar esas interfaces es una buena manera de detectar otros servicios.

Una herramienta que podemos utilizar para descubrir los puertos de red y los Unix que están siendo utilizados por los procesos para comunicarse es netstat . Podemos emitir un comando como este para obtener una visión general de algunos de nuestros servicios:

netstat -nlp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      762/mysqld      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      832/apache2     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      918/sshd        
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      799/php-fpm.conf)
tcp6       0      0 :::22                   :::*                    LISTEN      918/sshd        
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     1526     1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     SEQPACKET  LISTENING     1598     354/udevd           /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     6982     480/dbus-daemon     /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     8378     762/mysqld          /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     1987     746/acpid           /var/run/acpid.socket 

Los números de puerto en la primera sección están asociados con los programas en la extrema derecha. Del mismo modo, la parte inferior se centra en los Unix que están siendo utilizados por los programas.

Si ve los servicios aquí de los que no tiene información a través del sistema init, tendrá que averiguar por qué es y qué tipo de información necesitará reunir sobre ese servicio.

Puede obtener información similar sobre los puertos que los servicios están haciendo disponibles mediante el comando lsof :

lsof -nPi

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld    762    mysql   10u  IPv4   8377      0t0  TCP 127.0.0.1:3306 (LISTEN)
php5-fpm  799     root    6u  IPv4   8195      0t0  TCP 127.0.0.1:9000 (LISTEN)
php5-fpm  800 www-data    0u  IPv4   8195      0t0  TCP 127.0.0.1:9000 (LISTEN)
php5-fpm  801 www-data    0u  IPv4   8195      0t0  TCP 127.0.0.1:9000 (LISTEN)
php5-fpm  802 www-data    0u  IPv4   8195      0t0  TCP 127.0.0.1:9000 (LISTEN)
php5-fpm  803 www-data    0u  IPv4   8195      0t0  TCP 127.0.0.1:9000 (LISTEN)
apache2   832     root    3u  IPv4   8210      0t0  TCP *:80 (LISTEN)
sshd      918     root    3r  IPv4   7738      0t0  TCP *:22 (LISTEN)
. . .

Puede obtener una gran información del comando ss sobre qué procesos utilizan los puertos y los sockets:

ss -nlpaxtudw

Netid  State      Recv-Q Send-Q   Local Address:Port     Peer Address:Port 
u_str  LISTEN     0      0      @/com/ubuntu/upstart 1526                * 0     users:(("init",1,7))
u_str  ESTAB      0      0      @/com/ubuntu/upstart 1589                * 0     users:(("init",1,10))
u_str  ESTAB      0      0                    * 1694                * 0     users:(("dbus-daemon",480,6))
u_str  ESTAB      0      0                    * 1695                * 0     users:(("dbus-daemon",480,7))
u_str  ESTAB      0      0                    * 1803                * 0

Recopilación de Versiones de Paquete


Después de toda esa exploración, debería tener una buena idea sobre qué servicios se están ejecutando en su computadora y que debe implementar en su servidor de destino.

Usted debe tener una lista de servicios que sabe que necesitará implementar. Para que la transición se realice sin problemas, es importante intentar igualar las versiones donde sea posible.

Es obvio que no podrás pasar por todos los paquetes instalados en el sistema fuente e intentar replicarlo en el nuevo sistema, pero deberías comprobar los componentes de software que son importantes para tus necesidades e intentar encontrar el número de versión.

Puede intentar obtener los números de versión del software en sí, a veces pasando los indicadores -v o --version a los comandos, pero normalmente esto es más fácil de llevar a cabo a través del gestor de paquetes. Si está en un sistema basado en Ubuntu / Debian, puede ver qué versión de los paquetes se instalan desde el gestor de paquetes escribiendo:

dpkg -l | grep package_name 

Si en su lugar está en un sistema basado en RHEL, puede utilizar este comando para comprobar la versión instalada en su lugar.

rpm -qa | grep package_name 

Esto le dará una buena idea de la versión del programa que está buscando instalar.

Mantenga una lista de los números de versión de los componentes importantes que desea instalar. Intentaremos adquirirlos en el sistema de destino.

Conclución


Ahora debe tener una buena idea de qué procesos y servicios en su servidor de origen necesitan ser transferidos al nuevo. También debe completar los pasos preliminares para permitir que sus dos instancias de servidor se comuniquen entre sí.

La base para su migración ya está completa. Ahora podraver en el próximo tutorial para que tenga una buena idea de lo que necesita hacer.

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (0 respuestas).