Migració de rundeck d’un servidor a un altre

La gent de rundeck acaba de treure una nova versió, la 1.5. Actualitzar a aquesta versió no es tan fàcil com les anteriors (normalment yum update o apt-get upgrade) perquè han fet canvis a l’esquema de la base de dades i per això recomanen seguir el proces de backup/recovery per actualitzar.

Fa temps que jo volia moure el rundeck a un altre servidor amb més recursos, i he decidit aprofitar l’actualització per fer-ho. Així que amb aquest article explicarem les passes que he seguit per moure-ho.

Comencem localitzant les parts que volem moure, que son 4:
– Configuració de rundeck
– Definició dels projectes
– Claus ssh dels projectes
– Definició dels jobs
– Logs d’execució dels jobs

La configuració del rundeck està a /etc/rundeck/. Per trobar on està la definició dels projectes haurem de mirar al fitxer /etc/rundeck/project.properties el valor project.dir (per defecte està a /var/rundeck/projects/). El path a les claus ssh dels projectes el trobarem a dintre del etc/project. properties de cada projecte, en el valor project.ssh-keypath. La definició dels jobs està a la base de dades, i podrem veure el path dels logs d’execució al fitxer /etc/rundeck/framework.properties, en el valor framework.logs.dir (normalment /var/lib/rundeck/logs).

Un cop localitzat tot, comencem a fer el “paquet” del rundeck que mourem de servidor a servidor. Comencem amb els fitxers de text, que son la configuració del rundeck, la definició dels projectes i els logs d’execució:


mkdir rundeck-backup
cp -a /etc/rundeck/ rundeck-backup/
cp -a /var/rundeck/projects/ rundeck-backup
cp -a /var/lib/rundeck/logs/ rundeck-backup

I estaria be conserver el fitxer “know_hosts” de l’usuari rundeck:

cp getent passwd rundeck|cut -d":" -f6/.ssh/known_hosts rundeck-backup

for project in rundeck-backup/projects/*;do cp grep project.ssh-keypath $project/etc/project.properties|cut -d"=" -f 2 $project;done

I per extreure de la base de dades la definicio dels jobs, haurem de fer una crida rd-jobs list per cadascun dels projectes, exportant així la definició xml:


for project in rundeck-backup/projects/*;do rd-jobs list -f rundeck-backup/basename $project.xml -p basename $project;done

Amb això tenim un backup complet de la nostra instal·lació. Ara enviem aquest directori rundeck-backup al servidor destí (si, obvi, pero ho poso també :P)

scp -r rundeck-backup [email protected]:.

I ara ens connectem al nou servidor. Donem per suposat que al nou servidor tenim rundeck instal·lat (i si no, en un post anterior vam parlar de com fer-ho), per tant l’únic que haurem de fer es distribuir els fitxers on toca. Primer les claus:


for project in rundeck-backup/projects/*;do filename=grep project.ssh-keypath $project/etc/project.properties|cut -d"=" -f 2;cp $project/basename $filename $filename;done

I després la resta de fitxers

cp -a rundeck-backup/rundeck/ /etc/
cp -a rundeck-backup/projects/ /var/rundeck/
cp -a rundeck-backup/logs/ /var/lib/rundeck/
cp rundeck-backup/known_hosts getent passwd rundeck|cut -d":" -f6/.ssh/known_hosts

Amb això ja tindrem la configuració del rundeck i la definició dels projectes, pero faltaran els jobs. Recordem que al servidor antic també s’estan executant, i no volem que s’executin als dos servidors alhora. Tampoc no volem deshabilitar-los al servidor antic fins que no estem segurs que està tot correcte al servidor nou, perquè no volem que cap d’ells es quedi sense executar. Per aconseguir les dues coses farem que els jobs simulin la seva execució, pero realmente no executin res. Això es fa canviant el valor service.NodeExecutor.default.provider del fitxer /var/rundeck/projects/$PROJECT/etc/project.properties, de jsch-ssh a stub. En una sola línia seria:

sed /var/rundeck/projects/*/etc/project.properties -e 's/jsch-ssh/stub/g' -i

Amb això ja estem segurs que el servidor nou no executarà res fins que nosaltres volguem. Ara ja podem importar els jobs sense risc:

for project in rundeck-backups/projects/*;do rd-jobs load -f rundeck-backup/basename $project.xml -p basename $project;done

Amb els jobs carregats ja ho tenim tot. Ara podem entrar a l’interface web i comprovar que tot és correcte: que els usuaris tenen acces a on toca, que els jobs estan ben configurats, etc, etc. Un cop estem segurs ja podem anar movent projecte a projecte (o tots de cop, com es vulgui) només canviant el valor que parlavem abans (service.NodeExecutor.default.provider). Al servidor vell canviem “jsch-ssh” per “stub” i al nou a l’inrevés, “stub” per “jsch-ssh”. Jugant amb aquests valors estem tranquils que si trobem que hi ha qualsevol problema amb algun projecte, sempre podrem tornar aquest projecte (o tots, per assegurar) al servidor vell mentre el solucionem.

I ja ho tenim! L’únic que podriem fer ara és canviar al DNS el nom per continuar accedint al rundeck amb la mateixa URL, pero això ja és al gust de cadascú.

Tomàs

Tomàs

Ja posaré alguna cosa