Limitar porcentaje de uso de CPU a un proceso

Limitar porcetanje de uso de CPU a un proceso

Para limitar el porcentaje que de CPU que utiliza un proceso podemos usar la herramienta cpulimit, la cual debemos instalar.

Instalar CPULimit
El paquete cpulimit se encuentra dentro del repositorio epel.
Antes de instalar el paquete debemos configurar dicho repositorio, en caso de tener CentOS:

yum install -y epel-release

En caso de tener otra distro basada en RHEL 7

yum install -y http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Luego instalamos el paquete cpulimit

yum install -y cpulimit

Utilizando cpulimit

La sintaxis para usar la herramienta es la siguient:

cpulimit -l [porcentajemaximo] comando.sh

Por Ejemplo si queremos limitar al 50% de CPU un proceso que se levanta con el script test.sh el comando seria el siguiente:

cpulimit -l 50 test.sh

Ampliar particiones en equipos CentOS/RHEL 5/6/7 sobre VMWARE

Ampliar particiones en equipos CentOS/RHEL 5/6/7 sobre VMWARE

Una vez que agrandamos el disco virtual desde la consola de administracion de VMWARE es necesario seguir un par de pasos para poder utilizar el espacio agregado

Re escanear el dispositivo desde el S.O.

Es necesario re-escanear el disco desde el S.O. para que este vea el nuevo tamaño
Esto lo hacemos con el siguiente comando:

 echo 1 > /sys/class/block/#dispositivo/device/rescan

Donde #dispositivo es el nombre de nuestro disco en cuestion, en este caso lo haremos sobre la sda.

echo 1 > /sys/class/block/sda/device/rescan

Hecho esto el S.O. ya deberia reconocer el nuevo tamaño, por ende podemos ampliar nuestra particion

Ampliar particion

Para ampliar la particion es necesario eliminar y volver a crear la particion en cuestion, lo que se debe tener en cuenta es que el bloque de inicio debe ser el mismo y el bloque final debe ser mayor, en caso de que el bloque de inicio sea diferente perderemos los datos, para esta tarea utilizamos el comando fdisk:

[root@server ~]# fdisk /dev/sda
 
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a9e6f
   Device Boot      Start         End      Blocks   Id  System
 
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

Eliminamos la particion

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 is deleted

Creamos de vuelta la particion teniendo en cuenta el bloque inicial y el final

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (1026048-62914559, default 1026048): 1026048
Last sector, +sectors or +size{K,M,G} (1026048-62914559, default 62914559):[ENTER]
Using default value 62914559
Partition 2 of type Linux and of size 29.5 GiB is set

Cambiamos el tipo de particion para que quede de la misma manera

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Imprimimos para comparar con la tabla de particiones inicial

Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a9e6f
   Device Boot      Start         End      Blocks   Id  System
 
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    62914559    30944256   8e  Linux LVM

Finalmente guardamos los cambios

Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Si nos fijamos en el ejemplo anterior al volver a crear lo unico que varia es el bloque de inicio y el bloque.

Para que se reconozca el nuevo tamaño de la particion es necesario reinciar el equipo

reboot

Ampliar PV

Para que el volume group pueda utilizar el nuevo espacio es necesario redimensionar el pv, lo cual lo hacemos con el comando pvresize

pvresize  /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Una vez que ejecutamos el pvresize ya podemos usar el nuevo espacio en el Volume Group

Identificar a que Switch esta conectado nuestro servidor con TCPDUMP y CDP

Identificar a que Switch esta conectado nuestro servidor con TCPDUMP y CDP

Con el comando tcpdump podemos consultar informacion sobre el switch al cual estamos conectados via CDP

La sintaxis del comando es la siguiente:

tcpdump -nn -vvv -i interfaz -s 1500 -c 1 'ether[20:2] == 0x2000'

Cambiando interfaz por el nombre de la interfaz a traves de la cual quieres hacer la consulta, por ejemplo bond0:

