IP flotante con BGP en CentOS/RHEL/SL 7

ip_flotante_bgp

Configurar una direccion IP flotante entre 2 equipos en redes diferentes

Introduccion

Las direcciones IP flotantes son muy utiles para ofrecer alta disponibilidad a servicios dentro de un mismo rango de red, esto lo podemos
implementar haciendo uso de keepalived, pero cuando los nodos no estan en el mismo rango de red no podemos utilizar keepalived debido a que este
utilizar el protocolo VRRP que funciona sobre L2
En caso de que necesitemos configurar una IP flotante entre equipos que estan en redes diferentes, es decir en rangos de red diferentes, lo podemos
utilizar haciendo uso del protocolo de ruteo BGP
La forma en la que esto funciona es la siguiente:

  • Ambos nodos tienen la direccion IP flotante configurada en una interfaz dummy
  • Ambos nodos publican rutas por BGP para llegar a IP flotante
  • El router de la red debe aprender esas rutas de forma a que cuando un cliente quiera conectarse a la IP flotante, este direccionara el trafico
    hacia nuestros nodos
  • En caso de que uno de los nodos caiga, el router dejara de aprender rutas de el por lo tanto el trafico se dirige al nodo activo

Esta implementacion nos ofrece alta disponibilidad entre nodos ademas de balanceo de carga
En este documento mostraremos paso a paso lo necesario para implementar la IP Flotante utilizando BGP entre 2 nodos CentOS 7 y
un tercer nodo CentOS 7 que actuara de router
Para esto utilizaremos BIRD tanto en los nodos que tendran la IP flotante como en el router para que aprenda las rutas por BGP
El entorno en el que esta basado este documento es el siguiente:

  • nodo1:

    • hostname: ha-bgp1
    • SO: CentOS 7
    • IP: 10.100.1.151
    • BGP AS: 64513
  • nodo2:

    • hostname: ha-bgp2
    • SO: CentOS 7
    • IP: 10.100.2.151
    • BGP AS: 64514
  • router:

    • hostname: rt1
    • SO: CentOS 7
    • IP eth0: 10.100.1.150
    • IP eth0: 10.100.2.150
    • BGP AS: 64515
  • IP Flotante: 10.155.155.1/32

Instalacion de BIRD

Utilizaremos BIRD tanto para publicar las rutas como para aprenderlas, por lo tanto debemos instalarlo tanto en los nodos, como en el router
El paquete BIRD se encuentra dentro del repositorio epel, el cual podemos configurar/habilitar con el siguiente comando:

yum install -y epel-release

Una vez que tenemos configurado el repositorio epel procedemos a instalar BIRD

yum install -y bird

Configurar IP flotante en una interfaz dummy

Como comentamos en la introduccion, la IP flotante en realidad seria una IP configurada en el equipo sobre una interfaz dummy

Que es una interfaz dummy?

Una interfaz dummy es un interfaz logica que no tiene conexion alguna con el mundo fisico, es decir, una interfaz que solo puede ser vista por el
mismo equipo donde esta configurado
Configuramos la interfaz en el nodo1, en nuestro caso ha-bgp1, esto lo haremos creando un servicio de systemd que se encargue de levantar la IP
ha-bgp1

[root@ha-bgp1 ~]# cat <<EOF > /etc/systemd/system/dummy0.service
[Unit]
Description=Dummy network interface
After=network.target
[Service]
Type=simple
ExecStartPre=-/sbin/ip link add dev dummy0 type dummy
ExecStartPre=/sbin/ip link set dummy0 up
ExecStartPre=/sbin/ip addr add dev dummy0 10.155.155.1/32
ExecStart=/usr/bin/sleep infinity
ExecStop=/sbin/ip link del dummy0
[Install]
WantedBy=multi-user.target
EOF

Luego habilitamos y levantamos dicho servicio

[root@ha-bgp1 ]# systemctl daemon-reload
[root@ha-bgp1 ]# systemctl start dummy0
[root@ha-bgp1 ]# systemctl enable dummy0

ha-bgp2
Luego debemos hacer lo mismo en ha-bgp2

