pssh

Pssh con LinuxDoesMatter

Hoy nos visita LinuxDoesMatter para hablarnos de pssh y de cómo utilizarlo en producción, en la vida real, para migrar un NAS.

pssh y el set completo de herramientas que viene con el paquete:

  • pssh command – Parallel ssh — comando ssh a muchas maquinas a la vez.
  • pscp command – Parallel scp — copiar fichero a conjunto de máquinas.
  • prsync command – Parallel rsync — sincronizar dir local con muchos remotos
  • pnuke command – Parallel nuke — matar en proceso por nombre en muchas máquinas a la vez.
  • pslurp command – Parallel slurp — traer fichero/s de máquinas remotas a la nuestra local.

Usando comandos ssh tradicionales podríamos realizar una tarea en 350 servidores simplemente dedicando una línea a cada uno, pero como se puede ver no es la forma más óptima.

ssh root@host01 ‘mkdir /ora_backup;chmod 0755 /ora_backup;chown -R group:oinstall /ora_backup’
ssh root@host02 ‘mkdir /ora_backup;chmod 0755 /ora_backup;chown -R group:oinstall /ora_backup’
….
ssh root@host350 ‘mkdir /ora_backup;chmod 0755 /ora_backup;chown -R group:oinstall /ora_backup’

Solución:

Antes de nada explicamos qué es el usuario para accionas masivas, útil tb para ansible/pssh/otros:

1.- Lo vamos a llamar por ejemplo linuxadm.

2.- Todas las máquinas tienen desplegado este usuario linuxadm y la máquina de salto desde donde voy a hacer la accion masiva accede con este usuario sin contraseña a todas las maquinas impactadas. La clave pública de linuxadm esta trasmitida en todas las maquinas a las que se da soporte.

Las máquinas se despliegan así, con la clave pública de linuxadm en

/home/linuxadm/.ssh/authorized_keys.

3.- En todas las máquinas de destino linuxadm es usuario sudoer y puede escalar sin contraseña

#cat /etc/sudoers.d/linuxadm o la lines de abajo tb en /etc/sudoers (visudo)

linuxadm ALL=(ALL) NOPASSWD: ALL en las máquinas de destino

Una vez hechos estos tres primeros pasos vamos a la máquina de salto:

Estamos en la máquina de salto…

me convierto en linuxadm $ sudo su – linuxadm (intro)

$whoami
linuxadm
$ cat hosts.txt
host01
host02

host350
$cat hosts.txt | wc -l
350
$

llegó el momento:

$ pssh -h hosts.txt -o out_mkdir -e error_mkdir -i “sudo mkdir /ora_backup”
$ pssh -h hosts.txt -o out_chmod -e error_chmod -i “sudo chmod 0755 /ora_backup”
$ pssh -h hosts.txt -o out_tchown -e error_chown -i “sudo chown oracle:oinstall /ora_backup”

Comprobar

$ pssh -X -q -h hosts.txt -i “sudo ls -l /ora_backup”

Recordatorio. Linea en /etc/fstab capturando un share NFS

server01:/usr/local/pub /pub nfs nfs auto,noatime,nolock,bg,intr,tcp,actimeo=1800 0 0

para desmontar a mano:

umount /pub o bien umount -l /pub (fozarlo) >>> comentar lsof o fuser

Tarea “migracion de nas”

La cabina (o el servidor NFS) server01 va a ser migrada a srvnew05

En esos 350 servidores toda linea como esta:

server01:/usr/local/pub /pub nfs nfs auto,noatime,nolock,bg,intr,tcp,actimeo=1800 0 0

tiene que acabar como esta:

srvnew05:/usr/local/pub /pub nfs nfs auto,noatime,nolock,bg,intr,tcp,actimeo=1800 0 0

Acciones a emprender…

1.- Crear una ventana de downtime para el cambio. Tal día a tal hora los aplicativos que usan esos shares NFS deben estar parados. El downtime o ventana de tiempo hay que a ser posible respetarlo. Puede prolongarse si fuerza mayor

2.- Copiamos un script para desmontar los shares en las 350 máquinas. pscp

$ pscp -h hosts.txt -o out_copy -e err_copy umount.sh /tmp

3.- Desmontamos todas la entradas implicadas. pssh

$ pssh -X -q -h hosts.txt -o out_umount -e error_umount -i sudo /tmp/umount.sh

Copiamos o copiarán los contenidos de la cabina server01 a la cabina srvnew05
Se respetan el nombre de los shares nfs.

Esto tomará su tiempo pueden ser horas… dentro del periodo de downtime o ventana de mantenimiento.

Recordad que sed -i cambiaría cada ocurrencia de server01 por srvnew05. En todfos los /etc/fstab impactados. El script a tal efecto hará esto cuando toque.

4.- Subimos el script que cambia server01 por srvnew05 en los /etc/fstab y vuelve a montar

$ pscp -h hosts.txt -o out_copy2 -e err_copy2 newname_remount.sh /tmp

Ejecutamos que acabamos de subir a todas las máquinas el script que cambia cada ocurrencia de server01 en cada /etc/fstab por srvnew05 y volverá a montar los filesystems

$ pssh -X -q -h hosts.txt -o out_newremo -e error_newremo -i sudo /tmp/newname_remount.sh

Y eso es todo… puedo comentar lo de la herramienta de tiquets las subtareas y dptos implicados

Comunicar el fin de la tarea a todos los “stakeholders”.

Los reponsables de los aplicativos impactados por el cambio arrancarán sus programas/aplicaciones para ver si todo funciona correctamente.