$ sudo tcpdump -nn -vvv -i bond0 -s 1500 -c 1 'ether[20:2] == 0x2000'
tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 1500 bytes
16:37:12.606879 CDPv2, ttl: 180s, checksum: 692 (unverified), length 389
    Device-ID (0x01), length: 26 bytes: 'SW-3'
    Version String (0x05), length: 180 bytes:
      Cisco IOS Software, C3560 Software (C3560-IPBASE-M), Version 12.2(25)SEE3, RELEASE SOFTWARE (fc2)
      Copyright (c) 1986-2007 by Cisco Systems, Inc.
      Compiled Thu 22-Feb-07 14:40 by myl
    Platform (0x06), length: 20 bytes: 'cisco WS-C3560G-48PS'
    Address (0x02), length: 13 bytes: IPv4 (1) 110.10.22.160
    Port-ID (0x03), length: 18 bytes: 'GigabitEthernet0/2'
    Capability (0x04), length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
    Protocol-Hello option (0x08), length: 32 bytes:
    VTP Management Domain (0x09), length: 6 bytes: 'ejemplo'
    Native VLAN ID (0x0a), length: 2 bytes: 2355
    Duplex (0x0b), length: 1 byte: full
    AVVID trust bitmap (0x12), length: 1 byte: 0x00
    AVVID untrusted ports CoS (0x13), length: 1 byte: 0x00
    Management Addresses (0x16), length: 13 bytes: IPv4 (1) 10.0.2.160
    unknown field type (0x1a), length: 12 bytes:
      0x0000:  0000 0001 0000 0000 ffff ffff
1 packets captured
5 packets received by filter
0 packets dropped by kernel

El comando tarda unos segundos, luego nos trae toda la informacion tal como en el ejemplo de arriba, donde podemos ver el nombre de switch, en este caso SW-3 y el puerto al cual estamos conectados, en este caso GigabitEthernet0/2

Crear usuarios locales en oVirt > 3.5

Crear usuarios locales en oVirt > 3.5

Gracias a la extension ovirt-aaa-jdbc podemos gestionar los usuarios locales del oVirt, dichos usuarios son almacenados en la base de datos del oVirt por lo tanto no requieren de una fuente externa de autenticacion.

Para crear un usuario lo podemos hacer con el comando ovirt-aaa-jdbc-tool, la sintaxis es la siguiente:

ovirt-aaa-jdbc-tool user add nombredelusuario

Por ejemplo para crear un usario stonith

# ovirt-aaa-jdbc-tool user add stonith
adding user stonith...
user added successfully
Note: by default created user cannot log in. see:
/usr/bin/ovirt-aaa-jdbc-tool user password-reset --help.

Con el comando anterior creamos el usuario pero todavia no lo podemos utilizar debido a que falta asignarle un password, la sintaxis para setear un password a un usuario es la siguiente:

/usr/bin/ovirt-aaa-jdbc-tool user  password-reset usuario --password=pass:newpassword --password-valid-to='AAAA-MM-DD HH:MM:ssZ'

Por ejemplo para asignar "12345678" como password para el usuario creado en el ejemplo anterior usaremos el siguiente comando:

# /usr/bin/ovirt-aaa-jdbc-tool user password-reset \
stonith --password=pass:12345678 \
--password-valid-to='2600-12-02 00:00:00Z'
 
updating user stonith...
user updated successfully

Debemos tener en cuenta la opcion --password-valid-to porque si no lo seteamos el toma la fecha actual, es decir al crear nuestro password ya no seria valido.

Una vez que creamos y que asignamos un password al usuario podemos asignarle permisos de la UI de oVirt

Crear usuario para backup en bases de datos MySQL/MariaDB

Crear usuario para backup en bases de datos MySQL/MariaDB

Crearemos el usuario "backup" que podra loguearse desde cualquier equipo del dominio "infratic.com" la contraseña del usuario sera "backupadmin", para crear dicho usuario los comandos SQL son los siguientes:

CREATE USER 'backup'@'%' IDENTIFIED BY 'backupadmin';
    GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, SHOW VIEW ON *.* TO 'backup'@'%' IDENTIFIED BY 'backupadmin';