[root@ha-bgp2 ~]# cat <<EOF > /etc/systemd/system/dummy0.service
[Unit]
Description=Dummy network interface
After=network.target
[Service]
Type=simple
ExecStartPre=-/sbin/ip link add dev dummy0 type dummy
ExecStartPre=/sbin/ip link set dummy0 up
ExecStartPre=/sbin/ip addr add dev dummy0 10.155.155.1/32
ExecStart=/usr/bin/sleep infinity
ExecStop=/sbin/ip link del dummy0
[Install]
WantedBy=multi-user.target
EOF

Habilitamos y levantamos el servicio

[root@ha-bgp2 ]# systemctl daemon-reload
[root@ha-bgp2 ]# systemctl start dummy0
[root@ha-bgp2 ]# systemctl enable dummy0

Instalar y configurar BIRD

Una vez que tenemos nuestra IP flotante configurada en la interfaz dummy de cada nodo, debemos configurar BIRD para que publique rutas para llegar a dicha IP utilizando el protocolo BGP
Movemos la configuracion de ejemplo para crear un archivo de configuracion vacio
ha-bgp1

[root@ha-bgp1 ~]# mv /etc/bird.conf /etc/bird.conf_original

ha-bgp2

[root@ha-bgp2 ~]# mv /etc/bird.conf /etc/bird.conf_original

Configuramos BIRD en el nodo1

Editamos el archivo de configuracion del servicio

[root@ha-bgp1 ~]# vi /etc/bird.conf

Y agregamos lo siguiente

log "/var/log/bird" all;
router id 10.100.1.151;
protocol device {
    scan time 60;
}
protocol direct {
    interface "dummy0";
}
protocol bgp router1 {
    local as 64513;
    source address 10.100.1.151;
    import none;
    export all;
    graceful restart on;
    next hop self;
    multihop 2;
    neighbor 10.100.1.150 as 64515;
}

Configuramos BIRD en el nodo2

Editamos el archivo de configuracion del servicio

[root@ha-bgp2 ~]# vi /etc/bird.conf

Y agregamos lo siguiente

log "/var/log/bird" all;
router id 10.100.2.151;
protocol device
{
    scan time 60;
}
protocol direct {
    interface "dummy0";
}
protocol bgp floatingip {
    local as 64514;
    source address 10.100.2.151;
    import none;
    export all;
    graceful restart on;
    next hop self;
    multihop 2;
    neighbor 10.100.2.150 as 64515;
}

Configuramos el firewall para que permita conexiones BGP

En caso de que tengamos habilitado el firewall del equipo debemos habilitar el puerto 179 tanto TCP como UDP
ha-bgp1

[root@ha-bgp1 ~]# firewall-cmd --permanent --add-port=179/tcp --add-port=179/udp
[root@ha-bgp1 ~]# firewall-cmd --reload

ha-bgp2

[root@ha-bgp2 ~]# firewall-cmd --permanent --add-port=179/tcp --add-port=179/udp
[root@ha-bgp2 ~]# firewall-cmd --reload

Iniciamos y habilitamos el servicio en ambos nodos

ha-bgp1

[root@ha-bgp1 ~]# systemctl start bird
[root@ha-bgp1 ~]# systemctl enable bird

ha-bgp2

[root@ha-bgp2 ~]# systemctl start bird
[root@ha-bgp2 ~]# systemctl enable bird

Configuracion de BIRD en el router

Finalmente debemos configurar el router para que aprenda las rutas publicadas por los nodos

[root@rt1 ~]# vi /etc/bird.conf

Agregamos lo siguiente:

filter floatingip {
  if net = 10.155.155.1/32 then accept;
}
router id 10.100.1.150;
protocol direct {
  interface "*";
}
protocol kernel {
  persist;      # No elimina las rutas cuando se baja el servicio
  scan time 20; # Escanea la tabla de ruteo del kernel cada 20 segundos
  export all;   # Carga todas las rutas a la tabla de rutas del kernel
}
protocol device {
  scan time 10; # Escanea las interfaces cada 10 segundos
}
protocol bgp nodo1 {
  import filter floatingip;
  hold time 10;
  local as 64515;
  neighbor 10.100.1.151 as 64513;
}
protocol bgp nodo2 {
  import filter floatingip;
  hold time 10;
  local as 64515;
  neighbor 10.100.2.151 as 64514;
}

