Sistema de administración de
múltiples servidores usando ssh
Gabriel Orozco Ruiz Velazco
FSL 2013
Cómo es que pasamos de esto
A esto
A esto?
Supongamos un ambiente
El nombre de los servers no importa
●

DEV

●

ITG

–

mxl0295

–

fll4020

–

mxl0296

–

fll4021

–

mxl0298

–

fll4026

–

mxl1122

–

fll4027

–

mxl1170

–

fll4028

–

fll4029
El nombre de los servers no importa
●

PRO

●

PRO (continua)

–

fll4023

–

fll4189

–

fll4024

–

fll4190

–

fll4025

–

fll4191

–

fll4026

–

fll4195

–

fll4186

–

fll4199

–

fll4187

–

fll4204

–

fll4188

–

fll4205
Rápido:
Los servidores de aplicación de ITG tienen
problemas. Cuales eran?
El problema crece

Te avisan que cayó un contrato / fuiste agraciado,
etc.
Y ahora tienes que soportar adicionalmente otra
aplicación igual o más compleja que la actual
Lista de servidores y tags
●

~/serverlist.txt

fll4023 apli1 web arm1 lb
fll4024 apli1 web arm1 lb
fll4025 apli1 web arm2 lb
fll4026 apli1 web arm2 lb
fll4186 apli1 app arm1 wl
fll4187 apli1 app arm1 wl
fll4188 apli1 app arm1 jboss
fll4189 apli1 nfs arm1
fll4190 apli1 db arm1 oracle

fll4186 apli1 app arm2 wl
fll4187 apli1 app arm2 wl
fll4188 apli1 app arm2 jboss
fll4189 apli1 nfs arm2 wl
fll4190 apli1 db arm2 oracle
fll4191 apli1 web
fll4195 apli2 web arm1 tomcat
fll4199 apli2 web arm2 tomcat
fll4204 apli2 job tomcat
fll4205 apli2 web jboss
Cuidado con los tags, que no se
repitan o será un problema
Ahora podemos buscar
●

Encuentra los app servers:
grep app server2-list.txt

●

Encuentra app servers, brazo2, que usan weblogic
grep app server2-list.txt | grep arm2 | grep wl
Que tal un comando para hacerlo fácil?
#/bin/bash
# buscar las etiquetas y mostrar los servers
tmp1=/tmp/servers-list.tmp.1
tmp2=/tmp/servers-list.tmp.2
cp ~/servers-list.txt $tmp1
for filtro in $@;do
grep “$filtro” $tmp1 > $tmp2
mv $tmp2 $tmp1
done
cut -d -f1 $tmp1
# echo $(cut -d
rm -f $tmp1

-f1 $tmp1) mejor así!
Ya encuentro las cosas.
Y ahora que hago?
SSH
●

Puedes ejecutar algo en el servidor remoto con solo añadirlo al
final de la linea de ssh
ssh usuario@servidor “comando”
La salida de ese comando se manda a tu pantalla local.

●

●

Para automatizar, hay que evitar que te pida password al
conectarte (usando llaves)
Si hay usuarios/cosas diferentes por server, puedes usar
~/.ssh/config
Ir a ejecutar a todos los servers
●

Obtiene mi id en todos los servers

for server in $(busca.sh app arm1 wl);do ssh
$server “id”;done
●

Obtiene el uptime en TODA la plataforma

●

Cual server le falta RAM?

●

Cual server está más cargado?

●

Cual modelo de cpu tiene cada server?
Ok y qué más puedo hacer?
●

●

●

Otro comandito que le digas el comando y no tengas que
teclear el “for server in....do.... done
Otro comandito que haga un scp a todos los servers, del mismo
archivo
Todos usando el busca.sh como base. Esto quiere decir que si
añades un nuevo servidor, o cambias la función de algún server,
ya los demás comandos lo saben.
Problemas de esta solución
●

●

●

●

Uso de listas “especiales” de servidores, hay que añadirlo al
script. (aunque esto es sencillo)
En algunos servers tu usuario es diferente, y hacer un sólo
script se vuelve dificil
Algunos servers tienen el ssh en puertos diferentes
Al usar ssh para ejecutar comandos, las variables que se cargan
en una sesión normal, no se cargan (ssh “comando” no hace un
“login” y no se carga el .bash_profile)
Bienvenido al ~/.ssh/config
●

Puedes definir un server como desees:
host myapp-pro-web
HostName fll4023.florida.fsl.com
Port 2222
User sistemas
LocalForward 3129 127.0.0.1:3128
Compression no
ForwardX11 yes
ServerAliveInterval 30
ServerAliveCountMax 120
Preguntas? Dudas?
Sistema de administración de multiples servidores usando ssh