Donde backup es el usuario y backupadmin es el password del mismo, luego debemos actualizar los privilegios

FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.47 sec)

Mover los volúmenes LVM de un Disco a otro en caliente

Mover los datos de un Disco a otro en caliente

En el caso de tener LVM implementado es posible mover los datos en caliente de un disco a otro.

El escenario es el siguiente:

volume group: datosvg
disco viejo: sda
disco nuevo: sdb
Sistema Operativo: CentOS 6.2 x86_64

Basicamente la idea es mover los datos del disco viejo al disco nuevo en caliente.

Lo primero que se debe hacer es crear la particion PV sobre la sdb

Una vez que tenemos la particion creamos los PVs

pvcreate /dev/sdb1

Agregamos el disco nuevo al volume group

vgextend datosvg /dev/sdb1

Luego Movemos los datos con el comando pvmove

pvmove /dev/sda1

Una vez que el comando termine podemos retirar sin inconvenientes el disco viejo

vgreduce datosvg /dev/sda1

Luego del vgreduce podemos retirar el disco del equipo sin problemas.

Crear discos ORACLEASM RHEL/CentOS/OL 6

Configurar ORACLEASM con discos compartidos iSCSI en RHEL/CentOS/SL/OL 6

Instalacion de paquetes necesarios

Primero debemos bajar los rpm de la página de Oracle. http://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel6-1940776.html

  • oracleasm-support-2.1.8-1.el6.x86_64.rpm
  • oracleasmlib-2.0.4-1.el6.x86_64.rpm

Debemos copiar dichos .rpm al servidor. Una vez que copiamos procedemos Instalar.

yum localinstall /root/oracleasm*rpm

Si la instalacion actualiza el kernel, se debe reiniciar el equipo.

Prepara los discos

Para utilizar los discos es necesario crear un particion del tipo Linux

fdisk -cu /dev/sdb

Configurar el oracleasm

Para la configuracion del asm utilizamos el comando oracleasm

[root@nodo1 ~]# oracleasm configure -i
Configuring the Oracle ASM library driver.
 
This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting without typing an
answer will keep that current value.  Ctrl-C will abort.
 
Default user to own the driver interface []: oracle12
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: [ENTER]
Scan for Oracle ASM disks on boot (y/n) [y]: [ENTER]
Writing Oracle ASM library driver configuration: done

Una vez configurado procemos a iniciar el oracleasm


[root@nodo1 ~]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

### Crear los dispositivos ASM
La creacion de los dispositivos ASM se debe realizar en uno de los nodos y luego ejecutar el comando <code>oracleasm scandisks</code>

[root@nodo1 ~]# oracleasm createdisk VOTE_OCR00 /dev/sdb1
Writing disk header: done
Instantiating disk: done
[root@nodo1 ~]# oracleasm createdisk DISK1 /dev/sdc1
Writing disk header: done
Instantiating disk: done

 
En el equipo que es el cluster repetir los pasos hasta el inicio del oracleasm (Paso 5) sin hacer el paso 3.
 
Buscar y listar los discos

[root@nodo2 ~]# oracleasm configure -i
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle12
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]:
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done

[root@nodo2 ~]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