En caso de que tengamos habilitado el firewall debemos crear las reglas correspondientes para permitir BGP

[root@rt1 ~]# firewall-cmd --permanent --add-port=179/tcp --add-port=179/udp
[root@rt1 ~]# firewall-cmd --reload

Finalmente iniciamos y habilitamos el servicio bird

[root@rt1 ~]# systemctl start bird
[root@rt1 ~]# systemctl enable bird

Podemos comprobar las rutas importadas por nuestro router de la siguiente manera

[root@rt1 ~]# birdc show route
BIRD 1.4.5 ready.
10.100.2.0/24      dev eth0 [direct1 11:54:43] * (240)
10.100.1.0/24      dev eth0 [direct1 11:54:43] * (240)
10.155.155.1/32    via 10.100.1.151 on eth0 [nodo1 11:54:47] * (100) [AS64513i]
                   via 10.100.2.151 on eth0 [nodo2 11:54:48] (100) [AS64514i]

Con esto tenemos configurada nuestra IP flotante entre equipos que no estan en la misma subnet. Esta configuracion la podemos utilizar con cualquier router que soporte el protocolo BGP

Instalar y configurar cliente Openstack en RHEL/CentOS/SL 7

instalar_cliente_openstack

Instalar y configurar cliente Openstack en RHEL/CentOS/SL 7

Instalar pre-requisitos

Para instalar las herramientas de cliente de openstack necesitaremos el comando pip, el cual es proveido por el paquete python-pip:

yum install -y python-pip

Instalar cliente openstack

Para instalar utilizaremos el comando pip e instalaremos los paquetes:
– python-openstackclient

pip install python-openstackclient

– python-neutronclient

pip install python-neutronclient

Configurar las variales de entorno

Los clientes de openstack permiten utilizar variables de entorno para no tener que estar especificando los parametros de conexion con cada comando que utilicemos
Estas variables las podemos cargar en el archivo .bashrc del usuario con el que utilizaremos los clientes de openstack

vi .bashrc
# Nombre de la region de Openstack
export OS_REGION_NAME=dc
# Usuario para conectarse a la API
export OS_USERNAME=dca_admin
# Pasword del usuario a utilizar
export OS_PASSWORD=password
# URL del keystone 
export OS_AUTH_URL="https://identity.example.com:443/identity-admin/v2.0"
# Nombre del tenant
export OS_TENANT_NAME=example
# Definicion de los endpoint
export OS_ENDPOINT_TYPE=publicURL
export NOVA_ENDPOINT_TYPE=publicURL
export NETWORK_ENDPOINT_TYPE=publicURL
export VOLUME_ENDPOINT_TYPE=publicURL

# Se definen los alias para agregar el --insecure, 
# la opcion permite conectarnos sin necesidad de que el certificado de nuestro openstack sea valido
alias nova="nova --insecure"
alias neutron="neutron --insecure"
alias cinder="cinder --insecure"

Finalmente para probar podemos ejecutar los siguientes comandos

source .bashrc

nova list
+--------------------------------------+---------------------+--------+------------+-------------+----------------------------------------------------------------------------------+
| ID                                   | Name                | Status | Task State | Power State | Networks                                                                         |
+--------------------------------------+---------------------+--------+------------+-------------+----------------------------------------------------------------------------------+
| cbba125c-96b3-4601-ba8e-341231211211 | COMPUTE1            | ACTIVE | -          | Running     | external_om=172.21.1.1                                                           |
....
+--------------------------------------+---------------------+--------+------------+-------------+----------------------------------------------------------------------------------+

Lista de comandos equivalentes entre apt-get, yum y zypper

Lista de comandos equivalentes entre apt-get,yum y zypper

En muchos casos estamos acostumbrados a un solo gestor de paquetes, ya sea yum, apt-get o zypper, en esos casos es util tener una tabla de equivalencias entre los distintos gestores de paquetes, abajo la tabla de los comandos basicos que podriamos necesitar para manejar los paquetes, ya sea en entornos Debian, RedHat o Suse

Comandos Basicos