Sistema de administración de multiples servidores usando ssh

  • 1.
    Sistema de administraciónde múltiples servidores usando ssh Gabriel Orozco Ruiz Velazco FSL 2013
  • 2.
    Cómo es quepasamos de esto
  • 3.
  • 4.
  • 5.
  • 6.
    El nombre delos servers no importa ● DEV ● ITG – mxl0295 – fll4020 – mxl0296 – fll4021 – mxl0298 – fll4026 – mxl1122 – fll4027 – mxl1170 – fll4028 – fll4029
  • 7.
    El nombre delos servers no importa ● PRO ● PRO (continua) – fll4023 – fll4189 – fll4024 – fll4190 – fll4025 – fll4191 – fll4026 – fll4195 – fll4186 – fll4199 – fll4187 – fll4204 – fll4188 – fll4205
  • 8.
    Rápido: Los servidores deaplicación de ITG tienen problemas. Cuales eran?
  • 9.
    El problema crece Teavisan que cayó un contrato / fuiste agraciado, etc. Y ahora tienes que soportar adicionalmente otra aplicación igual o más compleja que la actual
  • 10.
    Lista de servidoresy tags ● ~/serverlist.txt fll4023 apli1 web arm1 lb fll4024 apli1 web arm1 lb fll4025 apli1 web arm2 lb fll4026 apli1 web arm2 lb fll4186 apli1 app arm1 wl fll4187 apli1 app arm1 wl fll4188 apli1 app arm1 jboss fll4189 apli1 nfs arm1 fll4190 apli1 db arm1 oracle fll4186 apli1 app arm2 wl fll4187 apli1 app arm2 wl fll4188 apli1 app arm2 jboss fll4189 apli1 nfs arm2 wl fll4190 apli1 db arm2 oracle fll4191 apli1 web fll4195 apli2 web arm1 tomcat fll4199 apli2 web arm2 tomcat fll4204 apli2 job tomcat fll4205 apli2 web jboss Cuidado con los tags, que no se repitan o será un problema
  • 11.
    Ahora podemos buscar ● Encuentralos app servers: grep app server2-list.txt ● Encuentra app servers, brazo2, que usan weblogic grep app server2-list.txt | grep arm2 | grep wl
  • 12.
    Que tal uncomando para hacerlo fácil? #/bin/bash # buscar las etiquetas y mostrar los servers tmp1=/tmp/servers-list.tmp.1 tmp2=/tmp/servers-list.tmp.2 cp ~/servers-list.txt $tmp1 for filtro in $@;do grep “$filtro” $tmp1 > $tmp2 mv $tmp2 $tmp1 done cut -d -f1 $tmp1 # echo $(cut -d rm -f $tmp1 -f1 $tmp1) mejor así!
  • 13.
    Ya encuentro lascosas. Y ahora que hago?
  • 14.
    SSH ● Puedes ejecutar algoen el servidor remoto con solo añadirlo al final de la linea de ssh ssh usuario@servidor “comando” La salida de ese comando se manda a tu pantalla local. ● ● Para automatizar, hay que evitar que te pida password al conectarte (usando llaves) Si hay usuarios/cosas diferentes por server, puedes usar ~/.ssh/config
  • 15.
    Ir a ejecutara todos los servers ● Obtiene mi id en todos los servers for server in $(busca.sh app arm1 wl);do ssh $server “id”;done ● Obtiene el uptime en TODA la plataforma ● Cual server le falta RAM? ● Cual server está más cargado? ● Cual modelo de cpu tiene cada server?
  • 16.
    Ok y quémás puedo hacer? ● ● ● Otro comandito que le digas el comando y no tengas que teclear el “for server in....do.... done Otro comandito que haga un scp a todos los servers, del mismo archivo Todos usando el busca.sh como base. Esto quiere decir que si añades un nuevo servidor, o cambias la función de algún server, ya los demás comandos lo saben.
  • 17.
    Problemas de estasolución ● ● ● ● Uso de listas “especiales” de servidores, hay que añadirlo al script. (aunque esto es sencillo) En algunos servers tu usuario es diferente, y hacer un sólo script se vuelve dificil Algunos servers tienen el ssh en puertos diferentes Al usar ssh para ejecutar comandos, las variables que se cargan en una sesión normal, no se cargan (ssh “comando” no hace un “login” y no se carga el .bash_profile)
  • 18.
    Bienvenido al ~/.ssh/config ● Puedesdefinir un server como desees: host myapp-pro-web HostName fll4023.florida.fsl.com Port 2222 User sistemas LocalForward 3129 127.0.0.1:3128 Compression no ForwardX11 yes ServerAliveInterval 30 ServerAliveCountMax 120
  • 19.