[root@nodo2 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks…
Scanning system for ASM disks…
Instantiating disk "VOTE_OCR00"
Instantiating disk "DISK1"

[root@nodo2 ~]# oracleasm listdisks
DISK1
VOTE_OCR00

 
Activar el servicio en todos los nodos

chkconfig oracleasm on

Saber tamaño de cada Base de Datos en MySQL/MariaDB

Tamaño de cada Base de Datos en MySQL/MariaDB

Para obtener el tamaño de la base de datos en MySQL podemos correr el siguiente query:

SELECT
  table_schema "Base de Datos",
  sum( data_length + index_length ) / 1024 / 1024 "Tamaño en MB"
  FROM
  information_schema.TABLES GROUP BY table_schema;

Obtendremos dos columnas:

La primera, de nombre “Base de Datos” con los nombres de las bases de datos; y
La segunda, de nombres “Tamaño en MB” con los tamaños en Megabytes correspondientes a las bases de datos.

Ejemplo:

MariaDB [(none)]> SELECT
    ->   table_schema "Base de Datos",
    ->   sum( data_length + index_length ) / 1024 / 1024 "Tamaño en MB"
    ->   FROM
    ->   information_schema.TABLES GROUP BY table_schema;
+--------------------+---------------+
| Base de Datos      | Tamaño en MB  |
+--------------------+---------------+
| blog               |    2.35937500 |
| desarrollo         |    0.04687500 |
| glpi               |   45.17187500 |
| information_schema |    0.15625000 |
| mysql              |    3.19210529 |
| owncloud           |    1.42187500 |
| performance_schema |    0.00000000 |
| rsyslog            |    3.53125000 |
| wordpress          |    0.75000000 |
+--------------------+---------------+
9 rows in set (10.96 sec)

Instalar driver VIA en CentOS/RHEL/SL 7

Instalar driver VIA en CentOS/RHEL/SL 7

En caso de instalar CentOS 7 sobre algun hardware viejo con chipset VIA es muy probable que no reconozca las tarjetas de red o que las reconozco pero tenga problemas como por ejemplo que muestre que la tarjeta soporta hasta 100Mbps cuanto en realidad soporta hasta 1000Mpbs, para solucionar esto podemos descargar los drivers del repositorio "ElRepo"

En caso de tener internet en el equipo procedemos con los siguientes comandos:

rpm -Uvh http://mirror.symnds.com/distributions/elrepo/extras/el7/x86_64/RPMS/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install kmod-forcedeth

En caso de no tener internet en dicho equipo lo que debemos hacer es descargar los paquetes en otro equipo, copiarlos y luego instalarlos.

Redimensionar dispositivo multipath

Como hacer resize de LUNs y gestionadas por multipath

Detectar dispositivos fisicos

Primero debemos detectar cuales son los dispositivos fisicos o "sd" que hacen referencia a nuestro dispositivo multipath

Dichos dispositivos los podemos detectar ejecutando

multipath -ll nombredeldispositivo

Ej:

[root@c7kl ~]# multipath -ll hus1_bd1
hus1_bd1 (360060e80101b6840058bb6540000007f) dm-4 HITACHI ,DF600F
size=150G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 0:0:0:0 sda 8:0   active ready running
`-+- policy='service-time 0' prio=0 status=enabled
  `- 2:0:0:0 sdk 8:160 active ready running

Si nos fijamos en los detalles de cada camino:

`- 0:0:0:0 sda 8:0 active ready running

`- 2:0:0:0 sdk 8:160 active ready running

Vemos que los dispotivos fisicos son "sda" y "sdk"

Re-escaner dispositivos fisicos

Luego de identificar procedemos a re-escaner los dispositivos fisicos, la manera de hacerlo es la siguiente:

echo 1 > /sys/class/block/sdX/device/rescan

Reemplazando sdX por nuestros dispositivos fisicos.

Segun el ejemplo anterior

[root@c7kl ~]# echo 1 > /sys/class/block/sda/device/rescan
[root@c7kl ~]# echo 1 > /sys/class/block/sdk/device/rescan

Redimensionar el dispositivo logico

Finalmente para redimensionar el dispositivo logico debemos utilizar el comando multipathd con la opcion -k, la sintaxis es la siguiente:

multipathd -k'resize map nombredeldispositivo'

Siguiendo nuestro ejemplo:

[root@c7kl ~]# multipathd -k'resize map hus1_bd1'

Luego verificamos el tamaño de nuestro dispositivo con el comando multipathd -ll nombredeldispositivo

[root@c7kl ~]# multipath -ll hus1_bd1
hus1_bd1 (360060e80101b6840058bb6540000007f) dm-4 HITACHI ,DF600F          
size=300G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 0:0:0:0 sda 8:0   active ready running
`-+- policy='service-time 0' prio=0 status=enabled
  `- 2:0:0:0 sdk 8:160 active ready running

Donde finalmente podemos ver el nuevo tamaño