Debian RedHat Suse
apt-get update yum makecache zypper refresh
apt-get install yum install zypper install
apt-get remove yum remove zypper remove
apt-get upgrade/dist-upgrade yum update/upgrade zypper up
apt-cache search yum search zypper search
apt-get clean yum clean all
apt-file search yum whatprovides zypper se –provides
apt-get -reinstall install yum reinstall zypper in -f

Configurar acceso remoto para multiples usuarios a libvirt

Configurar acceso remoto para multiples usuarios a libvirt

Debemos editar archivo /etc/libvirt/libvirtd.conf, modificando los siguientes parametros

listen_tls = 0
listen_tcp = 1

Luego se debe reiniciar el servicio libvirtd para que tome los cambios

service libvirtd restart

Luego podemos crear los usuarios que queremos que accedan a nuestro KVM con el comando saslpasswd2 de la siguiente manera:

saslpasswd2 usuario -a libvirt

Esto nos pedira el nuevo password para dicho usuario.

Tambien podemos listar los usuarios existentes en caso de que ya hayamos agregado usuarios con el comando:

sasldblistusers2 /etc/libvirt/passwd.db

Una vez creados los usuarios, los mismos se pueden conectar utilizando virt-manager o virsh, utilizando la siguiente URL:

qemu+tcp://usuario@ip_del_host/system

Ejemplo con virsh:

virsh -c qemu+tcp://usuario@192.168.12.1/system

Que son los GROK pattern en logstash

Que son los GROK pattern en logstash

Como funciona

Los groks pattern nos permiten separar u organizar un conjunto de datos mediante metodos de analisis gramatical, en pocas palabaras parseando.

En un grok pattern se define el tipo de dato que se deberia de recibir y con esto se asignan los valores a los diferentes campos que vayamos creando. La sintaxis del grok para separar algun dato es la siguiente :

%{PATTERN:nombre_del_campo}

Donde el PATTERN podria ser uno de los tantos patterns predefinidos en logstash o podriamos inclusive crear nuestros propios patterns en caso de necesitarlo

Para mas informaciones sobre todos los patterns podemos consultar la siguiente URL:
Documentacion de grok – logstash

Los GROK patterna tambien permiten expreciones regulaes del tipo UNIX/Linux, por ejemplo podriamos establecer dentro del pattern cadenas estaticas, por ejemplo:

Cantidad de transacciones = 32423

En el ejemplo anterior el unico campo que queremos separar es el campo numerico, esto lo podriamos hacer con el siguiente GROK pattern:

^Cantidad de transacciones = %{NUMBER:cantidad_transacciones}$

Ejemplos

Como ejemplo de GROK pattern, podriamos extraer los diferentes datos de una entrada de rsyslog de un equipo linux:

Oct  9 16:06:10 nodo1232 auditd[1041]: Audit daemon rotating log files

con el siguiente GROK pattern:

^%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(%{NUMBER:syslog_pid}): %{GREEDYDATA:syslog_message}$

Esto nos crearia un documento con los siguientes campos

syslog_timestamp: "Oct  9 16:06:10"
syslog_hostname: "nodo1232"
syslog_program: "auditd"
syslog_pid: "1041"
syslog_message: "Audit daemon rotating log files"

Dicho documento luego puede ser insertado a cualquiera de los outputs que soporta logstash, normalmente puede ser elasticsearch, para mas informacion sobre elasticsearch y logstash pueden consultar el siguiente HOW TO

Creando nuestro GROK pattern

Al momento de crear nuestros primer GROK patterns, todo sera prueba y error por lo que es tremendamente util utilizar una herramienta donde podamos probar de forma rapida. Para este proposito podemos utilizar la siguiente herramienta:

En dicha herramienta en el primer campo debemos agregar nuestros logos y en el siguiente campo ponemos nuestro GROK pattern

Utilizando GROK en logstash

Una vez que tenemos definido y probado nuestro GROK pattern podemos agregarlo a logstash como filter.

Para ejemplo utilizaremos el mismo ejemplo de rsyslog, el campo que queremos separar o filtrar es el campo message para luego insertarlo en elasticsearch, por lo tanto nuestro filtro de logstash deberia verse de la siguiente manera

