TipsAndTricks >> BondingInterfaces

Manual from: source

What is bonding and how does it work

Bonding is the same as port trunking. In the following I will use the word bonding because practically we will bond interfaces as one.

Bonding allows you to aggregate multiple ports into a single group, effectively combining the bandwidth into a single connection. Bonding also allows you to create multi-gigabit pipes to transport traffic through the highest traffic areas of your network. For example, you can aggregate three megabits ports into a three-megabits trunk port. That is equivalent with having one interface with three megabytes speed.

 

Where should I use bonding?

You can use it wherever you need redundant links, fault tolerance or load balancing networks. It is the best way to have a high availability network segment. A very useful way to use bonding is to use it in connection with 802.1q VLAN support (your network equipment must have 802.1q protocol implemented).

 

What are the types of bonding available

The best documentation is on the Linux Channel Bonding Project page http://sourceforge.net/projects/bonding/

mode=1 (active-backup)

Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond’s MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.

mode=2 (balance-xor)

XOR policy: Transmit based on [(source MAC address XOR’d with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.

mode=3 (broadcast)

Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.

mode=4 (802.3ad)

IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.

  • Pre-requisites:
  • Ethtool support in the base drivers for retrieving the speed and duplex of each slave.
  • A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode.

mode=5 (balance-tlb)

Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave.

  • Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.

mode=6 (balance-alb)

Adaptive load balancing: includes balance-tlb plus receive load balancing (rlb) for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server.

 

Bonding on CentOS 4

In the modprobe.conf file, add the following:

 

alias bond0 bonding 
options bond0 miimon=80 mode=5

Be sure to add this before any of the network aliases

 

modes: 
mode=0 (Balance Round Robin)
mode=1 (Active backup)
mode=2 (Balance XOR)
mode=3 (Broadcast)
mode=4 (802.3ad)
mode=5 (Balance TLB)
mode=6 (Balance ALB)

In the /etc/sysconfig/network-scripts/ directory create the configuration file: ifcfg-bond0

 

DEVICE=bond0 
IPADDR=<ip address>
NETMASK=
NETWORK=
BROADCAST=
GATEWAY=
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Change the ifcfg-eth0 to participate in the new bond device:

DEVICE=eth0 
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Check the status of the bond.

cat /proc/net/bonding/bond0

You can use multiple bond interfaces but for that you must load the bonding module as many as there are bond links, possibly with varying options. Presuming that you want two bond interfaces, you must configure /etc/modules.conf as follow:

 alias bond0 bonding
 options bond0 -o bond0 mode=0 miimon=100
 alias bond1 bonding
 options bond1 -o bond1 mode=1 miimon=100

To manage the state of the bonds yourself you can use the ifenslave command. See the manpage of ifenslave for the details.

 

Post CentOS 4

As time has passed, edits in /etc/modprobe.conf are disfavored, in preference to writing, and the initscripts parsing, smaller configuration files that should, but are not yet required, to end in a .conf suffix. Those files are placed in: /etc/modprobe.d/ and sourced in alphabetical sequence. It makes sense to adopt the naming practice, to ‘future proof’ a distribution move to an ‘init’ successor such as systemd

Advertisements

Monitoring Weblogic with Munin

Primero de todo tenemos que extraer los datos de HEAP, CPU y Daemons & Threads del adminserver de nuestro dominio Weblogic. Posteriormente dejamos estos datos en un fichero para que el script de munin (3 en total) recoja dichos datos y sean enviados al servidor.

Extraer datos de Weblogic.

Para hacer esto usaremos el conocido jython. Para hacerlo crearemos un script en el cron que se ejecute cada 5 min;

 

crontab -l

*/5 * * * * /usr/share/munin/scripts/weblogic_plugin.sh > /dev/null 2>&1

 

Este script se conectará al Admin, ira por cada uno de los managed server (incluso el Admin). Y sacara los datos dejándolos en un fichero de texto. En nuestro caso;

/wls/export_wls_status.sh

El script weblogic_plugin.sh es;

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN1.py  > /wls/export_wls_status

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN2.py >> /wls/export_wls_status

 

Nota!!

Quizás tendréis que modificar el directorio del binario de java (/opt/jrmc/bin/) así como del fichero weblogic.jar (/opt/bea/wls/) en función de vuestra configuración.

 

Este script de cron sacará todos los datos, pero el que realmente se conecta al Weblogic es el script weblogic_py_DOMAIN.py Este script es;

username = ‘usuario’

password = ‘password’

URL=’t3://localhost:1111′

connect(username,password,URL)

domainConfig()

domini=cmo.getName()

serverList=cmo.getServers();

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

for server in serverList:

name=server.getName()

cd(name)

serverState=cmo.getState()

cd(“/ServerRuntimes/”+server.getName()+”/JVMRuntime/”+server.getName())

sizeHP=cmo.getHeapSizeCurrent()

usedHP=cmo.getUsedHeap()

proces=cmo.getAllProcessorsAverageLoad()

timegc=cmo.getLastGCEnd()

daemon=cmo.getNumberOfDaemonThreads()

thread=cmo.getTotalNumberOfThreads()

 

print domini,’PRO’,  name,’SizeHPWLS ‘,sizeHP

print domini,’PRO’,  name,’UsedHPWLS ‘,usedHP

print domini,’PRO’,  name,’ProcesWLS ‘,proces

print domini,’PRO’,  name,’TimeGCWLS ‘,timegc

print domini,’PRO’,  name,’DaemonWLS ‘,daemon

print domini,’PRO’,  name,’ThreadWLS ‘,thread

 

domainConfig()

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

 

Una vez tenemos los datos en un fichero de texto podremos tratarlo. Dejo un ejemplo de cómo se queda el fichero con los datos:

 

DOMAIN1 PRO AdminServer SizeHPWLS  536870912

DOMAIN1 PRO AdminServer UsedHPWLS  454807648

DOMAIN1 PRO AdminServer ProcesWLS  0.0806008984095334

DOMAIN1 PRO AdminServer TimeGCWLS  1380632745493

DOMAIN1 PRO AdminServer DaemonWLS  51

DOMAIN1 PRO AdminServer ThreadWLS  52

DOMAIN1 PRO DOMAIN1_01 SizeHPWLS  1610612736

DOMAIN1 PRO DOMAIN1_01 UsedHPWLS  1199548792

DOMAIN1 PRO DOMAIN1_01 ProcesWLS  0.08062796813666061

DOMAIN1 PRO DOMAIN1_01 TimeGCWLS  1380629744340

DOMAIN1 PRO DOMAIN1_01 DaemonWLS  42

DOMAIN1 PRO DOMAIN1 _01 ThreadWLS  43

 

Para tratar el fichero crearemos un script en /usr/share/munin/plugins/ con el nombre que se quiera, en mi caso MANAGED_DOMAIN1_HEAP

El fichero básicamente hace un grep del dato que se quiera y lo devuelve. Para el HEAP busca SizeHPWLS, para daemons y threads DaemonWLS  y ThreadWLS y para CPU busca ProcesWLS

 

#!/bin/sh

case $1 in

config)

cat <<‘EOM’

graph_title Managed Servers Heap DOMAIN1_1

graph_vlabel HEAP USE/MAX

DOMAIN1_1_Size.label DOMAIN1_1 Max

DOMAIN1_1_Use.label DOMAIN1_1 Use

graph_scale yes

graph_category weblogic

graph_info Grafica Weblogic DOMAIN1_1 Heap Managed Servers

EOM

exit 0;;

esac

echo -n “P DOMAIN_1_Size.value ”

grep SizeHPWLS /wls/export_wls_status | grep DOMAIN1_1 | awk ‘{print $5}’

echo -n ” DOMAIN_1_Use.value ”

grep UsedHPWLS /wls/export_wls_status | grep DOMAIN1_1| awk ‘{print $5}’

 

Creamos el enlace simbólico;

cd /etc/munin/plugins

ln –s MANAGED_DOMAIN1_HEAP  /usr/share/munin/plugins/MANAGED_DOMAIN1_HEAP

Reiniciamos el agente

/etc/init.d/munin-node restart

Y en unos minutos ya lo tenemos en nuestro servidor

 

HEAP

Descarga de scripts: Weblogic & Munin Scripts

 

Munin monitoring How To

Munin es un software para monitorizar i graficar que nos permite analizar el estado de nuestros sistemas.

munin

Introducción

Funciona como un Cacti o Graphite pero a diferencia de estos dos Munin funciona con agentes. Esto podría ser un hándicap pero veremos que nos va ayudar mucho en la instalación y mantenimiento del entorno.

Hay dos partes, la cliente “munin-node” y la servidor “munin”

Aquí tenemos una imagen que nos va ayudar a entender cómo funciona.

 

munin design

El munin-master (servidor) se ejecuta cada 5 minutos desde el crond i ejecuta varios scripts;

Munin-update: Este se encarga de leer el fichero /etc/munin/munin.conf y recoger todos los clientes. Posteriormente se conecta por el puerto 4949/tcp i le dice al “munin-node” que ejecute todos los scripts que tiene en /etc/munin/plugins/ y le devuelva el resultado.

Munin-limites: Este analiza los datos obtenidos de los clientes y revisa si algunos de ellos está por encima del umbral marcado en la gráfica. En caso de ser así actualiza el estado de la gráfica  a “Warning” o “Critical”.

Munin-html: Se encarga de actualizar la web. Si ponemos nuevos nodos o dominios este actualizara la web. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

Munin-graph: “La joya de la corona”. Usando las librerías de RRD-Tool y con los valores de “munin-update” se encarga de generar las gráficas. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

 

Para “munin-html” y “munin-graph” los configuraremos como CGI. Las diferencias son;

Cron: Cuando lo configuramos como cron estos scripts generan todas las web y todas las gráficas cada vez que se ejecuta el script. En caso de tener unos 50 nodos en 5 minutos hay tiempo suficiente para realizar la tarea.

CGI: Configuraremos como CGI cuando tengamos muchos nodos. En mi instalación actualmente tengo 300 nodos con un total de 70.000 ficheros rrd y en 5 minutos no hay tiempo para procesarlo todo. Con esto lo que hacemos es que cada vez que entres en la web “munin-html” generará dicha web y cada vez que entres en un nodo “munin-graph” generará las gráficas que quieres visualizar.

Instalación (servidor)

En este caso vamos a realizar una instalación en una RedHat 5.9 64bits utilizando EPEL.

Registramos la maquina en RedHatNetwork, RedHat Satellite o usando un cd. (Basicamente necesitamos poder ejecutar yum)

 

Instalamos EPEL

cd /tmp/

wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

rpm -Uvh /tmp/epel-release-5-4.noarch.rpm

 

Instalamos munin y munin-node (asi también monitorizamos en servidor)

 

yum install httpd mod_fcgid munin munin-node

 

2

 

chkconfig munin on

chkconfig munin-node on

 

Configuración (servidor)

El fichero principal de configuración es /etc/munin/munin.conf

Lo modificaremos poniendo solo los siguientes datos;

htmldir /var/lib/www/html/munin  #### (es el directorio de la web)

logdir /var/log/munin

includedir /etc/munin/conf.d

graph_period minute

graph_strategy cgi                         ##### Tiene que estar en cgi no en cron

cgiurl_graph /munin-cgi/munin-cgi-graph   #### Es la URL donde tiene los scripts de CGI (lo veremos al configurar el apache)

html_strategy cgi                            ##### Tienen que estar en cgi no en cron

max_processes 100                       ##### Por defecto viene en 16. Son los procesos que creara al ejecutar el munin-update. Si tienes mucha maquina pon un valor más alto. Aun así es bueno realizar varias pruebas hasta encontrar un buen valor.

##### Esto es un ejemplo de cómo crear un nodo cliente. Estos nodos son los que el script “munin-update” se conecta

[NODO_CLIENET.TEST]

address 192.168.0.1

use_node_name yes

 

Para más información de posibles configuraciones (LINK) http://munin-monitoring.org/wiki/munin.conf

 

Ahora ya tenemos configurado el munin para CGI, pero nos queda el apache…

Configuración APACHE para CGI:

En la configuración del apache tenemos que notificarle donde están los scripts para CGI.

Vamos al fichero /etc/httpd/conf.d/munin.conf

Comentaremos las líneas para entender posibles modificaciones.

 

<VirtualHost *:443> ### En mi caso uso SSL con certificado

SSLEngine on

SSLCertificateFile /etc/httpd/cert/selfsigned/munin.node.es.crt

SSLCertificateKeyFile /etc/httpd/cert/selfsigned/keys/ munin.node.es.key

ServerName munin.node.es

DocumentRoot /var/lib/www/html ###Importante que sea el mismo que hemos puesto en el fichero /etc/munin/munin.conf

<IfModule !mod_rewrite.c>

Alias /munin-cgi/munin-cgi-html/static /var/lib/www/html/munin/static ## Lo que hacemos en indicarle donde esta la web (parte estatica). Esto se ejecuta cada vez que entramos en la web

RedirectMatch ^/$ /munin-cgi/munin-cgi-html/

</IfModule>

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^/favicon.ico /var/lib/www/html/munin/static/favicon.ico [L]

RewriteRule ^/static/(.*) /var/lib/www/html/munin/static/$1          [L]

# HTML (Cada vez que llamemos a una html este llamara al script munin-cgi-html

RewriteRule ^(/.*.html)?$           /munin-cgi/munin-cgi-html/$1 [PT]

# Images (Cada vez que solicitemos una grafica este llamara al script munin-cgi-graph

 

RewriteRule ^/munin-cgi/munin-cgi-graph/(.*) /$1

RewriteCond %{REQUEST_URI}                 !^/static

RewriteRule ^/(.*.png)$  /munin-cgi/munin-cgi-graph/$1 [L,PT]

</IfModule>

# Nos tenemos que asegurar que los script que están en /var/lib/www/cgi-bin/ son ejecutables

ScriptAlias /munin-cgi/munin-cgi-graph /var/lib/www/cgi-bin/munin-cgi-graph

<Location /munin-cgi/munin-cgi-graph>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

ScriptAlias /munin-cgi/munin-cgi-html /var/lib/www/cgi-bin/munin-cgi-html

<Location /munin-cgi/munin-cgi-html>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

<IfModule !mod_rewrite.c>

<Location /munin-cgi/munin-cgi-html/static>

Options -ExecCGI

SetHandler None

</Location>

</IfModule>

</VirtualHost>

 

Configuración (cliente)

Para el cliente editaremos el fichero /etc/munin/munin-node.conf y pondremos la IP del host servidor como una expresión regular;

allow ^192.168.0.2$

 

Información oficial de configuración de munin-node (LINK) http://munin-monitoring.org/wiki/munin-node.conf

 

HeartBeat ERROR: Message hist queue is filling up

El mensaje siguiente es fruto de un problema de conectividad;

heartbeat[17154]: 2011/11/03_14:40:08 ERROR: Message hist queue is filling up (487 messages in queue)
heartbeat[17154]: 2011/11/03_14:40:09 ERROR: Message hist queue is filling up (488 messages in queue)

Si hacemos iptables -L seguro que aprece algo al estilo….

[SERVER].root:/etc/ha.d > iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all — anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all — anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all — anywhere anywhere
ACCEPT icmp — anywhere anywhere icmp any
ACCEPT esp — anywhere anywhere
ACCEPT ah — anywhere anywhere
ACCEPT udp — anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp — anywhere anywhere udp dpt:ipp
ACCEPT tcp — anywhere anywhere tcp dpt:ipp
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp — anywhere anywhere state NEW tcp dpt:ssh
REJECT all — anywhere anywhere reject-with icmp-host-prohibited

 

Estas son las IPTABLES por defecto en instalaciones REDHAT 5.5 Tocará quitarlas todas con un “iptables -F”

 

Nagios Operations Dashboard

Buscando cosas de nagios he encontrado un Nagios Operations Dashboard

Es un dashboard pensado para entornos de Operación. Simplicidad al maximo.  Muestra solo las alertas Critical y Warning

Este Dashboard se basa en 2 ficheros;

nagios.php (que te muestra la web)

nagios_get.php (que revisa el estado de Nagios por el fichero status.dat, este es llamado por nagios.php)

Lo unico que tenemos que hacer es modificar el fichero nagios_get.php indicando donde tenemos el fichero status.dat

En la sección nagios dejo colgada la versión para la web. En caso de tener alguna alerta aparecerá en dicha sección Link

Dejo aqui un link de descarga del software dash y su web oficial

P.D. Parece que hay una versión 2 de esta herramienta, pero esta nueva versión es para Nagios con Mysql, ya que la ultima usa el status.dat. Nueva Versión

Nagios 3.2.3 + Nagios Theme + Cacti en Debian 6 Squeeze

Nagios

Instalamos Apache, PHP y librerias;
 
apt-get install apache2 libapache2-mod-php5 build-essential php5 libgd-graph-perl postfix
 
Creamos los usuarios y grupos;
 
/usr/sbin/useradd -m -s /bin/bash nagios
passwd nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd www-data
 
Descargamos el software de Nagiosmkdir ~/downloads
 
mkdir ~/downloads
cd ~/downloads
Compilamos e instalamos el software
 
tar xzf nagios-3.2.3.tar.gz
cd nagios-3.2.3
./configure –with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
 
Editamos el fichero de contactos modificando el email definido actualmente por el nuestro;
 
vim /usr/local/nagios/etc/objects/contacts.cfg
 
define contact{
contact_name     nagiosadmin             ; Short name of user
use                generic-contact         ; Inherit default values from generic-contact template (defined above)
alias              Nagios Admin            ; Full name of user
email             nagios@osties.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
Seguimos con la instalación;
 
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
/etc/init.d/apache2 reload
cd ~/downloads
tar xzf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install
 
Lo configuramos para iniciarse con el sistema;
 
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios
 
El siguiente comando se utuliza para ver si el nagios (binario) funciona correctamente con el nagios.cfg (similar al apache2ctl -t en Apache) Asi veremos si funcionan nuestras modificaciiones
 
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios start
 
Ya podemos acceder a nuestro servidor http://pre.osties.com/nagios/ User:nagiosadmin
Una virtud de Nagios no es su entorno grafico. Por eso vamos a modificarle el frontend.
cd ~/downloads
unzip vautour_style.zip -d ./vautour
cp -Rfa /usr/local/nagios/share /usr/local/nagios/share_OLD
cp -Rfa vautour/* /usr/local/nagios/share/
 
Ahora ya tenemos un Nagios mas “visible”.

CACTI:

En el caso del cacti, el procedimiento es el mismo que en Debian 5 Lenny. Dejo aqui el mismo procedimiento que ya colgue en su dia para Debian 5.
apt-get install mysql-server rrdtool snmp
 
Activaremos la extensión para el SNMP añadiendo la siguientes lineas;
 
 
vim /etc/php5/conf.d/snmp.ini
 
; Enable snmp extension module
 
extension=snmp.so
file_uploads = On
vim /etc/apache2/mods-enabled/php5.conf (Añadimos o modificamos los siguientes campos)
 
# PHP is an HTML-embedded scripting language which attempts to make it
 # easy for developers to write dynamically generated webpages.
 
LoadModule php5_module modules/libphp5.so
 
# Cause the PHP interpreter to handle files with a .php extension.
 
AddHandler php5-script .php
 AddType text/html .php
 # Add index.php to the list of files that will be served as director
# indexes.
 
DirectoryIndex index.php
 
vim /etc/apache2/httpd.conf
 
Include conf.d/*.conf
Vamos  a preparar la MySQL para la instalación de CACTI;
 
 
mysqladmin -u root –p create cacti
cd /tmp
tar xzvf cacti-0.8.7g.tar.gz
mv cacti-0.8.7g/var/www/cacti
cd /var/www/cacti/
mysql -u root -p cacti < cacti.sql
adduser cacti
mysql -u root -p mysql
mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY ’somepassword’;
 
mysql> flush privileges;
 mysql> quit
 
 
Agregamos las siguientes lineas;
 
 
vim include/config.php
$database_type = “mysql”;
 $database_default = “cacti”;
 $database_hostname = “localhost”;
 $database_username = “cacti”;
 $database_password = “cacti”;
Con los passwords que hemos puesto y el usuario que toca.
chown -R cacti log
chown -R cacti rra
Agregamos;
vim /etc/crontab
*/5 *   * * *   cacti   php /var/www/cacti/poller.php > /dev/null 2>&1
Nos conectamos con http://pre.osties.com/cacti y pulsamos Next 2 veces y Finish
Cacti
Cacti
Cacti Resumen Instalación
Cacti Login
Nos logamos como Admin y passwd : admin. Luego cambiamos el password y ya podremos añadir los hosts
Ya tenemos nuestro entorno de gráficas ;)
Cacti Inside

Volúmenes lógicos (LVM) Crear, modificar VG y LV

 

LVM es mucho más flexible, permitiendo añadir espacio adicional a volúmenes ya creados de manera transparente y simple.

Pasamos a ver los conceptos para entender la base del sistema.

Estructura LVM

Para que todo funcione es necesario instalar el paquete lvm10 o lvm2, recomiendo la versión 2 aunque la mayoría de distribuciones todavía mantengan la versión 1. Hay que asegurarse de que haya un script en el arranque para poner el marcha LVM.

Lo primero de todo es hacer las particiones, puede hacerse con cfdisk. Si se usa una versión anterior a la 2 de LVM, es obligatorio definir el tipo como Linux LVM.

Hay que destacar que la partición que contenga /boot no podrá formar parte de un volumen lógico, los cargadores de arranque no suelen soportarlo. En nuestro caso se trata de hda1.

Buscamos el nuevo disco

Si hemos agregado un disco hace poco podemos ver el device que ha sido generado con un fdisk -l. En mi caso he agregado un disco de 43Gb de mi VMWare a la maquina;

root@http:~# fdisk -l
Disc /dev/sdb: 42.9 GB, 42949672960 octets
255 heads, 63 sectors/track, 5221 cylinders
Units = cilindres of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Damos soporte para LVM a las otras dos particiones, este paso borrará TODOS los datos existentes.

root@http:~# pvcreate /dev/sdb
Physical volume “/dev/sdb” successfully created

Ahora creamos el VolumGroup que contendra tantos VolumGroup como queramos.

root@http:~# vgcreate VolumGroup2 /dev/sdb
Volume group “VolumGroup2” successfully created

Vamos a ver el resultado con vgdisplay:

root@http:~# vgdisplay
— Volume group —
VG Name VolumGroup2
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 40,00 GiB
PE Size 4,00 MiB
Total PE 10239
Alloc PE / Size 0 / 0
Free PE / Size 10239 / 40,00 GiB
VG UUID 0er3jx-M6p7-qsDC-WiHM-Qem3-n3R6-0xqhsK

Vamos a crear los volúmenes lógicos. Crearemos 2. Uno de 5, otro de 30 y dejaremos 5 libres para poder ampliar

root@http:~# lvcreate -L5,00G -n LV5GB VolumGroup2
Logical volume “LV5GB” created
root@http:~# lvcreate -L30,00G -n LV30GB VolumGroup2
Logical volume “LV30GB” created

El parámetro -L es lo “large” que es el disco. Vamos, el tamaño que queremos de LV. El parametro -n define el nombre del LV

Vamos a ver el resultado con LVDISPLAY

root@http:~# lvdisplay VolumGroup2
— Logical volume —
LV Name /dev/VolumGroup2/LV5GB
VG Name VolumGroup2
LV UUID YAKkwE-tYrp-O233-3r1B-YzNi-cOn2-dE6FQT
LV Write Access read/write
LV Status available
# open 0
LV Size 5,00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 254:6

— Logical volume —
LV Name /dev/VolumGroup2/LV30GB
VG Name VolumGroup2
LV UUID gJTafK-o0Al-pDNt-UIXJ-nUtp-YAkx-oZgNz3
LV Write Access read/write
LV Status available
# open 0
LV Size 30,00 GiB
Current LE 7680
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 254:7

Vamos a darle formato con mkfs. Podemos realizar distintos formatos, XFS, EXT3 etc..

root@http:~# mkfs.ext3 /dev/VolumGroup2/LV30GB
mke2fs 1.41.12 (17-May-2010)
Etiqueta del sistema de fitxers=
Tipus de sistema operatiu: Linux
Mida del bloc=4096 (log=2)
Mida del fragment=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1966080 nodes-i, 7864320 blocs
393216 blocs (5.00%) reservats per al superusuari
Bloc de dades inicial=0
MÃ xim de blocs del sistema de fitxers=0
240 grups de blocs
32768 blocs per grup, 32768 fragments per grup
8192 nodes-i per grup
Còpies de seguretat del superbloc desades en els blocs:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Escriptura de les taules de nodes-i: 30/240
fet
Creació del registre de transaccions (32768 blocs): fet
Escriptura de la informació dels súperblocs i de comptabilitat del sistema de fitxers:fet


Agregar en fstab

Ahora solo queda agregar el disco en el fstab para que lo monte cada vez que arranque el sistema

/dev/VolumGroup2/LV30GB /backup ext3 defaults 0 0

El resultado final

 

root@http:~# df -h
S. fitxers Mida En ús Lliure %Ãs Muntat a
/dev/mapper/pont-root 322M 107M 199M 35% /
tmpfs 125M 0 125M 0% /lib/init/rw
udev 120M 120K 120M 1% /dev
tmpfs 125M 0 125M 0% /dev/shm
/dev/sda1 228M 15M 202M 7% /boot
/dev/mapper/pont-home 2,7G 78M 2,5G 3% /home
/dev/mapper/pont-tmp 225M 6,1M 208M 3% /tmp
/dev/mapper/pont-usr 2,7G 495M 2,1G 20% /usr
/dev/mapper/pont-var 1,4G 935M 337M 74% /var
/dev/mapper/VolumGroup2-LV30GB 30G 173M 28G 1% /backup

root@http:~# vgdisplay
— Volume group —
VG Name VolumGroup2
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 40,00 GiB
PE Size 4,00 MiB
Total PE 10239
Alloc PE / Size 8960 / 35,00 GiB
Free PE / Size 1279 / 5,00 GiB
VG UUID 0er3jx-M6p7-qsDC-WiHM-Qem3-n3R6-0xqhsK

 

Ampliar LogicalVolum

Si queremos ampliar el Volumen, tendremos que poner el nuevo tamaño, no el tamaño ampliar

root@http:~# lvextend -L34G /dev/mapper/VolumGroup2-LV30GB
Extending logical volume LV30GB to 34,00 GiB
Logical volume LV30GB successfully resized

Indicamos al sistema el nuevo tamaño

root@http:~# resize2fs /dev/mapper/VolumGroup2-LV30GB
resize2fs 1.41.12 (17-May-2010)
El sistema de fitxers a /dev/mapper/VolumGroup2-LV30GB està muntat a /backup; cal un canvi de mida en línia
old desc_blocks = 2, new_desc_blocks = 3
Canvi de mida en línia de /dev/mapper/VolumGroup2-LV30GB a 8912896 (4k) blocs.
El sistema de fitxers a /dev/mapper/VolumGroup2-LV30GB té ara una mida de 8912896 blocs.

En XFS seria: xfs_growfs /punto_montaje

Ya tenemos ampliado el LV

root@http:~# df -h
S. fitxers Mida En ús Lliure %Ãs Muntat a
/dev/mapper/pont-root 322M 107M 199M 35% /
tmpfs 125M 0 125M 0% /lib/init/rw
udev 120M 120K 120M 1% /dev
tmpfs 125M 0 125M 0% /dev/shm
/dev/sda1 228M 15M 202M 7% /boot
/dev/mapper/pont-home 2,7G 78M 2,5G 3% /home
/dev/mapper/pont-tmp 225M 6,1M 208M 3% /tmp
/dev/mapper/pont-usr 2,7G 495M 2,1G 20% /usr
/dev/mapper/pont-var 1,4G 935M 337M 74% /var
/dev/mapper/VolumGroup2-LV30GB 34G 177M 32G 1% /backup

 

Agregar un disco al VolumGroup

Primero detectamos el nuevo disco y creamos el soporte a VolumGroup:

pvcreate /dev/hdb1


Luego ampliamos el VolumGroup

vgextend grupo_volumen /dev/hdb1

 


Mas información en: http://www.tldp.org/HOWTO/LVM-HOWTO/