filter {

  grok{
    match => { "message" => "^%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(%{NUMBER:syslog_pid}): %{GREEDYDATA:syslog_message}$" }
  }
  date {
    timezone => "America/Asuncion"
    match => ["timestamp", "YYYY-MM-dd HH:mm:ss"]
    target => "@timestamp"
  }
 }
}

Por ultimo, la seccion date que agregamos en el filter es para que tome como campo de tiempo el tiempo extraido del log, si no hacemos esto, se tomara como tiempo del log el horario en el que se inserto al elasticsearch

Reducir o aumentar memoria RAM a una vpar en HPE SuperDome 2

Reducir o aumentar memoria RAM a una vpar en HPE SuperDome 2

HPE SuperDome permite agregar o sacar memoria del tipo ILM a las vpars que tenemos definidas, ambas tareas las hacemos con el comando vparmodify, con las opciones -d y -a respectivamente dentro de la consola OA del equipo.

Las limitaciones son las siguientes:
Para agregar memoria:

  • Debemos tener memoria libre en la Npar
  • La memoria libre debe ser del tipo ILM

Para quitar memoria:

  • La Vpar debe estar apagada
  • La memoria a quitar debe ser del tipo ILM

Consultar estado de nuestras Vpars

Para consultar el estado de las vpars podemos utilizar el comando vparstatus dentro del OA al cual nos debemos conectar utilizando telnet

# vparstatus -N 1 
[Virtual Partition]
Num Name                        RunState      State
=== ==========================  ============  =========
1   nodoA                         UP            Active
2   nodoC                         UP            Active
3   nodoE                         UP            Active
4   nodoG                         UP            Active

[Virtual Partition Resource Summary]
Virtual Partition               CPU      Num   Num   Granularity       Total MB
Num Name                        Min/Max  CPUs  IO     ILM   SLM      ILM       SLM
=== ==========================  =======  ====  ====  ===== =====  ========= =========
1   nodoA                           0/128   101    14   1024  1024     408576         0
2   nodoC                           0/128     6    10   1024  1024      92160         0
3   nodoE                           0/128     5     9   1024  1024      40960         0
4   nodoG                           0/128    16    10   1024  1024     111616         0

Quitar memoria al nodoG

En este ejemplo quitaremos 30GB de memoria ILM al nodoG, para esto debemos apagar dicha Vpar.

Una vez apagada la misma desde el OA ejecutamos:

# vparmodify -N 1 -p nodoG -d mem::30720

Consultamos el estado de nuestras Vpars

# vparstatus -N 1
[Virtual Partition]
Num Name                        RunState      State
=== ==========================  ============  =========
1   nodoA                         UP            Active
2   nodoC                         UP            Active
3   nodoE                         UP            Active
4   nodoG                         UP            Active

[Virtual Partition Resource Summary]
Virtual Partition               CPU      Num   Num   Granularity       Total MB
Num Name                        Min/Max  CPUs  IO     ILM   SLM      ILM       SLM
=== ==========================  =======  ====  ====  ===== =====  ========= =========
1   nodoA                           0/128   101    14   1024  1024     408576         0
2   nodoC                           0/128     6    10   1024  1024      92160         0
3   nodoE                           0/128     5     9   1024  1024      40960         0
4   nodoG                           0/128    16    10   1024  1024      80896         0

Finalmente prendemos la Vpar en cuestion

# vparboot -N 1 -p nodoG

Agregar memoria al nodoA

En este ejemplo agregaremos 10GB a la Vpar de nombre nodoA, para esto dicha Vpar debe estar apagada

# vparmodify -N 1 -p nodoA -a mem::10240
# vparstatus -N 1
[Virtual Partition]
Num Name                        RunState      State
=== ==========================  ============  =========
1   nodoA                         UP            Active
2   nodoC                         UP            Active
3   nodoE                         UP            Active
4   nodoG                         UP            Active

[Virtual Partition Resource Summary]
Virtual Partition               CPU      Num   Num   Granularity       Total MB
Num Name                        Min/Max  CPUs  IO     ILM   SLM      ILM       SLM
=== ==========================  =======  ====  ====  ===== =====  ========= =========
1   nodoA                           0/128   101    14   1024  1024     418816         0
2   nodoC                           0/128     6    10   1024  1024      92160         0
3   nodoE                           0/128     5     9   1024  1024      40960         0
4   nodoG                           0/128    16    10   1024  1024      80896         0
# vparboot -N 1 -p nodoA

Create oVirt/RHEV’s VM backup

Create backup of oVirt / RHEV’s VMs

[TOC]

Introduction

I’ve been working with oVirt since version 3.5 as main virtualization platform, from day one i were looking for a tool to create VM backups based on snapshot as many solutions does with VMWARE, after some research i didn’t find a tool that fulfilled my requirements so i decided to create one using oVirt python API.

Requirements

  • oVirt >= 4.0
  • Virtual machine with CentOS 7 with this tools installed, we’ll call this VM bkpvm
  • bkpvm should be on the same oVirt Datacenter of the VM we need to take backup of
  • bkpvm should have enought space to store backups
  • Storage Domain should have enought space to take snapshots

How does it work?

This script should run on bkpvm and it connect to oVirt API to do:
– Create snapshot
– Attach disk to bkpvm
– Create a qcow2 file of the VM’s disk
– Delete snapshot

After finish it creates a qcow2 file for each VM’s disk

Instalation

Prerequisites

Install required repositories on bkpvm:

yum install -y epel-release
yum install -y http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm

Install required packages from repositories configured:

yum install -y qemu-img python-ovirt-engine-sdk4 python-requests git ovirt-guest-agent wget

Download

cd /opt
git clone https://github.com/vacosta94/VirtBKP.git

We need to get our oVirt’s CA in order to establish secure connections to oVirt API

cd /opt/VirtBKP
wget --insecure "https://ovirt.infratic.com/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA"

Usage

Configure

There is a configuration file default.conf inside VirtBKP folder, that file have all the parameters required by the tool. Should modify this file according your environment as follow:

vim /opt/VirtBKP/default.conf
[bkp]
url             = https://ovirt.example.com/ovirt-engine/api
user            = admin@internal
password        = password
ca_file         = ca.crt
bkpvm           = bkpvm
bckdir          = /mnt/

[restore]
url             = https://ovirt.example.com/ovirt-engine/api
user            = admin@internal
password        = password
ca_file         = ca.crt
storage         = gfs_pool0
proxy           = ovirt.example.com
proxyport       = 54323
  • url: oVirt API URL
  • user: User name
  • password: User password
  • ca_file: Path to ca.crt
  • bkpvm: Name of our bkpvm
  • bckdir: Path to store backups in .qcow2 format
  • storage: Storage domain where we’ll restore our backups
  • proxy: IP or hostname of the ovirt-image-proxy host (Default: ovirt-engine)
  • proxyport: TCP port of the ovirt-image-proxy (Default: 54323)

Create backup

In order to create backups of virtual machines you should use the syntax bellow:

/opt/VirtBKP/backup_vm.py <configuration_file> <vm_name>

Example:

/opt/VirtBKP/backup_vm.py /opt/VirtBKP/default.conf webserver

Restore backup

In order to restore an existing backup you should use the syntax bellow:

/opt/VirtBKP/upload_disk.py <configuration_file> <qcow2_file>

Example

/opt/VirtBKP/upload_disk.py /mnt/webserver_2017-04-28-00h.qcow2

Crear backup de maquinas virtuales oVirt

Crear backup de maquinas virtuales oVirt

Introduccion

Vengo trabajando con oVirt desde la version 3.5 como plataforma de virtualizacion tanto para ambientes de laboratorio, ambientes de produccion y hasta este mismo sitio, desde el inicio busque una forma facil de crear backups de maquinas virtuales basadas en snapshots, luego de investigar encontre de que existia una API pensada para realizar backups de maquinas virtuales, investigando un poco mas encontre scripts que permitian exportar maquinas virtuales de forma a tener un respaldo de las mismas.

Si bien esa solucion me sirvio durante mucho tiempo, rapidamente se volvio muy poco practica a medida que las maquinas virtuales que alojaba crecian, por el simple hecho de que esta solucion necesitaba 3 veces el tamaño de tu maquina virtual debido a que antes de exportar la maquina, la debe clonar.

Una vez que el espacio se volvio un problema decidi, crear mi propio script de backup para maquinas virtuales sobre oVirt.

El proceso es quizas un poco mas complejo que la solucion que acabo de comentar pero necesito menos espacio en disco!. En este documento detallare como funciona y como utilizar la herramienta que cree, espero que le sirva a alguien.

Como funciona

Requisitos:

Los requisitos para utilizar esta solucion son los siguientes:

  • oVirt >= 4.0
  • Una maquina virtual CentOS 7 a la que llamaremos bkpvm
  • Esta maquina virtual debe estar en el mismo Datacenter que las VMs a las que queremos respaldar
  • Esta maquina virtual debe tener espacio suficiente para copiar el disco virtual de las VMs

Que hace exactamente

El script se debe ejecutar en la bkpvm y la misma debe poder acceder a los dominios de almacenamiento donde estan los discos de las maquinas que queremos respaldar.
Los pasos que ejecuta el script son los siguientes:

  • Se conecta a la API de oVirt
  • Crea un snapshot de la maquina que queremos respaldar
  • Adjunta el disco del snapshot a la bkpvm
  • Crea una imagen qcow2 del disco en cuestion
  • Elimina el snapshot
  • Se desconecta de la API de oVirt

Al terminar en forma de respaldo nos queda un archivo qcow2 que no es mas que el disco de la maquina virtual, este archivo lo podemos luego subir al oVirt.

Descargar y utilizar la herramienta

Descargar

Una vez que tenemos nuestra bkpvm instalada debemos instalar un par de paquetes que utiliza el script
Primero debemos habilitar epel y el repositorio de oVirt

yum install -y epel-release
yum install -y http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm

Luego instalamos las librerias necesarias de python

yum install -y qemu-img python-ovirt-engine-sdk4 python-requests git

Luego descargamos la ultima version de la herramienta

cd /opt
git clone https://github.com/vacosta94/VirtBKP.git

Obtener CA de nuestro oVirt, deben reemplazar ovirt.example.com por la url de acceso de su oVirt

cd /opt/VirtBKP
curl --insecure "https://ovirt.example.com/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA" -o ca.crt;

Configurar

Dentro de la carpeta VirtBKP existe un archivo llamado default.conf, ese archivo es el ejemplo de configuracion que utiliza la herramienta, deben modificar ese archivo con sus datos de acceso, el archivo debe quedar de la siguiente forma:

vim /opt/VirtBKP/default.conf
[bkp]
url            = https://ovirt.example.com/ovirt-engine/api
user        = admin@internal
password    = password
ca_file        = ca.crt
bkpvm        = bkpvm
bckdir         = /mnt/

[restore]
url            = https://ovirt.example.com/ovirt-engine/api
user        = admin@internal
password    = password
ca_file        = ca.crt
storage        = gfs_pool0
proxy        = ovirt.example.com
proxyport    = 54323
  • url Es la URL de nuestro oVirt
  • user El usuario a utilizar para las tareas de backup
  • password Password de dicho usuario
  • ca_file Ruta del ca.crt que descargamos anteriormente
  • bkpvm Nombre de la maquina virtual que creara los backups, este nombre debe ser el nombre que se ve en el portal de administracion de oVirt
  • bckdir Directorio donde se almacenaran los archivos .qcow2
  • storage Dominio de almacenamiento donde se restaurara la imagen .qcow2, este nombre debe ser el nombre que se ve en el portal de administracion de oVirt
  • proxy Equipo que se utilizara como proxy para restaurar la imagen qcow2
  • proxyport Puerto de dicho proxy 54323 es el puerto por defecto del ovirt-image-io-proxy

Crear backup

Para crear backups de maquinas virtuales la sintaxis es la siguiente

python /opt/VirtBKP/backup_vm.py <archivo_conf> <nombre_vm_respaldar>

Por ejemplo para crear un backup de una VM de nombre webserver utilizando la configuracion cargada en el archivo default.conf

python /opt/VirtBKP/backup_vm.py default.conf webserver

Restaurar backup

Para restaurar un backup la sintaxis en la siguiente

python /opt/VirtBKP/upload_disk.py <archivo_conf> <archivo_qcow2>

El archivo qcow2 es el archivo que se creo durante la tarea de respaldo, por ejemplo si el archivo se encuentra en /mnt/webserver_2017-04-28-00h.qcow2

python upload_disk.py /mnt/webserver_2017-04-28-00h.qcow2

Forzar replicacion csync2

Forzar replicacion de directorios csync2

En caso de que tengamos implementada la replicacion de archivos via csync2es probable que existan casos en los que necesitemos forzar la replicacion de archivos manualmente ya sea para asegurarnos que esta todo replicado o para identificar problemas

Identificar configuración

Lo primero que tenemos que hacer es identificar para que configuración o para que directorio queremos forzar la replicacion

Las configuraciones las podemos encontrar dentro del directorio /etc/csync2/

El csync2 permite tener varias configuraciones diferentes y dentro de cada configuración podemos definir uno o mas directorios que se replicaran, estas configuraciones se definen en los archivos /etc/csync2/csync2_nombreconf.cfg, donde nombreconf es el nombre de la configuración.

Forzar la replicacion

Una vez identificado el nombre de la configuración podemos forzar la replicacion con el siguiente comando

csync2 -C nombreconf -xXvrB

Ejemplo, si nuestra configuración se llama www

csync2 -C www -xXvrB

Explicación de las opciones utilizadas:

  • C: Para identificar la configuración
  • x: Verifica todos los archivos y sus actualizaciones
  • X: Verifica archivos borrados
  • r: Verifica de forma recursiva directorios y sub-directorios
  • B: No bloquea la base de datos sqlite con grandes transacciones
  • v: habilita el modo verbose, se puede habilitar mas nivel de detalle agregando la opción varias veces. Ejemplo: csync2 -C www -xXvvvvrB

En algunos casos la replicacion falla debido a que faltan directorios padres en los otros equipos, en estos casos existen 2 soluciones:

  • Sincronizar la estructura de directorio a mano, esto seria crear a mano los directorios faltantes en los demás nodos
  • Ejecutar la sincronizacion en modo ejecución inicial, esto se hace agregando la opción -I, esto es un tanto arriesgado porque podemos llegar a perder datos, se debe ejecutar en el nodo que tiene la ultima versión de los datos

Instalar Haroopad en Fedora 23

Instalar Haroopad en Fedora 23

Que es Haroopad?

Haroopad es una herramienta que nos permite crear y modificar documentos utilizando MarkDown de forma sencilla y no requiere muchos recursos de hardware a diferencia de otros editores que tienden a consumir mucha memoria RAM.

Abajo un print de la herramienta en ejecucion:
https://i2.wp.com/blog.infratic.com/imagenes/haroopad/haroopad_screen.png?w=648

Pueden encontrar mas informacion sobre la herramienta en su pagina oficial:
http://pad.haroopress.com

Instalando Haroopad

Las tareas que demos seguir para instalar haroopad en Fedora son:

  • Instalar los paquetes necesarios
  • Descargar la version para Debian de 64 o 32 bits
  • Convertir el paquete .deb a .rpm
  • Instalar el paquete .rpm

Instalar los paquetes necesarios

Los dos paquetes que estaremos necesitando son wget y alien.

  • wget: para descargar Haroopad
  • alien: para convertir de .deb a .rpm

Esto lo hacemos con el comando dnf

dnf install -y wget alien

Descargar Haroopad

Para 32 bits:

cd /tmp
wget "https://bitbucket.org/rhiokim/haroopad-download/downloads/haroopad-v0.13.1-ia32.deb"

Para 64 bits:

cd /tmp
wget "https://bitbucket.org/rhiokim/haroopad-download/downloads/haroopad-v0.13.1-x64.deb"

Convertir el paquete a .rpm

Para esto utilizamos el comando alien
32 bits:

alien /tmp/haroopad-v0.13.1-ia32.deb --to-rpm --scripts

64 bits:

alien /tmp/haroopad-v0.13.1-x64.deb --to-rpm --scripts

Instalar el .rpm de Haroopad

Para esto utilizamos el comando rpm
32 bits:

rpm -ivh --nodeps /tmp/haroopad-v0.13.1-ia32.rpm

64 bits:

rpm -ivh --nodeps /tmp/haroopad-v0.13.1-x64.rpm

Finalmente esto nos deberia de crear una entrada en el menu de aplicaciones, tambien podemos usar Haroopad ejecutando desde la linea de comandos:

haroopad